Извлеките все видео из плейлиста 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

Как вставить изображение в JTable Cell

Установка Windows 7 (с двойной загрузкой) после установки Windows 8

Завершить против Dispose

Что является прецедентом для перегрузки функций-членов в ссылочных квалификаторах?

Может ли Sweave автоматически создавать много PDF-файлов?

X на одном мониторе, голый терминал tty на другом? (Linux)

Официальные причины для «Программного обеспечения прерывания соединения: ошибка записи сокета»

Как сопоставить настраиваемый протокол с приложением на Mac?

Будет ли «пустой» конструктор или деструктор делать то же самое, что и сгенерированный?

Как получить маску подсети локальной системы с помощью java?

Тестовые этикетки для регрессионного кофе, поплавок не допускаются?

Заполните раскрывающийся список при выборе другого выпадающего списка

(413) Запросить сущность слишком большой | UploadReadAheadSize

Почему я не получаю java.util.ConcurrentModificationException в этом примере?

Adblock-подобный плагин для скрытия виджетов, кнопок и т. Д.

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