YouTube ビデオから情報を返す JavaScript 関数を書きたいと思います。具体的には、検索で取得した動画の ID と長さを json オブジェクトで取得したいと考えています。だから私はYouTube APIを見て、この解決策を思いついた:
function getYoutubeDurationMap( query ){
var youtubeSearchReq = "https://gdata.youtube.com/feeds/api/videos?q="+ query +
"&max-results=20&duration=long&category=film&alt=json&v=2";
var youtubeMap = [];
$.getJSON(youtubeSearchReq, function(youtubeResult){
var youtubeVideoDetailReq = "https://gdata.youtube.com/feeds/api/videos/";
for(var i =0;i<youtubeResult.feed.entry.length;i++){
var youtubeVideoId = youtubeResult.feed.entry[i].id.$t.substring(27);
$.getJSON(youtubeVideoDetailReq + youtubeVideoId + "?alt=json&v=2",function(videoDetails){
youtubeMap.push({id: videoDetails.entry.id.$t.substring(27),runtime: videoDetails.entry.media$group.media$content[0].duration});
});
}
});
return youtubeMap;
}
ロジックは問題ありませんが、多くの人が既に理解しているように、この関数を呼び出すと ajax が原因で空の配列が取得されます。とにかく完全なオブジェクトを取得する方法はありますか? Deferred オブジェクトを使用する必要がありますか? 回答ありがとうございます。