我试图使用Google Auth Python库在我自己的YouTube账户中执行OAuth2,这样我就可以收集我自己订阅的指标。
我已经设置了一个服务帐户,该进程创建了一个“Compatible OAuth2”客户端,我从该客户端导出了JSON密钥文件。我还设置了一个API密钥,它也可以执行所有操作(是的,我知道,您体内的sec-eng灵魂正在死亡)...
代码如下:
# Python 3.10.0
from google.oauth2 import service_account
import requests
import json
import os
# Start an OAuth session
service_account_info = json.load(open(f'{os.path.dirname(__file__)}/.config/service_account.json'))
credentials = service_account.Credentials.from_service_account_info(service_account_info)
# API Key
with open(f'{os.path.dirname(__file__)}/.config/.apikey') as f:
API_KEY = f.read()
HEADERS = {'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': f'Bearer {credentials}'}
# Construct the URL
URL = 'https://www.googleapis.com/youtube/v3/subscriptions'
# Parameters
PARAMS = {'part':'id', 'maxResults':'250', 'order':'alphabetical', 'mine':'true', 'key': API_KEY}
# Make the request
request = requests.get(URL, headers=HEADERS, params=PARAMS)
response = request.json()
# Print the response
print(json.dumps(response, indent=4))
但我得到这个错误:
{
"error": {
"code": 401,
"message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"errors": [
{
"message": "Invalid Credentials",
"domain": "global",
"reason": "authError",
"location": "Authorization",
"locationType": "header"
}
],
"status": "UNAUTHENTICATED"
}
}
我相当有信心,问题是在我如何处理credentials
,但我不知道这是应该如何去。
感谢您的意见和帮助。
我所要做的就是列出我自己的YouTube频道订阅。
谢谢你!
1条答案
按热度按时间vlju58qv1#
YouTube数据API不支持对标准YouTube帐户进行服务帐户身份验证。请参阅错误消息中的
OAuth 2 access token
。请求的身份验证凭据无效。需要OAuth 2访问令牌、登录Cookie或其他有效的身份验证凭据。
谣言
我听说它确实适用于Google Workspace域YouTube帐户,因为这样你就可以配置域范围的委托。我还没有尝试过
其他选项
您可以使用标准的oauth2并授权您的应用程序一次。存储刷新令牌,然后您的应用程序可以根据需要使用刷新令牌请求新的访问令牌。只需记住将您的应用程序设置为生产状态,否则您的刷新令牌将在七天后过期,您将需要再次授权应用程序。