API playlistItems YouTube возвращает неполный набор результатов - PullRequest
1 голос
/ 21 января 2020

Я видел эту проблему, упоминавшуюся здесь несколько раз, но до сих пор я не видел никакого разрешения. Я почти уверен, что это ошибка в API, но любая помощь в работе с ней будет признательна.

Проблема : я пытаюсь получить все элементы в плейлисте, используя вызов API playlistItems v3. Иногда это работает точно так, как ожидалось, но иногда возвращается только с частичным набором результатов. Когда он возвращается с частичным / неполным списком, всегда верны две вещи:

  • Будет возвращено только 26 элементов. Для totalResults и resultsPerPage будет правильно задано полное количество элементов в списке воспроизведения, но в элементах [] будет фактически заполнено только 26 элементов. Если ожидается многостраничный набор результатов, вы получите несколько страниц с пустыми элементами [], как только пройдете элемент № 26.
  • Это неправильное поведение является атрибутом списка. Если список отображает это поведение, он, очевидно, всегда будет отображать это поведение. Некоторые списки всегда работают нормально, другие списки всегда обрезаются до 26 элементов.

Поведение полностью не зависит от maxResults, поэтому, если вы установите maxResults = 50 и запросите списки воспроизведения с 50 элементами в нем, в результатах будет указано totalResults = 50, но на самом деле вы получите только 26 заполненных элементов.

Какой бы ни была основная причина этой проблемы, я считаю, что если totalResults сообщает другое число фактическому количеству результатов в наборе результатов это явно ошибка.

Я видел использование предлагаемого iframe API в качестве возможного решения, но мне нужно десериализовать результаты в фоновом потоке в Swift, поэтому я бы предпочел использовать данные v3 API, при условии, что он работает в соответствии с документацией.

Я включаю 3 примера ниже. Вы можете наблюдать результаты, вставив URL-адрес в браузер, подставив [ключ] для своего ключа API.

Пример 1:

https://www.googleapis.com/youtube/v3/playlistItems?key=[key]&playlistId=RDCLAK5uy_kGA_NH_mqT53XwMP_IHL21Pi_bdYBeG58&maxResults=50&part=snippet

pageInfo:
- totalResults : 50
- resultsPerPage : 50

Items returned, page 0:
- Expected : 50
- Got : 26

Total items returned: 26 / 50

Пример 2:

https://www.googleapis.com/youtube/v3/playlistItems?key=[key]&playlistId=RDCLAK5uy_mfdqvCAl8wodlx2P2_Ai2gNkiRDAufkkI&maxResults=50&part=snippet

pageInfo:
- totalResults : 81
- resultsPerPage : 50

Items returned, page 0:
- Expected : 50
- Got : 26

Items returned, page 1:
- Expected : 36
- Got : 0

Total items returned: 26 / 81

Пример 3:

https://www.googleapis.com/youtube/v3/playlistItems?key=[key]&playlistId=RDCLAK5uy_nUi8B-S9ckz5feHM7oMGyQQ_eKW2Zl9aE&maxResults=50&part=snippet

pageInfo:
- totalResults : 112
- resultsPerPage : 50

Items returned, page 0:
- Expected : 50
- Got : 26

Items returned, page 1:
- Expected : 50
- Got : 0

Items returned, page 2:
- Expected : 12
- Got : 0

Total items returned: 26 / 112

Заранее благодарим за любую помощь, которую вы можете оказать мне в этом.

...