Py / app.py
Ryanus's picture
Update app.py
da8c0fa verified
raw
history blame
3.04 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_local_server(port=0, open_browser=False)
print("请复制以上链接,在浏览器中打开并完成授权,授权成功后程序将继续运行。")
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 in videos_to_upload:
upload_video(
youtube,
video['path'],
video['title'],
video['description'],
video['tags'],
video['privacy_status']
)
if __name__ == '__main__':
main()