我正在自己的YouTube频道上运行查询,以检索所有视频标题。我有680个视频,但只能获得其中一半。我所做的是创建一个代码,该代码自创建频道以来的所有年份都进行迭代,并且在一年内使用pageTokens来浏览50个视频包。
所以查询看起来像这样:
https://www.googleapis.com/youtube/v3/search?key={XXXXX}&channelId={XXXXX}&part=snippet,id&order=date&type=video&maxResults=50&publishedAfter=2018-01-01T00:00:00Z&publishedBefore=2019-01-01T00:00:00Z&pageToken=CDIQAA
在这些查询的结果中,我指出其中包含以下内容:
array (
'totalResults' => 321,
'resultsPerPage' => 50,
),
遍历页面,我得到2个页面,其中包含50个项目,然后另一个页面的结果也显示'resultsPerPage' => 50,
,但仅包含35个视频,该年的其余时间在JSON中有0个“项目”数据。因此,有问题的页面只给出了135个结果,而不是321个结果。切换到下一年后,我又得到了2页完整的结果,然后是缺少部分然后是空白的页面。
有什么主意吗?
这是最后一个JSON数据集的摘录:
array (
'kind' => 'youtube#searchListResponse',
'etag' => '"XpPGQXPnxQJhLgs6enD_n8JR4Qk/IsJyhRyDQ6qMmAHldktSRzEN2qs"',
'nextPageToken' => 'CJYBEAA',
'prevPageToken' => 'CGQQAQ',
'regionCode' => 'DE',
'pageInfo' =>
array (
'totalResults' => 321,
'resultsPerPage' => 50,
),
'items' =>
array (
0 =>
[..contents..]
35 =>
[..last content and closing brackets..]
答案 0 :(得分:1)
如果要获得给定频道的整个视频列表而没有任何遗漏,建议您使用PlaylistItems endpoint,通过将适当的值传递给端点的来查询给定频道的上传列表playlistId 参数。
查询channel's own endpoint后,即可获取给定频道的上载 playlistId 。所需的ID位于.items.contentDetails.relatedPlaylists.uploads
。通常,频道ID及其对应的上传播放列表ID与s/^UC([0-9a-zA-Z_-]{22})$/UU\1/
相关。
再说一遍:您应该注意视频的发布时间和上传时间之间的difference。如上所示,从 PlaylistItems 端点获取的视频列表按上传时间排序(从最新到最新),而列表本身包含附加到视频的 publishedAt 属性。