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

Posted

技术标签:

【中文标题】如何使用 javascript API 和 json 获取 youtube 播放列表【英文标题】:How to get a youtube playlist using javascript API and json 【发布时间】:2011-09-27 11:13:14 【问题描述】:

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

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

当我在单行中执行此操作时,不是在 cikle evrithing 中,而是在 cikle for or while I have error.

//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  <li>

    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;
        $('<li><img src="'+thumb+'"  class="thumb"/></li>').appendTo('.cont');
    

【问题讨论】:

我真的不知道你在说什么。您应该尝试清理您的帖子。 确实,请重新格式化您的代码并仔细检查应该格式化为代码的内容/应该在哪里换行。 @plamen -- 你是如何为 OPERA 解决这个问题的? @Lacy 查看我的演示链接deathdreamer.atwebpages.com/proba19.php 所有的 javascript 代码都在这个页面中。打开 whit firebug 看看你需要什么 :) uts 非常旧且混乱的代码,但很适合开始 :)跨度> 【参考方案1】:

恕我直言,如果您使用$.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 += '<li><a href="'+ url +'" title="'+ feedTitle +'"><img  src="'+ thumb +'"</a></li>';

    );
    $(list_data).appendTo(".cont");
);

演示:Fiddle for the playlist you have provided

P.S:请记住,可以在以下位置找到 youtube 视频的缩略图

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

(More Info here)

【讨论】:

Tnx :) 我尝试 1 周来修复这条线 :) 你帮了我很大的忙 :) tnx ...我第一次在这里写,我不知道 :) tnx 很多 :) 我有一点问题...这个功能在 Internet Explorer 和 Opera 中不起作用... onli MOZILLA .... 你能帮帮我吗? 我会检查并告诉你:) 如果你不想,你不需要使用那些字符串操作的东西。我在下面添加了一个简化的解决方案。另外,想对以前的评论说。这个问题非常清楚,并且回过头来解决他们的问题是非常没有效率的。他们提供了代码和明确的标题。【参考方案2】:

我发现这些行:

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[fragments.length - 2] 最终将成为“www.youtube.com”而不是视频 ID。

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

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

所以最终的代码 sn-p 是这样的:

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

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

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

问候 CK

【讨论】:

【参考方案3】:

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

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 );
);

【讨论】:

嗨!我正在尝试让这个示例与您的代码一起使用。我应该把它放在哪里?我有应用程序、控制器和服务 js 文件。谢谢

以上是关于如何使用 javascript API 和 json 获取 youtube 播放列表的主要内容,如果未能解决你的问题,请参考以下文章

javascript的JSON对象

Deribit交易所 websocket API 连接范例

如何在 JAVA 中将 JSON 和文件传递给 REST API?

如何将 JSON 传递给 REST API (IBKR)

XML和JSO的面试题(修订版)

我们如何对 JavaScript 文件进行版本控制