Python:使用谷歌提供的代码段将视频上传到 youtube 不起作用
Posted
技术标签:
【中文标题】Python:使用谷歌提供的代码段将视频上传到 youtube 不起作用【英文标题】:Python: Uploading video to youtube using google provided code snippet does not work 【发布时间】:2020-08-09 00:24:28 【问题描述】:我正在尝试使用 python 脚本将视频上传到 Youtube。
所以给定的代码here (upload_video.py) 应该可以工作,我已经按照设置进行了设置,其中包括启用 Youtube API 和获取 OAuth 密钥等等。您可能会注意到代码在 Python 2 中,因此我使用 2to3 使其与 python3.7 一起运行。问题是由于某种原因,当我执行 upload_video.py 时被要求登录:
现在不应该发生这种情况,因为这就是拥有 client_secrets.json 文件的全部意义,您无需显式登录。所以一旦我退出这个 shell 浏览器,我看到的是:
这是第一行:
/usr/lib/python3.7/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access upload_video.py-oauth2.json: No such file or directory
warnings.warn(_MISSING_FILE_MESSAGE.format(filename))
现在我不明白为什么需要 upload_video.py-oauth2.json,因为在 upload_video.py 文件中,oauth2 机密文件设置为“client_secrets.json”。
无论如何,我创建了文件 upload_video.py-oauth2.json 并将 client_secrets.json 的内容复制到它。那时我没有得到奇怪的登录,但我得到了另一个错误:
Traceback (most recent call last):
File "upload_video.py", line 177, in <module>
youtube = get_authenticated_service(args)
File "upload_video.py", line 80, in get_authenticated_service
credentials = storage.get()
File "/usr/lib/python3.7/site-packages/oauth2client/client.py", line 407, in get
return self.locked_get()
File "/usr/lib/python3.7/site-packages/oauth2client/file.py", line 54, in locked_get
credentials = client.Credentials.new_from_json(content)
File "/usr/lib/python3.7/site-packages/oauth2client/client.py", line 302, in new_from_json
module_name = data['_module']
KeyError: '_module'
所以基本上现在我已经走到了死胡同。关于现在做什么的任何想法?
【问题讨论】:
【参考方案1】:见upload_video.py
中函数get_authenticated_service
的代码:你不应该自己创建文件upload_video.py-oauth2.json
!此文件是在 OAuth2 流程完成后通过在 get_authenticated_service
中调用 run_flow 创建的。
您还可以阅读文档OAuth 2.0 for Mobile & Desktop Apps,了解有关独立计算机上授权流程的详细信息。
【讨论】:
是的,我看到它创建了文件,但它应该使用 sys.argv[0] 吗?不应该是 sys.argv[1] 因为那实际上是 client_secrets.json 文件?另外,我不能使用浏览器登录,但他们的文档虽然声明不能使用浏览器登录的应用程序应使用 OAuth 用于移动和桌面应用程序,但实际上并未说明如何处理这种情况! 本地文件的名称可以是除用户提供的机密 JSON 文件的名称之外的任何名称。这两个 JSON 文件——一个由用户提供,一个通过身份验证生成——具有不同的内容! 文档指定steps 4 和step 5。通过初始 OAuth 流程,您将获得两个令牌:一个短期访问令牌和一个按需生成访问令牌的刷新令牌。通过this thread 获取具体代码。没有浏览器的身份验证是不可能的,但是一旦有了刷新令牌,就可以通过编程方式换取访问令牌。 如果使用 OAuth 流程无法在没有浏览器的情况下进行身份验证,那么我将不会进一步探索此选项。感谢您的帮助! 除了通过这些文档描述的过程之外,没有其他方法可以通过 API 上传视频。不过,在放弃追求之前,再考虑一下以下场景: (1)初始化:通过浏览器认证获取刷新令牌; (2) Iterations:根据需要多次向 API 查询访问令牌——无需任何浏览器交互! -- 使用 (1) 中的刷新令牌,然后继续调用目标 API 端点(同样,没有任何浏览器交互)。 (访问令牌可用于多次调用目标 API 端点。)以上是关于Python:使用谷歌提供的代码段将视频上传到 youtube 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用谷歌应用脚本将视频从谷歌驱动器上传到 YouTube?