Grazie ai riferimenti condivisi qui e altrove, ho realizzato uno script / strumento online che è possibile utilizzare per ottenere tutti i video di un canale.
Esso combina chiamate API a youtube.channels.list
, playlistItems
, videos
. Utilizza funzioni ricorsive per fare in modo che i callback asincroni eseguano la successiva iterazione dopo aver ottenuto una risposta valida.
Ciò serve anche a limitare il numero effettivo di richieste fatte contemporaneamente, proteggendoti quindi dalla violazione delle regole dell'API di YouTube. Condivisione di snippet abbreviati e quindi un collegamento al codice completo. Ho ottenuto circa il limite massimo di 50 risultati per chiamata utilizzando il valore nextPageToken fornito nella risposta per recuperare i successivi 50 risultati e così via.
function getVideos(nextPageToken, vidsDone, params) {
$.getJSON("https://www.googleapis.com/youtube/v3/playlistItems", {
key: params.accessKey,
part: "snippet",
maxResults: 50,
playlistId: params.playlistId,
fields: "items(snippet(publishedAt, resourceId/videoId, title)), nextPageToken",
pageToken: ( nextPageToken || '')
},
function(data) {
// commands to process JSON variable, extract the 50 videos info
if ( vidsDone < params.vidslimit) {
// Recursive: the function is calling itself if
// all videos haven't been loaded yet
getVideos( data.nextPageToken, vidsDone, params);
}
else {
// Closing actions to do once we have listed the videos needed.
}
});
}
Questo ha un elenco di base dei video, tra cui ID, titolo, data di pubblicazione e simili. Ma per ottenere maggiori dettagli di ogni video come conteggi e Mi piace delle visualizzazioni, è necessario effettuare chiamate API videos
.
// Looping through an array of video id's
function fetchViddetails(i) {
$.getJSON("https://www.googleapis.com/youtube/v3/videos", {
key: document.getElementById("accesskey").value,
part: "snippet,statistics",
id: vidsList[i]
}, function(data) {
// Commands to process JSON variable, extract the video
// information and push it to a global array
if (i < vidsList.length - 1) {
fetchViddetails(i+1) // Recursive: calls itself if the
// list isn't over.
}
});
Vedi il codice completo qui e la versione live qui . (Modifica: collegamento github fisso)
Modifica: dipendenze: JQuery, Papa.parse