use*_*537 1 javascript youtube api
我正在尝试使用以下代码从 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();
Run Code Online (Sandbox Code Playgroud)
前 50 个视频被加载后 50 个视频也被加载但是我的脚本没有加载列表中剩余的 37 个视频,而是再次加载前 50 个视频。
似乎第三个请求没有更新页面令牌。
我的代码有什么问题?
小智 6
您不需要使用 进行数学运算50 - maxResults,只需查找nextPageToken并让代码在有新令牌时调用 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();Run Code Online (Sandbox Code Playgroud)
如果您看到 api 进行了 3 次调用,因为在第三次调用之后没有 nextPageToken
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1302 次  |  
        
|   最近记录:  |