如何使用javascript API和json获取youtube播放列表

这是我的youtube项目的一部分。 我尝试从JSON格式中提取video信息,但我在这一行有问题:

var videoId = data.feed.entry[i].link[1].href; 

当我在单行中这样做而不是在cikle evrithing是好的但是在cikle for或者我有错误。

 //get youtube ID function extract(url){ pos1=url.indexOf("videos/"); pos2=url.substr(42,11); return pos2; } //My playlist LINK var url2="http://gdata.youtube.com/feeds/api/playlists/B2A4E1367126848D?v=2&alt=json"; function playlistinfo(url1) { $.ajax({ url: url1, dataType: "jsonp", success: function (data) { parseresults(data); } }); } //whit this get playlist data function parseresults(data) { //return playlist clip number var klipove= data.feed.openSearch$totalResults.$t; //put clips in 
  • for(i=0;i<=klipove-1;i++) { var videoId = data.feed.entry[i].link[1].href; //get video id ID var id= extract(videoId); thumb = data.feed.entry[i].media$group.media$thumbnail[0].url; $('
  • '+id+'
  • ').appendTo('.cont'); } }

    恕我直言,如果你使用$.getJSON$.each ,你的代码可以大大缩短
    试试这个。

     var playListURL = 'http://gdata.youtube.com/feeds/api/playlists/B2A4E1367126848D?v=2&alt=json&callback=?'; var videoURL= 'http://www.youtube.com/watch?v='; $.getJSON(playListURL, function(data) { var list_data=""; $.each(data.feed.entry, function(i, item) { var feedTitle = item.title.$t; var feedURL = item.link[1].href; var fragments = feedURL.split("/"); var videoID = fragments[fragments.length - 2]; var url = videoURL + videoID; var thumb = "http://img.youtube.com/vi/"+ videoID +"/default.jpg"; if (videoID !='videos') { list_data += '
  • '+ feedTitle+'
  • '; } }); $(list_data).appendTo(".cont"); });

    演示: 提供您提供的播放列表的小提琴

    PS:请记住,可以在以下位置找到YouTubevideo的缩略图

     http://img.youtube.com/vi/{video-id}/default.jpg 

    ( 更多信息在这里 )

    我发现这些线条:

     var feedURL = item.link[1].href; var fragments = feedURL.split("/"); var videoID = fragments[fragments.length - 2]; 

    期待item.link [1] .href采用以下格式:

     http://gdata.youtube.com/feeds/api/videos/NAs5it-xjnQ/responses?v=2 

    但是,它不一定有效,因为item.link [1]给出了一个类似的URL

     http://www.youtube.com/watch?v=Vcp7xz6dfWE&feature=youtube_gdata 

    片段[fragments.length – 2]将最终成为“www.youtube.com”而不是videoID。

    我修改它以从item.content.src中检索链接,该链接在URL中始终具有固定格式,例如

     http://www.youtube.com/v/NAs5it-xjnQ?version=3&f=playlists&app=youtube_gdata 

    所以最终的代码片段是这样的:

     var tmp = item.content.src.split("/").reverse()[0]; var videoID = tmp.substring(0, tmp.indexOf("?")); 

    到目前为止还没有让我失望。

    希望这可以帮助那些卡住或在检索videoID时遇到问题的人。

    问候
    CK

    简化了解决方案并摆脱了字符串操作的东西。

     var playListURL = 'http://gdata.youtube.com/feeds/api/playlists/B2A4E1367126848D?v=2&alt=json&callback=?'; var videoURL= 'http://www.youtube.com/watch?v='; var vids = new Array(); $.getJSON(playListURL, function(data) { $.each(data.feed.entry, function(i, item) { vids.push( item["media$group"]["yt$videoid"]["$t"] ); }); console.log( vids ); });