我正在自己的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..]
如果您想获取给定频道的整个视频列表而没有任何遗漏,我建议您改用 PlaylistItems 端点,通过将适当的值传递给端点的 playlistId 参数来查询给定频道的上传列表。
给定频道的上传播放列表 ID 是在查询频道自己的终结点时获取的。所需的 ID 可在 .items.contentDetails.relatedPlaylists.uploads
中找到。通常,频道 ID 及其相应的上传播放列表 ID 由 s/^UC([0-9a-zA-Z_-]{22})$/UU1/
关联。
还有一点:您应该了解视频的发布时间和上传时间之间的差异。