Python YouTube 报告 API 身份验证

Python YouTube Reporting API Authentication

提问人:Nairda123 提问时间:7/7/2023 最后编辑:Nairda123 更新时间:7/11/2023 访问量:90

问:

我已经整理了许多关于这个主题的帖子,但大多数似乎都过时了。

我正在尝试使用此脚本调用 YouTube 报告 API

但是,我不断收到错误:

  • 使用“桌面应用程序”OAuth 时,我得到:

错误 400:invalid_request,为了保证用户安全,带外 (OOB) 流已被阻止。

  • 使用“Web 应用程序”OAuth 时,我得到:

错误 400:redirect_uri_mismatch,请求中的重定向 URI urn:ietf:wg:oauth:2.0:oob 只能由本机应用程序的客户端 ID 使用。不允许用于 WEB 客户端类型。

我只是仍在测试我的代码,并且已经用完了 jupyter notebook 和 Visual Studio Code。两者的错误相同。

我仍然对我应该使用哪一个感到困惑,但是为我的本地主机添加重定向 URI 不起作用,不确定如何进行。

编辑:我直接使用来自 YouTube 文档的以下代码示例:

import os
import google.oauth2.credentials
import google_auth_oauthlib.flow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow

SCOPES = ['https://www.googleapis.com/auth/yt-analytics.readonly']

API_SERVICE_NAME = 'youtubeAnalytics'
API_VERSION = 'v2'
CLIENT_SECRETS_FILE = 'CREDENTIALS.json'
def get_service():
  flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
  credentials = flow.run_console()
  return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)

def execute_api_request(client_library_function, **kwargs):
  response = client_library_function(
    **kwargs
  ).execute()

  print(response)

if __name__ == '__main__':
  # Disable OAuthlib's HTTPs verification when running locally.
  # *DO NOT* leave this option enabled when running in production.
  os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'

  youtubeAnalytics = get_service()
  execute_api_request(
      youtubeAnalytics.reports().query,
      ids='channel==MINE',
      startDate='2017-01-01',
      endDate='2017-12-31',
      metrics='estimatedMinutesWatched,views,likes,subscribersGained',
      dimensions='day',
      sort='day'
  )

如前所述,我有 http://localhost:8888、http://localhost:8888/oauth2callback 等。在我的 json 文件 + 在 Google 控制台中。

'urn:ietf:wg:OAuth:2.0:OOB'在任何时候都不在我的代码/文件/谷歌控制台中。我还在我的 OAuth 同意屏幕设置中定义了 .../auth/yt-analytics.readonly。

真的不知道我错过了什么。

youtube-api google-api-python-客户端

评论

1赞 Linda Lawton - DaImTo 7/9/2023
请编辑您的问题并附上您的代码

答:

0赞 Linda Lawton - DaImTo 7/8/2023 #1

使用“桌面应用程序”OAuth 时,我得到: 错误 400:invalid_request,为了保证用户安全,带外 (OOB) 流已被阻止。

打开你的credentials.json文件,是否有如下所示的重定向uri,如果是这样,请将其删除。urn:ietf:wg:oauth:2.0:oob

使用“Web 应用程序”OAuth 时,我得到: 错误 400:redirect_uri_mismatch,请求中的重定向 URI urn:ietf:wg:oauth:2.0:oob 只能由本机应用程序的客户端 ID 使用。不允许用于 WEB 客户端类型。

urn:ietf:wg:oauth:2.0:oob不再是 Web 或已安装应用的有效重定向 URI。并不是说它曾经用于网络。您现在只能将 http://localhost 用于已安装的应用。

评论

0赞 Nairda123 7/9/2023
credentials.json 文件中唯一的重定向 URI 是我在下载之前编写的重定向 URI,其中包括“localhost:8888”和“127.0.0.1:8888”。任何地方都没有提到“urn:ietf:wg:oauth:2.0:oob”
0赞 Linda Lawton - DaImTo 7/9/2023
如果已创建 Web 凭据,请确保使用 Web 应用代码。这是有区别的
0赞 Nairda123 7/10/2023
我已经编辑了问题并发布了我正在使用的代码,它直接来自 YouTube 文档。我已经创建了 Web 应用程序 + 桌面应用程序 oauth 凭据,但似乎都不起作用。
1赞 Linda Lawton - DaImTo 7/11/2023
有你的问题,文档说要创建安装信任作为其安装的应用程序代码InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE
0赞 Nairda123 7/11/2023
虽然我看不到任何创建“已安装应用程序”凭据的选项?只有 Web 应用程序、桌面应用程序和其他一堆似乎不适合这种情况?
0赞 Nairda123 7/11/2023 #2

该脚本旨在与“桌面应用程序”类型的凭据一起使用。

YouTube 的文档已过时,需要更改以下内容才能正常工作:

credentials = flow.run_console()

更改为

credentials = flow.run_local_server()