Graças às referências compartilhadas aqui e em outros lugares, criei um script / ferramenta on-line que pode ser usado para obter todos os vídeos de um canal.
Ele combina chamadas de API para youtube.channels.list
, playlistItems
,videos
. Ele usa funções recursivas para fazer com que os retornos de chamada assíncronos executem a próxima iteração ao obter uma resposta válida.
Isso também serve para limitar o número real de solicitações feitas por vez, mantendo-o protegido contra violações das regras da API do YouTube. Compartilhando trechos reduzidos e, em seguida, um link para o código completo. Consegui contornar os 50 resultados máximos por limitação de chamada usando o valor nextPageToken que vem na resposta para buscar os próximos 50 resultados e assim por diante.
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.
}
});
}
Isso obteve uma lista básica dos vídeos, incluindo ID, título, data de publicação e similares. Mas, para obter mais detalhes de cada vídeo, como contagens e curtidas, é necessário fazer chamadas de 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.
}
});
Veja o código completo aqui e a versão ao vivo aqui . (Editar: link fixo do github)
Editar: Dependências: JQuery, Papa.parse