我正在尝试使用Python连接到YouTube Analytics API。当我在“凭据”标签中转到Google的开发者控制台时,我会点击Create credentials
下拉菜单,然后选择Help me choose
。我点击了我想要使用的API(YouTube Analytics API
),我将从(Other non-UI (e.g. cron job, daemon)
)调用,我将访问哪些数据(Application Data
),然后我是否'使用Google App Engine(no
)。我点击按钮查看我需要的凭据,它会告诉我You alread have credentials that are suitable for this purpose
。
我有Service account
用于连接Google Search Console API以访问我公司拥有的多个网站的数据。因为我们有多个站点,所以我根据我的电子邮件地址使用委派凭据。这是我用于对Search Console API进行身份验证的代码:
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
from apiclient.discovery import build
scopes = ['https://www.googleapis.com/auth/webmasters.readonly']
credentials = ServiceAccountCredentials.from_json_keyfile_name('keyfile.json', scopes=scopes)
delegated_credentials = credentials.create_delegated('<my-email>')
http_auth = delegated_credentials.authorize(Http())
webmasters_service = build('webmasters', 'v3', http=http_auth)
现在,我正在尝试使用与YouTube Analytics API类似的方法,但我收到此错误:HttpAccessTokenRefreshError: unauthorized_client: Unauthorized client or scope in request.
。这是我的代码:
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
from apiclient.discovery import build
START_DATE = "2016-09-01"
END_DATE = "2016-09-30"
scopes = ['https://www.googleapis.com/auth/yt-analytics.readonly']
credentials = ServiceAccountCredentials.from_json_keyfile_name('keyfile.json', scopes=scopes)
delegated_credentials = credentials.create_delegated('<my-email>')
http_auth = delegated_credentials.authorize(Http())
youtube_service = build('youtubeAnalytics', 'v1', http=http_auth)
analytics_query_response = youtube_service.reports().query(
ids="channel==<my-youtube-channel-id>",
metrics="views",
start_date=START_DATE,
end_date=END_DATE
).execute()
keyfile.json
是我用来连接Search Console API的同一文件(包含服务帐户凭据)。我甚至尝试创建一个新的服务帐户并使用这些凭据,但我没有任何运气。是的,我已经在开发者控制台中启用了所有YouTube API。
你知道我为什么会收到HttpAccessTokenRefreshError: unauthorized_client: ...
错误吗?
编辑:之前我使用的是OAuth ID,而不是服务帐户,当我运行脚本时,会显示一个浏览器标签,我必须选择一个帐户。我收到了两个选项:一个是我的电子邮件,另一个是我作为经理添加的YouTube帐户。你是否认为我收到了这个错误,因为我正在使用我的电子邮件地址来生成凭据(而不是YouTube帐户)?
edit2:YouTube帐户似乎不属于我们Google Apps域的范畴。因此,这可能就是我无法使用我的电子邮件地址进行授权的原因,即使我已经成为该电子邮件地址的YouTube帐户的经理。
答案 0 :(得分:2)
我在documentation上发现您无法在YouTube Analytics API中使用服务帐户。
这里说:
服务帐户流支持服务器到服务器的交互 不访问用户信息。但是,YouTube Analytics API 不支持这种流程。由于无法链接服务 帐户使用YouTube帐户,尝试使用此帐户授权请求 flow会产生错误。
我也在谷歌搜索者的回答中找到了这个thread。
有关详细信息,请查看此SO question。