Список видео 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 видео, остальные за этот год имеют 0 "элементов" в данных JSON. Таким образом, рассматриваемые страницы дают только 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 ответ
Если вы хотите получить полный список видео данного канала без каких-либо пропусков, я предлагаю вам вместо этого использовать конечную точку PlaylistItems, запрашивая список загрузок данного канала, передавая правильное значение в параметр playlistId конечной точки.
PlaylistId загрузок данного канала получается после запроса собственной конечной точки канала. Необходимый идентификатор можно найти на .items.contentDetails.relatedPlaylists.uploads
, Обычно идентификатор канала и соответствующий ему идентификатор списка воспроизведения для загрузки связаны с s/^UC([0-9a-zA-Z_-]{22})$/UU\1/
,
Еще одно замечание: вы должны знать о разнице между опубликованным видео и временем загрузки. Список видео, полученный из конечной точки PlaylistItems, запрашиваемый, как указано выше, упорядочен по времени загрузки (сначала самое новое), а сам список содержит опубликованные свойства At, прикрепленные к видео.