YouTube API视频列表返回的结果少于指示的结果

时间:2019-04-08 09:27:00

标签: youtube-api

我正在自己的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..]

1 个答案:

答案 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 属性。