2017-05-06 174 views
0

我试图从某些播放列表中获取一些YouTube视频ID。循环开始,但最终我看到主题行中的错误(在这一行:var videoID = jsonVideoListResult.items [j] .contentDetails.videoId;)。TypeError:无法从undefined读取属性“contentDetails”

记录仪结果也在下面。我是GAS新手,非常感谢您的帮助!

[17-05-05 20:39:33:921 EDT] VideoListResult: [object Object] 
[17-05-05 20:39:33:922 EDT] VideoID: _R-mvxYzOo8 
[17-05-05 20:39:33:982 EDT] VideoListResult: [object Object] 
[17-05-05 20:39:33:983 EDT] VideoID: -oqQxOv9HHM 
[17-05-05 20:39:34:037 EDT] VideoListResult: [object Object] 
[17-05-05 20:39:34:037 EDT] VideoID: WV_I9rvrzsY 
[17-05-05 20:39:34:077 EDT] VideoListResult: [object Object] 


//get each playlist in the array and get its video ids 
    var videoIdArray = []; 
    for (var j=0; j<playlists.length; j++) { 

    var videoURLprefix = 'https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults=50&playlistId='; 
    var videoURLsuffix = '&fields=items%2FcontentDetails%2FvideoId&key='; 
    var playListID = String; 
     playListID = playlists[j]; 
     //Logger.log(playListID); 

    var getVideo = UrlFetchApp.fetch(videoURLprefix + playListID + videoURLsuffix + apiKey); 

    var jsonVideoListResult = []; 
     jsonVideoListResult = JSON.parse(getVideo); 
    Logger.log("VideoListResult: " + jsonVideoListResult); 
    var videoID = jsonVideoListResult.items[j].contentDetails.videoId; 
    Logger.log("VideoID: " + videoID); 
    videoIdArray.push(videoID); 

    } 

回答

2

api调用返回的项目长度与播放列表长度不同。因此这段代码需要有两个循环。一个用于您的播放列表数组第二个用于api调用返回的items数组(其中包含该特定播放列表中的视频列表)。

像这样

var videoIdArray = []; 
    for (var j=0; j<playlists.length; j++) { //First Loop to go through each playlist 

    var videoURLprefix = 'https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults=50&playlistId='; 
    var videoURLsuffix = '&fields=items%2FcontentDetails%2FvideoId&key='; 
    var playListID = String; 
     playListID = playlists[j]; 
     //Logger.log(playListID); 

    var getVideo = UrlFetchApp.fetch(videoURLprefix + playListID + videoURLsuffix + apiKey); 

    var jsonVideoListResult = []; 
     jsonVideoListResult = JSON.parse(getVideo); 
    Logger.log("VideoListResult: " + jsonVideoListResult); 
    for (var i = 0 ; i< jsonVideoListResult.items.length ; i++) { // Second loop to ireate through the each video in the playlist as returned by the api. 
    var videoID = jsonVideoListResult.items[i].contentDetails.videoId; 
    Logger.log("VideoID: " + videoID); 
    videoIdArray.push(videoID); 
} 

} 

希望帮助!

+0

啊!这样做。多谢! –

相关问题