Grâce aux références partagées ici et ailleurs, j'ai réalisé un script / outil en ligne que l'on peut utiliser pour obtenir toutes les vidéos d'une chaîne.
Il combine les appels API à youtube.channels.list
, playlistItems
, videos
. Il utilise des fonctions récursives pour que les rappels asynchrones exécutent la prochaine itération lors de l'obtention d'une réponse valide.
Cela permet également de limiter le nombre réel de demandes effectuées à la fois, vous évitant ainsi de violer les règles de l'API YouTube. Partager des extraits abrégés, puis un lien vers le code complet. J'ai réussi à contourner les 50 résultats maximum par appel en utilisant la valeur nextPageToken qui vient dans la réponse pour récupérer les 50 résultats suivants et ainsi de suite.
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.
}
});
}
Cela a obtenu une liste de base des vidéos, y compris l'identifiant, le titre, la date de publication et similaires. Mais pour obtenir plus de détails sur chaque vidéo, comme le nombre de vues et les likes, il faut passer des appels à l'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.
}
});
Voir le code complet ici et la version live ici . (Edit: lien github fixe)
Edit: Dépendances: JQuery, Papa.parse