javascript - 带有 JavaScript 的 Youtube API - 显示播放列表中的所有视频

标签 javascript api youtube

我正在尝试使用以下代码从 Youtube 播放列表中获取所有 137 个视频:

function loadVideos() {

  let pagetoken = '';
  let resultCount = 0;
  const mykey = "***********************************";
  const playListID = "PLzMXToX8Kzqggrhr-v0aWQA2g8pzWLBrR";

  const URL =  `https://www.googleapis.com/youtube/v3/playlistItems?
part=snippet
&maxResults=50
&playlistId=${playListID}
&key=${mykey}`;


  fetch(URL)
    .then(response => {
      return response.json();
    })
    .then(function(response) {

      resultCount = response.pageInfo.totalResults;
      console.log("ResultCount: " + resultCount);

      pagetoken = response.nextPageToken;
      console.log("PageToken: " + pagetoken);

      resultCount = resultCount - 50;
      console.log("ResultCount: " + resultCount);

      while (resultCount > 0) {

        const URL = `https://www.googleapis.com/youtube/v3/playlistItems?
part=snippet
&maxResults=50
&playlistId=${playListID}
&key=${mykey}
&pageToken=${pagetoken}`;

        fetch(URL)
          .then(response => {
            return response.json();
          })
          .then(function(response) {
            pagetoken = response.nextPageToken ? response.nextPageToken : null;
            console.log("PageToken: " + pagetoken);
          });
        resultCount = resultCount - 50;
      }
    })
    .catch(function(error) {
      console.log("Looks like there was a problem: \n", error);
    });
} // End of loadVideos function

// Invoking the loadVideos function
loadVideos();

加载前 50 个视频 第二个 50 个视频也被加载 但是我的脚本没有加载列表中剩余的 37 个视频,而是再次加载了之前的 50 个视频。

pagetoken 似乎没有为第三个请求更新。

我的代码有什么问题?

最佳答案

您不需要使用 50 - maxResults 进行数学运算,只需查找 nextPageToken 并在有新 token 时让代码调用 API。

例如

function getUrl(pagetoken) {
  var pt = (typeof pagetoken === "undefined") ? "" :`&pageToken=${pagetoken}`,
      mykey = "************",
      playListID = "PLzMXToX8Kzqggrhr-v0aWQA2g8pzWLBrR",
      URL = `https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&playlistId=${playListID}&key=${mykey}${pt}`;
  return URL;
}


function apiCall(npt) {
  fetch(getUrl(npt))
  .then(response => {
      return response.json();
  })
  .then(function(response) {
      if(response.error){
        console.log(response.error)
      } else {
        responseHandler(response)
      }

  });
}

function responseHandler(response){
  if(response.nextPageToken)
    apiCall(response.nextPageToken);

  console.log(response)
}
apiCall();

如果您看到 api 进行了 3 次调用,因为在第三次之后没有 nextPageToken

关于javascript - 带有 JavaScript 的 Youtube API - 显示播放列表中的所有视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52990581/

相关文章:

javascript - 循环遍历数组,将数据传递给函数

javascript - Etsy API 列表(按类别)

api - 像 kayak.com 这样的网站如何聚合内容?

iframe - YouTube嵌入速度减慢的页面

javascript - Chrome getComputedStyle() 返回错误的 RGBA 颜色?

javascript - Node.js:http 完成事件、响应关闭事件和响应结束事件之间的区别

javascript - Node.js 模块、函数未正确导出

android - 如何修复我的 android 照片上传以发送更大的数据流

css - 在部门之间移动 YouTube iframe 播放器?

youtube - 更新政策最近的Feed