Извлеките все видео из плейлиста youtube с помощью API youtube v3

Im получение видео из плейлиста с использованием API youtube v3 и получение 50 элементов без каких-либо проблем с этой ссылкой: –

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&playlistId=PLB03EA9545DD188C3&key=MY_API_KEY

Но количество видеороликов равно 100, а им всего 50. Как я могу получить следующие 50 предметов? Я попробовал start-index, но он не работает для v3 API. Любая помощь приветствуется.

Результаты API Data Data v3 для страниц YouTube разбиты на страницы. Поэтому вам нужно получить следующую страницу результатов для остальных.

В основном в ответе у вас есть nextPageToken .

Чтобы получить оставшиеся результаты, сделайте тот же самый точный вызов, но установив pageToken в полученный вами токен.

Есть три тока

  1. pageToken
  2. nextPageToken
  3. prevPageToken

а также вы можете установить максимальный размер страницы, используя

maxResults = 50 {допустимые значения от 1 до 50}

если вы находитесь на странице 1, вы не получите prevPageToken

но вы получаете nextPageToken

передать этот токен следующему запросу

pageToken = {nextPageToken получить от последнего запроса}

таким образом, вы можете перейти на следующую страницу. Попробуйте сами.

отредактированный

Хорошо, для других сценариев

Если вы находитесь на любой другой странице, это не первый или последний, тогда будут все эти значения

  1. pageToken = ‘Некоторые значения’
  2. nextPageToken = ‘Некоторые значения’
  3. prevPageToken = ‘Некоторые значения’

@Manoj: вы можете найти свой ответ ниже, если вы находитесь на последней странице

  1. pageToken = ‘Некоторые значения’
  2. nextPageToken = ‘Некоторые значения’
  3. prevPageToken = null

Это небольшой пример, выполненный в python с использованием Python Youtube Client Lib. Это также заимствует конфигурацию шаблонов из примеров API YouTube.

 """ Pull All Youtube Videos from a Playlist """ from apiclient.discovery import build from apiclient.errors import HttpError from oauth2client.tools import argparser DEVELOPER_KEY = "YOURKEY HERE" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" def fetch_all_youtube_videos(playlistId): """ Fetches a playlist of videos from youtube We splice the results together in no particular order Parameters: parm1 - (string) playlistId Returns: playListItem Dict """ youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY) res = youtube.playlistItems().list( part="snippet", playlistId=playlistId, maxResults="50" ).execute() nextPageToken = res.get('nextPageToken') while ('nextPageToken' in res): nextPage = youtube.playlistItems().list( part="snippet", playlistId=playlistId, maxResults="50", pageToken=nextPageToken ).execute() res['items'] = res['items'] + nextPage['items'] if 'nextPageToken' not in nextPage: res.pop('nextPageToken', None) else: nextPageToken = nextPage['nextPageToken'] return res if __name__ == '__main__': # comedy central playlist, has 332 video # https://www.youtube.com/watch?v=tJDLdxYKh3k&list=PLD7nPL1U-R5rDpeH95XsK0qwJHLTS3tNT videos = fetch_all_youtube_videos("PLD7nPL1U-R5rDpeH95XsK0qwJHLTS3tNT") 

видео будет списком всех ваших видео, объединенных в первый список. Он будет продолжать получать, пока у него не будет всех видеороликов из-за разбиения на страницы на 50. Аналогичный подход может быть применен и на других языках.

В списке будут все отдельные видео метаданные и заказ

Этот javascript извлекает 115 клипов (из PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv) и 91 клипов (от PL32C69B40337EF920)
ИСПЫТАТЬ ЭТО файл html по адресу:
http://pvhung20.url.ph/api3/retrieve-all-videos-stackoverflow.html

 sum = 0; sumN = 1; var nextPageToken; function getVids(PageToken){ pid = $('#searchtext1').val(); $.get( "https://www.googleapis.com/youtube/v3/playlistItems",{ part : 'snippet', maxResults : 50, playlistId : pid, pageToken : PageToken, key: 'YOUR API3 KEY' }, function(data){ myPlan(data); } ); } function myPlan(data){ total = data.pageInfo.totalResults; nextPageToken=data.nextPageToken; for(i=0;i 
       

IDs for test:
PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv
PL32C69B40337EF920

Другое решение, использующее рекурсию:

 $.fn.loadYoutubeResource = function(resource_request, resource_type, resource_id, resource_container, pageToken = null, callback = null){ $.ajax({ url: "https://www.googleapis.com/youtube/v3/" + resource_request, type: 'get', dataType: 'json', data: { part : 'snippet', [resource_type]: resource_id, maxResults : 50, pageToken: pageToken, key: '< API Key >', }, success: function(data) { console.log("New resource " + resource_type + " loaded:"); console.log(data); for(var index = 0; index < data.items.length; index++){ var url = data.items[index]['snippet'].thumbnails.default.url; var ytb_id = data.items[index]['id']; jQuery('#' + resource_container).append(''); } if ( data.nextPageToken == null) return callback(); $.fn.loadYoutubeResource(resource_request, resource_type, resource_id, resource_container, data.nextPageToken, callback); } }); } 

И затем назовите его следующим образом:

 jQuery('body').append('
'); $.fn.loadYoutubeResource('playlistItems', 'playlistId', 'PLmwK57OwOvYVdedKc_vPPfbcsey_R0K8r', 'ytb_container', null, function(){ });

вот моя рекурсивная функция, может быть, может помочь кому-то:

Во-первых, я создал кнопку для первого вызова:

  

Затем в разделе сценария:

  $(document).ready(function () { function getVideos(t) { var url = "https://www.googleapis.com/youtube/v3/search?part=snippet&key=YourAPIKey&channelId=YourChannelID&maxResults=50"; if (t != undefined) { url = url + "&pageToken=" + t } $.ajax({ type: 'GET', url: url, dataType: 'json', success: function (html) { console.log(html.items); if (html.nextPageToken != undefined) { getVideos(html.nextPageToken); } } }); }; //initial call $("#aux").click(function () { getVideos(); }); }); 

С уважением

Interesting Posts
Давайте будем гением компьютера.