使用YouTube API上传视频时如何避免每次运行都需手动授权?
解决YouTube API上传视频每次运行需重复授权的方案
问题原因
你当前代码每次运行都会调用flow.run_console()重新发起授权流程,没有缓存首次授权后获取的有效凭证,因此每次执行都需要手动完成授权验证。
解决方案
通过本地序列化存储授权凭证,后续运行优先读取本地缓存的有效凭证,无需重复授权。
修改步骤
- 引入
pickle模块用于凭证的序列化存储与读取 - 新增凭证缓存逻辑:先检测本地是否存在已保存的凭证文件,存在则直接加载,不存在再走授权流程,授权完成后将凭证写入本地文件
- 额外处理凭证过期逻辑:如果凭证过期且存在刷新令牌,自动刷新凭证无需重新授权
修改后的完整代码
# -*- coding: utf-8 -*- import os import pickle import google_auth_oauthlib.flow import googleapiclient.discovery import googleapiclient.errors from google.auth.transport.requests import Request from googleapiclient.http import MediaFileUpload scopes = ["https://www.googleapis.com/auth/youtube.upload"] def main(): # Disable OAuthlib's HTTPS verification when running locally. # *DO NOT* leave this option enabled in production. os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" api_service_name = "youtube" api_version = "v3" client_secrets_file = "C:/Users/User/computer science/moviepy/client_secret_660339349555-der7rru7no2g1v4oe1o1g7qqm27ujodo.apps.googleusercontent.com.json" # 凭证缓存文件路径 token_file = "youtube_upload_token.pkl" credentials = None # 先读取本地缓存的凭证 if os.path.exists(token_file): with open(token_file, 'rb') as token: credentials = pickle.load(token) # 如果凭证不存在或者已失效 if not credentials or not credentials.valid: if credentials and credentials.expired and credentials.refresh_token: # 凭证过期则自动刷新 credentials.refresh(Request()) else: # 没有有效凭证则发起授权流程 flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file( client_secrets_file, scopes) credentials = flow.run_console() # 保存新的凭证到本地 with open(token_file, 'wb') as token: pickle.dump(credentials, token) youtube = googleapiclient.discovery.build( api_service_name, api_version, credentials=credentials) request = youtube.videos().insert( part = "snippet,status", body={ "snippet": { "title": "test", "description": "四次是鬼" }, "status": { "privacyStatus": "private" } }, media_body=MediaFileUpload("D:/Downloads/ytdl/wtf8.mp4") ) response = request.execute() #print(response) if __name__ == "__main__": main()
注意事项
- 首次运行代码仍需完成一次授权,后续运行无需重复操作
- 生成的
youtube_upload_token.pkl文件包含你的授权信息,请勿泄露给他人 - 生产环境请删除
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"这行配置,避免安全风险
内容的提问来源于stack exchange,提问作者Steve Deltora
相关产品推荐
相关产品推荐

