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 des appels d'API à youtube.channels.list
, playlistItems
, videos
. Il utilise des fonctions récursives pour que les rappels asynchrones soient exécutés à l'itération suivante dès qu'une réponse valide est obtenue.
Cela permet également de limiter le nombre de requêtes effectuées à la fois, ce qui vous évite d'enfreindre les règles de l'API YouTube. Partager des extraits abrégés puis un lien vers le code complet. J'ai contourné la limite de 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 permet d'obtenir une liste de base des vidéos, comprenant l'identifiant, le titre, la date de publication et d'autres informations similaires. Mais pour obtenir plus de détails sur chaque vidéo, comme le nombre de vues et d'appréciations, il faut faire des appels d'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 version live ici . (Edit : correction du lien github)
Edit : Dependencies : JQuery, Papa.parse