由于这里和其他地方共享了这些参考资料,我制作了一个在线脚本/工具,可以用来获取频道的所有视频。
它结合了API调用youtube.channels.list
,playlistItems
,videos
。它使用递归函数使异步回调在获得有效响应后运行下一次迭代。
这还可以限制一次发出的实际请求数,从而使您避免违反YouTube API规则。共享缩短的片段,然后共享完整代码。通过使用响应中提供的nextPageToken值来获取下一个50个结果,每次调用限制可以得到50个最大结果。
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.
}
});
}
这样就获得了视频的基本列表,包括ID,标题,发布日期等。但是要获得每个视频的更多细节(例如观看次数和喜欢),必须对进行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.
}
});
查看完整的代码在这里,并在这里现场版。(编辑:固定github链接)
编辑:依赖关系:jQuery,Papa.parse