Recupera tutti i video dalla playlist di YouTube utilizzando l’API di YouTube v3

Sto recuperando i video di una playlist usando l’API di youtube v3 e ricevendo 50 articoli senza alcun problema con questo link: –

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

Ma il conteggio dei video è 100 e im solo 50. Come posso ottenere i prossimi 50 articoli? Ho provato start-index, ma non funziona per API v3. Qualsiasi aiuto è apprezzato.

I risultati di YouTube Data API v3 sono impaginati. Quindi è necessario ottenere la prossima pagina di risultati per gli altri.

Fondamentalmente nella risposta hai nextPageToken .

Per ottenere i risultati rimanenti, fare la stessa chiamata esatta ma impostare pageToken in quel token che hai ricevuto.

Ci sono tre monete

  1. pageToken
  2. nextPageToken
  3. prevPageToken

e inoltre puoi impostare la dimensione massima della pagina usando

maxResults = 50 {valori consentiti da 1 a 50}

se si è nella pagina 1 non si otterrà prevPageToken

ma ottieni nextPageToken

passa questo token alla prossima richiesta

pageToken = {nextPageToken get from last request}

in questo modo puoi navigare alla pagina successiva Provalo

Modificato

Ok, per altri scenari

Se ci si trova in una qualsiasi altra pagina non ci sono fuochi o, infine, ci saranno tutti questi valori

  1. pageToken = ‘Alcuni valori’
  2. nextPageToken = ‘Alcuni valori’
  3. prevPageToken = ‘Alcuni valori’

@Manoj: puoi trovare la tua risposta qui sotto se ti trovi nell’ultima pagina

  1. pageToken = ‘Alcuni valori’
  2. nextPageToken = ‘Alcuni valori’
  3. prevPageToken = null

Questo è un piccolo esempio fatto in python usando il client Youtube Python Lib Questo prende anche il nome di boilerplate dagli esempi dell’API di 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") 

i video saranno un elenco di tutti i tuoi video concatenati al primo elenco. Continuerà a essere recuperato finché non avrà tutti i video a causa dell’impaginazione di 50. Un approccio simile può essere preso in altre lingue.

Nella lista ci saranno tutti i metadati dei singoli video e l’ordine

Questo javascript recupera 115 clip (da PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv) e 91 clip (da PL32C69B40337EF920)
TEST QUESTO file html a:
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

Un’altra soluzione, utilizzando la ricorsione:

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

E quindi chiamalo come segue:

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

ecco la mia funzione ricorsiva, forse può aiutare qualcuno:

Innanzitutto ho creato un pulsante per la prima chiamata:

  

Quindi nella sezione 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(); }); }); 

Saluti