无需 OAuth 且只需 API 密钥即可获取 Youtube Analytics

Get Youtube Analytics without OAuth and just API key

我正在尝试使用 google 云来获取我的 YouTube 频道的统计信息,但我不想每次都必须完成 OAuth 并在控制台中输入密钥。我有一个 API 键,我想知道是否有可能只使用 API 键获取统计数据,而不必通过 OAuth 流程,因为我计划将其连接到显示器上并且不想不断必须进行 OAuth。

这是我从 Github 复制的代码,但是再一次,这对 OAuth 来说有点麻烦,我希望只使用 API 密钥,所以我没有与它互动以获取我的统计数据。

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 = 'YTClientSecrets.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)

os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'

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

print(response.text)```

回答:不,您不能使用 API 密钥访问私人用户数据。

如何查看方法是否需要授权。

如果您查看 jobs.reports.get 的文档,您会注意到以下内容

所有请求私人用户数据的方法都将有一个授权部分。这告诉您需要哪个授权范围才能访问私有数据。

API 密钥仅允许您访问 public 数据,例如上传到 youtube 的 public 视频是 public 数据,因此您无需获得授权您可以使用 api 键访问它们。

服务帐号

还有另一种类型的授权称为服务帐户授权,它允许您预先授权服务帐户访问私人用户数据。

但是 API 支持服务帐户身份验证存在限制。

  • YouTube 分析 API 不支持服务帐户流。
  • YouTube 报告 API 仅支持拥有和管理多个 YouTube 频道的 YouTube 内容所有者的服务帐户流程。具体来说,内容所有者可以在为 onBehalfOfContentOwner 请求参数设置值的 API 请求中使用服务帐户。

如果您不能使用服务帐户身份验证,您唯一的选择是创建一个单一用户类型的系统,您在其中授权您的脚本存储您的刷新令牌,以便您的脚本将来可以使用刷新令牌来请求新的访问权限令牌。