Récupérer toutes les vidéos de la playlist YouTube en utilisant l’API youtube v3

Je récupère des vidéos d’une playlist en utilisant l’API youtube v3 et obtient 50 éléments sans aucun problème avec ce lien: –

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

Mais le nombre de vidéos est de 100 et je ne reçois que 50. Comment puis-je obtenir les 50 articles suivants? J’ai essayé start-index mais cela ne fonctionne pas pour l’API v3. Toute aide est appréciée.

Les résultats de YouTube Data API v3 sont paginés. Vous devez donc obtenir la page suivante des résultats pour les autres.

Fondamentalement, dans la réponse, vous avez nextPageToken .

Pour obtenir les résultats restants, effectuez le même appel, mais en définissant la page sur le jeton que vous avez reçu.

Il y a trois tokes

  1. pageToken
  2. nextPageToken
  3. prevPageToken

et aussi vous pouvez définir la taille maximale de la page en utilisant

maxResults = 50 {Valeurs autorisées 1 à 50}

si vous êtes à la page 1, vous n’obtiendrez pas de prevPageToken

mais vous obtenez nextPageToken

passer ce jeton à la prochaine demande

pageToken = {nextPageToken obtenir de la dernière demande}

De cette façon, vous pouvez accéder à la page suivante Essayez-le vous-même

Édité

Ok, pour d’autres scénarios

Si vous êtes dans une autre page non est sapon ou dernier alors il y aura toutes ces valeurs

  1. pageToken = ‘Quelques valeurs’
  2. nextPageToken = ‘Quelques valeurs’
  3. prevPageToken = ‘Quelques valeurs’

@Manoj: vous pouvez trouver votre réponse ci-dessous si vous êtes dans la dernière page

  1. pageToken = ‘Quelques valeurs’
  2. nextPageToken = ‘Quelques valeurs’
  3. prevPageToken = null

Ceci est un petit exemple réalisé en python à l’aide du client Python Youtube Lib Cela emprunte également une configuration standard à partir des exemples d’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 - (ssortingng) 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") 

les vidéos seront une liste de toutes vos vidéos concaténées à la première liste. Il continuera à chercher jusqu’à ce qu’il ait toutes les vidéos en raison de la pagination de 50. Une approche similaire peut être adoptée dans d’autres langues.

Dans la liste, il y aura toutes les méta-données vidéo et l’ordre

Ce javascript récupère 115 clips (à partir de PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv) et 91 clips (à partir de PL32C69B40337EF920)
TESTEZ CE fichier HTML à:
http://pvhung20.url.ph/api3/resortingeve-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

Une autre solution, utilisant la récursivité:

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

Et puis appelez comme suit:

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

voici ma fonction récursive, peut-être peut aider quelqu’un:

Tout d’abord, j’ai créé un bouton pour le premier appel:

  

Puis dans la section script:

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

Cordialement