【发布时间】:2021-06-03 16:29:25
【问题描述】:
我正在编写一个 Node.js 脚本,它将在 Lambda 中运行,以通过 YouTube Data v3 API 定期为我的组织的一个频道请求每个视频(公共、未列出或私有)的列表。为了做到这一点,似乎有两个步骤:
- 执行频道/列表调用https://developers.google.com/youtube/v3/docs/channels/list 以获取“上传”播放列表。
const channelResult = await google.youtube('v3').channels.list({
auth: youtubeApiKey,
part: ['snippet', 'contentDetails'],
id: ["my_channel_id"]
});
- 执行 playlistItems/list https://developers.google.com/youtube/v3/docs/playlistItems/list 以查看所有视频。
const videosResult = await google.youtube('v3').playlistItems.list({
auth: youtubeApiKey,
part: ['snippet', 'status'],
playlistId: "my_uploads_playlsit_id"
});
这只会作为运行云的脚本执行;没有用户界面或浏览器组件。当我将那里的唯一视频设置为公开时,这一切似乎都在我的测试频道中起作用。但如果我将其设置为私有,我会得到:
The playlist identified with the request's <code>playlistId</code> parameter cannot be found.
我必须做些什么才能仍然访问我频道的上传播放列表并显示私人视频?谢谢!
【问题讨论】:
-
您的代码有点模棱两可。
auth: youtubeApiKey是否将 API 密钥 传递给您的 API 调用?或者,否则,youtubeApiKey是一个有效的凭证对象(例如,Node.js Quickstart 的示例代码所示)?请注意,要访问私有数据,您必须成功完成 OAuth 2 授权/身份验证流程,如提到的示例代码所示。 -
@stvar 好问题——它最初是一个 API 密钥,但后来我意识到显然我需要更好的身份验证来访问私有数据。所以我将传递给
auth:的值更改为new google.auth.OAuth2客户端,我最终可以在本地机器上工作。但是我想知道当没有浏览器/人运行它并且它被 cron 触发时,我怎样才能让它在服务器端工作? -
@stvar 非常好。一旦我得到它的工作,我会在这个问题的答案中描述必要的步骤。
-
但您需要了解 Google 最近提出的以下要求:Python OAuth after few days fails refreshing tokens with “invalid_grant” error。
标签: node.js youtube youtube-api youtube-data-api google-authentication