我一直在使用 YouTube 数据 API,我只想调用 API 并让它返回频道的最新视频。目前我一直在这样做:
https://www.googleapis.com/youtube/v3/search?key=[key]&channelId=[channelId]&part=id&order=date&maxResults=1,
但这仍然使用许多单位。
有没有办法在不使用这么多单位的情况下获取我需要的数据?
我一直在使用 YouTube 数据 API,我只想调用 API 并让它返回频道的最新视频。目前我一直在这样做:
https://www.googleapis.com/youtube/v3/search?key=[key]&channelId=[channelId]&part=id&order=date&maxResults=1,
但这仍然使用许多单位。
有没有办法在不使用这么多单位的情况下获取我需要的数据?
对于你的第一个问题:
我只想调用 API 并让它返回频道的最新视频。
答案是肯定的。您必须按以下步骤进行:
第一步:获取你感兴趣的频道对应的上传播放列表的ID:
对于给定的通道(由其 ID 标识CHANNEL_ID),调用Channels.listAPI 端点,查询其请求参数id设置为CHANNEL_ID:
https://www.googleapis.com/youtube/v3/channels?part=contentDetails&fields=items/contentDetails/relatedPlaylists/uploads&id=CHANNEL_ID&key=....
所需的上传播放列表 ID 将作为端点返回contentDetails.relatedPlaylists.uploads的Channels 资源JSON 对象的属性值找到。
通常,频道 ID 与其对应的上传播放列表 ID 相关联s/^UC([0-9a-zA-Z_-]{22})$/UU\1/。
请注意,上面我使用fields请求参数从 API 仅获取实际需要的信息。
另请注意,您Channels.list只需按上述方式调用一次,即可根据需要多次使用获得的上传播放列表 ID。
第二步:获取您感兴趣的频道最新上传的视频:
为此,您需要依赖PlaylistItems.list查询的 API 端点的未记录行为,并将其playlistId请求参数设置为您在步骤 1 中获得的 ID:
根据我的这个答案的第 2 点:
对于频道的上传播放列表,
PlaylistItems.listAPI 端点返回的项目(必须)按时间倒序排列contentDetails.videoPublishedAt。
因此,您必须PlaylistItems.list在循环中重复调用以下 URL(使用pagination):
https://www.googleapis.com/youtube/v3/playlistItems?playlistId=UPLOADS_ID&part=snippet&fields=nextPageToken,items/snippet/resourceId&maxResults=50&pageToken=PAGE_TOKEN&key=...
上UPLOADS_ID图是第 1 步获取的上传播放列表的 ID。
pageToken=PAGE_TOKEN当且仅当您不是PlaylistItems.list第一次调用时才需要请求参数。当端点被第 - 次调用N时,使用N >= 2, thenPAGE_TOKEN将是nextPageToken从前一个端点调用获得的 JSON 响应的属性值。如果端点调用未提供该属性nextPageToken,则分页循环终止。
为了实现的正确性,需要对结果集进行分页:当属性的值不等于时,PlaylistItems.list您必须忽略从每个端点调用获得的数组snippet对象。itemssnippet.resourceId.kindyoutube#video
对于snippet从端点获得的每个snippet.resourceId.kind等于 的对象youtube#video,该属性snippet.resourceId.videoId设置为属于由 标识的播放列表的上传视频的 ID UPLOADS_ID。
因此,当您第一次遇到snippet后一种对象时,您会保留相应的视频 ID 并中断分页循环(因此PlaylistItems.list不再调用)。
关于你的第二个问题:
有没有办法在不使用这么多单位的情况下获取我需要的数据?
再次,答案是肯定的。
考虑到配额成本,执行步骤 1 执行一次,执行步骤 2 执行 N 次,相当于1 + N * 1 = N + 1单位成本。此外,如果不执行步骤 1,则成本将是N单位。UPLOADS_ID(一旦您已经从之前的步骤 1 + 2 运行中知道,您就不需要执行步骤1。)
另请注意,您的分页循环很可能会以N1结束;因此,您的 API 调用很可能只需要 2 个单位的配额成本。如果不执行第 1 步,则隐含的配额成本很可能只有 1 个单位。
以下成本 2 单位
baseurl = https://www.googleapis.com/youtube/v3
获取频道"Upload"ID
{baseurl}/channels?part=contentDetails&id={channel Id}&key={api key}
然后使用上传IDplaylistItems
{baseurl}/v3/playlistItems?playlistId={upload id}&part=snippet&maxResults={max numbers}&key={api key}