Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:使用谷歌提供的代码片段将视频上传到youtube不起作用_Python_Python 3.x_Google Api_Youtube Data Api - Fatal编程技术网

Python:使用谷歌提供的代码片段将视频上传到youtube不起作用

Python:使用谷歌提供的代码片段将视频上传到youtube不起作用,python,python-3.x,google-api,youtube-data-api,Python,Python 3.x,Google Api,Youtube Data Api,我正在尝试使用python脚本将视频上传到Youtube 所以给出的代码(upload_video.py)应该可以工作,我遵循了设置,包括启用Youtube API和获取OAuth密钥等等。您可能会注意到,代码是在Python2中编写的,因此我使用了2to3使其与python3.7一起运行。问题是,出于某种原因,我在执行upload_video.py时被要求登录: 现在不应该出现这种情况,因为这就是创建client_secrets.json文件的全部意义,您不需要显式登录。因此,一旦我在she

我正在尝试使用python脚本将视频上传到Youtube

所以给出的代码(upload_video.py)应该可以工作,我遵循了设置,包括启用Youtube API和获取OAuth密钥等等。您可能会注意到,代码是在Python2中编写的,因此我使用了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))
现在我不明白为什么需要上传\u video.py-oauth2.json,因为在上传\u video.py文件中,oauth2机密文件被设置为“client\u 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'
回溯(最近一次呼叫最后一次):
文件“upload_video.py”,第177行,在
youtube=获取经过身份验证的服务(args)
文件“upload\u video.py”,第80行,在get\u authenticated\u服务中
凭据=存储。获取()
get中第407行的文件“/usr/lib/python3.7/site packages/oauth2client/client.py”
返回self.locked_get()
文件“/usr/lib/python3.7/site packages/oauth2client/File.py”,第54行,在locked_get中
credentials=client.credentials.new_from_json(content)
文件“/usr/lib/python3.7/site packages/oauth2client/client.py”,第302行,以新的格式,从_json开始
模块名称=数据[“模块”]
KeyError:“\u模块”

所以基本上现在我已经走到了死胡同。现在该怎么办

请参见
上传视频.py
中的功能代码
获取认证服务
:您不应该自己创建文件
上传视频.py-oauth2.json
!此文件是在OAuth2流完成后通过调用
get\u authenticated\u服务创建的


此外,您还可以阅读文档,以获取有关独立计算机上授权流的详细信息。

是的,我看到它创建了文件,但它是否应该使用sys.argv[0]?它不应该是sys.argv[1],因为它实际上是client_secrets.json文件吗?另外,我不能使用浏览器登录,但他们的文档虽然说明了不能使用浏览器登录的应用程序应该使用OAuth进行移动和桌面应用程序登录,但实际上并没有说明如何处理这种情况!本地文件的名称可以是除用户提供的JSON文件名以外的任何名称。两个JSON文件——一个由用户提供,另一个由身份验证生成——具有不同的内容!该文档指定和。通过初始OAuth流,您得到两个令牌:一个短期访问令牌和一个按需生成访问令牌的刷新令牌。检查具体代码。不使用浏览器的身份验证是不可能的,但一旦有了刷新令牌,就可以通过编程方式将其交换为访问令牌。如果不使用浏览器的身份验证无法使用OAuth流,那么我将不进一步探讨此选项。谢谢你的帮助!除了这些文档描述的过程之外,没有其他方法可以通过API上传视频。但是,在放弃您的追求之前,请再次考虑以下场景:(1)初始化:通过浏览器验证获得刷新令牌;(2) 迭代:根据需要多次查询API以获取访问令牌—无需任何浏览器交互!——使用(1)中的刷新令牌,然后继续调用目标API端点(同样,没有任何浏览器交互)。(访问令牌可用于多次调用目标API端点。)