2017-05-06 2 views
0

일부 재생 목록에서 일부 YouTube 동영상 ID를 가져 오려고합니다. 루프가 시작되지만 결국에는 제목 줄에 오류가 표시됩니다 (이 줄에는 var videoID = jsonVideoListResult.items [j] .contentDetails.videoId;).TypeError : 정의되지 않은 "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 배열에 의해 반환 된 항목 배열 (특정 재생 목록의 동영상 목록 포함)에 대한 재생 목록 배열의 두 번째 항목입니다. 그래서

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

아! 이것은합니다. 고맙습니다. –

관련 문제