Gracias a las referencias compartidas aquí y en otros lugares, he creado un script / herramienta en línea que se puede utilizar para obtener todos los videos de un canal.
Combina llamadas a la API a youtube.channels.list
, playlistItems
,videos
. Utiliza funciones recursivas para hacer que las devoluciones de llamada asíncronas ejecuten la siguiente iteración al obtener una respuesta válida.
Esto también sirve para limitar el número real de solicitudes realizadas a la vez, por lo que te mantiene a salvo de violar las reglas de la API de YouTube. Compartir fragmentos acortados y luego un enlace al código completo. Obtuve alrededor de la limitación máxima de 50 resultados por llamada usando el valor nextPageToken que viene en la respuesta para obtener los siguientes 50 resultados, y así sucesivamente.
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.
}
});
}
Esto obtuvo una lista básica de los videos, incluyendo identificación, título, fecha de publicación y similares. Pero para obtener más detalles de cada video, como recuentos de visitas y me gusta, uno tiene que hacer llamadas a la 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.
}
});
Vea el código completo aquí y la versión en vivo aquí . (Editar: enlace fijo de github)
Editar: Dependencias: JQuery, Papa.parse