Nhờ các tài liệu tham khảo được chia sẻ ở đây và các nơi khác, tôi đã tạo một tập lệnh / công cụ trực tuyến mà người ta có thể sử dụng để có được tất cả các video của một kênh.
Nó kết hợp các cuộc gọi API để youtube.channels.list
, playlistItems
, videos
. Nó sử dụng các hàm đệ quy để làm cho các cuộc gọi lại không đồng bộ chạy lần lặp tiếp theo khi nhận được phản hồi hợp lệ.
Điều này cũng phục vụ để hạn chế số lượng yêu cầu thực tế được thực hiện tại một thời điểm, do đó giữ cho bạn an toàn khỏi vi phạm các quy tắc API của YouTube. Chia sẻ đoạn trích ngắn và sau đó một liên kết đến mã đầy đủ. Tôi đã nhận được khoảng 50 kết quả tối đa cho mỗi giới hạn cuộc gọi bằng cách sử dụng giá trị nextPageToken đi kèm trong phản hồi để lấy 50 kết quả tiếp theo, v.v.
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.
}
});
}
Điều này có một danh sách cơ bản của các video, bao gồm id, tiêu đề, ngày xuất bản và tương tự. Nhưng để có thêm thông tin chi tiết về từng video như số lượt xem và lượt thích, người ta phải thực hiện các lệnh gọi 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.
}
});
Xem mã đầy đủ ở đây , và phiên bản trực tiếp ở đây . (Chỉnh sửa: liên kết github cố định)
Chỉnh sửa: Phụ thuộc: JQuery, Papa.parse