Список видео 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, прикрепленные к видео.

Другие вопросы по тегам