Abrufen aller Videos aus der youtube-Wiedergabeliste mit der youtube v3-API

Im Abruf von Videos einer Playlist mit youtube v3 API und erhalten 50 Elemente ohne Probleme mit diesem Link: –

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

Aber die Videozählung ist 100 und ich bin nur 50. Wie kann ich die nächsten 50 Artikel bekommen? Ich habe Start-Index versucht, aber es funktioniert nicht für v3 API. Jede Hilfe wird geschätzt.

YouTube Data API v3-Ergebnisse werden paginiert. Sie müssen also die nächste Seite der Ergebnisse für die anderen erhalten.

Grundsätzlich in der Antwort hast du nextPageToken .

Um die restlichen Ergebnisse zu erhalten, führen Sie den gleichen Aufruf aus, aber setzen Sie pageToken in das Token, das Sie erhalten haben.

Das sind drei Tokes

  1. pageToken
  2. nextPageToken
  3. prevPageToken

und Sie können auch die maximale Seitengröße mit einstellen

maxResults = 50 {erlaubte Werte 1 bis 50}

Wenn du auf Seite 1 bist, prevPageToken du prevPageToken

aber du bekommst nextPageToken

Übergeben Sie dieses Token an die nächste Anfrage

pageToken = {nextPageToken wird von der letzten Anfrage abgerufen}

Auf diese Weise können Sie zur nächsten Seite navigieren. Versuchen Sie es YourSelf

Bearbeitet

Ok, für andere Szenarien

Wenn Sie auf einer anderen Seite sind, ist nicht die erste oder letzte, dann werden alle diese Werte angezeigt

  1. pageToken = ‘Einige Werte’
  2. nextPageToken = ‘Einige Werte’
  3. prevPageToken = ‘Einige Werte’

@Manoj: Sie können Ihre Antwort unten finden, wenn Sie auf der letzten Seite sind

  1. pageToken = ‘Einige Werte’
  2. nextPageToken = ‘Einige Werte’
  3. prevPageToken = null

Dies ist ein kleines Beispiel, das in Python unter Verwendung der Python Youtube Client Lib erstellt wurde. Dies ist auch ein Grundlagendokument für die Youtube-API-Beispiele

 """ 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") 

Videos werden eine Liste aller Videos sein, die mit der ersten Liste verknüpft sind. Es wird so lange abgerufen, bis alle Videos wegen der Paginierung um 50 sind. Ein ähnlicher Ansatz kann in anderen Sprachen verwendet werden.

In der Liste werden alle individuellen Video-Metadaten und -bestellungen angezeigt

Dieses Javascript ruft 115 Clips (von PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv) und 91 Clips (von PL32C69B40337EF920) ab.
Testen Sie diese HTML-Datei unter:
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

Eine andere Lösung, die Rekursion verwendet:

 $.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); } }); } 

Und dann nenne es wie folgt:

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

hier ist meine rekursive function, vielleicht kann jemand helfen:

Zuerst habe ich eine Schaltfläche für den ersten Aufruf erstellt:

  

Dann im Skriptabschnitt:

  $(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(); }); }); 

Grüße