提问人:Nairda123 提问时间:7/7/2023 最后编辑:Nairda123 更新时间:7/11/2023 访问量:90
Python YouTube 报告 API 身份验证
Python YouTube Reporting API Authentication
问:
我已经整理了许多关于这个主题的帖子,但大多数似乎都过时了。
我正在尝试使用此脚本调用 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。
真的不知道我错过了什么。
答:
使用“桌面应用程序”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 用于已安装的应用。
评论
该脚本旨在与“桌面应用程序”类型的凭据一起使用。
YouTube 的文档已过时,需要更改以下内容才能正常工作:
credentials = flow.run_console()
更改为
credentials = flow.run_local_server()
评论