Py / app.py
Ryanus's picture
Update app.py
7762994 verified
raw
history blame
2.95 kB
import os
import pickle
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
CLIENT_SECRETS_FILE = 'client_secrets.json'
CREDENTIALS_FILE = 'youtube_token.pickle'
SCOPES = ['https://www.googleapis.com/auth/youtube.upload']
def authenticate_youtube():
creds = None
if os.path.exists(CREDENTIALS_FILE):
with open(CREDENTIALS_FILE, 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
CLIENT_SECRETS_FILE, SCOPES)
# 手动认证:命令行打印链接,复制粘贴访问授权
creds = flow.run_console()
with open(CREDENTIALS_FILE, 'wb') as token:
pickle.dump(creds, token)
youtube = build('youtube', 'v3', credentials=creds)
return youtube
def upload_video(youtube, video_path, title, description, tags=None, privacy_status="private"):
if not os.path.exists(video_path):
print(f"错误:找不到视频文件 {video_path}")
return None
body = {
'snippet': {
'title': title,
'description': description,
'tags': tags or [],
'categoryId': '22' # People & Blogs
},
'status': {
'privacyStatus': privacy_status,
'selfDeclaredMadeForKids': False
}
}
media = MediaFileUpload(video_path, chunksize=-1, resumable=True, mimetype='video/*')
request = youtube.videos().insert(
part=','.join(body.keys()),
body=body,
media_body=media
)
response = request.execute()
print(f"上传成功!视频链接:https://www.youtube.com/watch?v={response['id']}")
return response['id']
def main():
youtube = authenticate_youtube()
# 在这里替换为你想上传的视频文件及信息
videos_to_upload = [
{
'path': 'your_video_1.mp4',
'title': '视频标题1',
'description': '这是视频描述1',
'tags': ['示例', '测试'],
'privacy_status': 'private'
},
{
'path': 'your_video_2.mp4',
'title': '视频标题2',
'description': '这是视频描述2',
'tags': ['样例', '上传'],
'privacy_status': 'unlisted'
}
]
for video_info in videos_to_upload:
upload_video(
youtube,
video_info['path'],
video_info['title'],
video_info['description'],
video_info.get('tags'),
video_info.get('privacy_status', 'private')
)
if __name__ == '__main__':
main()