Получить список загруженных видео на канал YouTube по дате публикации

Мне известно о подобных вопросах, которые задавали раньше, но не об этом, так что терпите меня ...

Я хочу воспроизвести список загруженных видео канала в том виде, в каком они отображаются на веб-странице YouTube (с разбивкой на страницы и сортировкой по дате публикации).

Для этого я пытаюсь получить список VideoID с канала YouTube, отсортированный по дате публикации (по YouTube, а не по моему коду, поскольку в плейлисте может быть 1000 видео, а YouTube ограничивает до 50 результатов на запрос, которые могут добавить вверх, когда я хочу показать пользователю только первые 25 записей).

Изначально я использовал этот поисковый запрос YouTube Data API v3:

https://www.googleapis.com/youtube/v3/search?key=[APIKey]&channelId=[ChannelID]&part=snippet,id&order=date&type=video&maxResults=25

Однако, как упоминалось в некоторых предыдущих сообщениях о stackoverflow (YouTube API v3 Search не возвращаются все видео), этот метод не гарантирует возврат всех видео, и действительно, некоторые видео отсутствуют в результате, что делает использование этого запроса проблематичным.

Затем я увидел это видео Google в некоторых сообщениях:
https://www.youtube.com/watch?v=RjUlmco7v2M

В видео объясняется, что вы должны сначала получить плейлист «загрузки» для канала (я также беру название и миниатюру канала в этом запросе), который я использую:

https://www.googleapis.com/youtube/v3/channels?key=[APIKEY]&part=snippet,contentDetails&id=[ChannelID]

И когда у меня есть идентификатор плейлиста "загрузки", я запрашиваю:

https://www.googleapis.com/youtube/v3/playlistItems?key=[APIKey]&playlistId=[PlaylistID]&part=snippet,id&order=date&type=video&maxResults=25

Однако возвращенные записи не сортируются по дате публикации и согласно документации (https://developers.google.com/youtube/v3/docs/playlistItems/list), с этим запросом не связан дополнительный параметр "порядок".

Имея в виду все эти проблемы, как мне отсортировать первые 25 записей из плейлиста «загрузки» по дате публикации без загрузки всего плейлиста, чтобы я мог точно воссоздать, как веб-сайт YouTube перечисляет видео.


person bLight    schedule 11.12.2018    source источник
comment
Не могли бы вы предоставить журналы?   -  person abielita    schedule 12.12.2018
comment
@abielita Этот URL (не забудьте использовать действующий APIKEY) показывает, что канал с загружаемым плейлистом видео не отсортирован по дате публикации google   -  person bLight    schedule 19.03.2019


Ответы (2)


Проведя несколько тестов и поблагодарив этот ответ (а также следующие ответы), я смог получить необходимую информацию с помощью API данных YouTube v3, и вот как я это сделал:

Во-первых, в своем вопросе вы используете API "search" - поскольку я не знаю, какие критерии вы используете в поисковом запросе, я пропустил его, чтобы напрямую получить идентификатор плейлиста "upload" из заданного channel_id.


Используя channel_id = UCT2rZIAL-zNqeK1OmLLUa6g (который принадлежит к "Microsoft HoloLens"), я использую API "каналов" для получения uploads идентификатора плейлиста .

Вот URL-запрос для получения идентификатора плейлиста "upload" из ранее упомянутого channel_id:

https://www.googleapis.com/youtube/v3/channels?part=id%2Csnippet%2CcontentDetails&fields=items(contentDetails%2FrelatedPlaylists%2Fuploads%2Csnippet%2Flocalized)&id=UCT2rZIAL-zNqeK1OmLLUa6g&key=<YOUR_API_KEY>

Объяснение:

  • часть: установите части snippet и contentDetails для получения следующих данных:
  • поля: из части snippet: (localized, description и title) и из части contentDetails: (relatedPlayLists и uploads).
  • id: channel_id используется в этом запросе.

Вот результаты этого запроса:

{
 "items": [
  {
   "snippet": {
    "localized": {
     "title": "Microsoft HoloLens",
     "description": "The official YouTube channel of Microsoft HoloLens. Transform your world with holograms. Visit HoloLens.com for more info."
    }
   },
   "contentDetails": {
    "relatedPlaylists": {
     "uploads": "UUT2rZIAL-zNqeK1OmLLUa6g"
    }
   }
  }
 ]
}

Проверьте значение свойства uploads в разделе contentDetails. Это значение будет использовано в следующем запросе API.

Вы также можете проверить эти результаты в демонстрация Google API Explorer Я подготовился к отправке этого запроса.


После получения значения uploads (как указано в предыдущих строках) теперь пора использовать API" playlistItems " для создания следующего URL:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&playlistId=UUT2rZIAL-zNqeK1OmLLUa6g&fields=items(contentDetails(videoId%2CvideoPublishedAt)%2Csnippet%2Ftitle%2Cstatus)&maxResults=25&key=<YOUR_API_KEY>

Объяснение:

  • часть: установите части snippet и contentDetails для получения следующих данных:
  • поля: из части snippet: (title и status) и из _29 _ часть: (videoId и videoPublishedAt).
  • playlistId: playlistId, используемый в этом запросе - (то есть значение uploads).
  • maxResults: установите значение 25.

Вот результаты этого запроса:

{
 "items": [
  {
   "snippet": {
    "title": "Microsoft Windows Mixed Reality update | October 2018"
   },
   "contentDetails": {
    "videoId": "00vnln25HBg",
    "videoPublishedAt": "2019-01-04T17:43:47.000Z"
   }
  },
  {
   "snippet": {
    "title": "How to use Spectator View for mobile devices"
   },
   "contentDetails": {
    "videoId": "3fXlPw_FGLg",
    "videoPublishedAt": "2018-10-15T17:13:42.000Z"
   }
  },
  {
   "snippet": {
    "title": "Microsoft HoloLens: Visualizing the next mission to Mars."
   },
   "contentDetails": {
    "videoId": "XVBbJ4EtAQY",
    "videoPublishedAt": "2018-07-02T16:30:26.000Z"
   }
  },
  {
   "snippet": {
    "title": "Microsoft HoloLens: Making mixed reality plug and play."
   },
   "contentDetails": {
    "videoId": "QwXcSekZKWE",
    "videoPublishedAt": "2018-06-25T23:25:55.000Z"
   }
  },
  {
   "snippet": {
    "title": "Microsoft HoloLens | Windows Mixed Reality HMD Exerciser"
   },
   "contentDetails": {
    "videoId": "RU3OMjq_Yic",
    "videoPublishedAt": "2018-05-14T16:58:43.000Z"
   }
  }
 ]
}

Я проверяю порядок элементов, и они отсортированы по значению videoPublishedAt (от нового к старому).

Вы также можете проверить эти результаты в Функциональность попробуйте-it в официальной документации YouTube Data API v3. 1


1 В этом случае мне не удалось использовать Google API Explorer (как я использовал в первом запросе), потому что я всегда получал "внутреннюю ошибку".

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "backendError",
    "message": "Backend Error"
   }
  ],
  "code": 500,
  "message": "Backend Error"
 }
}

Я думаю, это потому, что проводник Google API устарел.

Если кто-то хочет это проверить, вот демонстрация.

person Mauricio Arias Olave    schedule 24.01.2019
comment
Я считаю, что проблема более сложная, есть две даты публикации: дата загрузки видео на YouTube и дата публикации видео. API возвращает дату загрузки, а сам сайт YouTube (не API) показывает дату публикации. Таким образом, невозможно на 100% воспроизвести список видео, который можно увидеть на YouTube, по крайней мере, для каналов, которые заранее ставят несколько видео в очередь, а затем делают их общедоступными в другом порядке. - person bLight; 28.02.2019
comment
Позвольте мне исправить себя, вы действительно получаете правильную дату публикации, но записи не обязательно сортируются по дате публикации, поэтому попытка воссоздать, как YouTube перечисляет каналы (с разбивкой на страницы), не работает (если вы не хотите получить весь список для канал, а затем отсортируйте его самостоятельно, что увеличивает накладные расходы на полосу пропускания / квоту). - person bLight; 19.03.2019
comment
@bLight Боюсь, я не могу понять, плейлисты загрузок действительно возвращают загруженные видео, где первым результатом является самое последнее видео и так далее, можете ли вы поделиться в своем вопросе каналом YouTube, который вы используете для получения его загруженных видео и добавить в том же вопросе желаемый порядок? - мое другое предложение: если канал YouTube уже имеет желаемые результаты, вы можете очистить такие результаты. Без более наглядного примера вас трудно понять - в основном из-за языкового барьера. - person Mauricio Arias Olave; 20.03.2019
comment
Вот пример канала: youtube.com/user/TheYoungTurks. Вы заметите, что возвращенный список видео не сортируются по дате публикации с помощью ветви API playlistItems. - person bLight; 20.03.2019
comment
@bLight, если результаты не упорядочены по publishDate, можете ли вы сами упорядочить результаты? или подумайте о парсинге веб-страниц view-source:https:////www.youtube.com/playlist?list=UU1yBKRuGpC1tSM73A0ZjYjQ&disable_polymer=1 - person Mauricio Arias Olave; 20.03.2019
comment
Самостоятельная сортировка потребует загрузки всего канала, а это могут быть тысячи видео, когда я просто хочу воспроизвести, как YouTube показывает видео канала с использованием разбивки на страницы. Накладные расходы на загрузку всего канала в моем случае просто не стоят того. - person bLight; 21.03.2019

Я также использую идентификатор списка воспроизведения, чтобы получить список видео, однако мои, похоже, отсортированы по дате от самого нового к самому старому. Обратите внимание, что Youtube возвращает токен страницы, который вы можете использовать для получения следующих 25 (или в моем случае 50) видео. Я запрашиваю API таким образом:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&pageToken= not_used_for_first_query&fields=nextPageToken,items(snippet(publishedAt,title,desc ription,thumbnails(default(url)),resourceId(videoId)))&playlistId=uploads_playlist_id&maxResults=50&order=date&key=your_api_key

Это возвращается в ответ JSON:

Название видео.
Дата публикации.
Описание видео.
URL-адрес видео на Youtube.
Уникальный идентификатор видео.
Миниатюра видео.

Вы можете увидеть мой рабочий пример на https://www.scriptbarrel.com

person Bman70    schedule 10.05.2019
comment
Кроме того, у меня нет проблем с отсутствующими видео - person Bman70; 10.05.2019
comment
Не все каналы страдают от неисправности видео. Это происходит только тогда, когда они загружают видео и не публикуют его сразу, каналы, которые загружают и публикуют без задержки, не страдают от этой проблемы. Отсутствие видео происходит только с использованием Search API, а не Playlist API. - person bLight; 13.05.2019