使用jquery从Youtube feed xml发出抓取视频ID

时间:2013-05-25 03:58:15

标签: javascript jquery xml youtube

好的,根据我的理解,我在这里要完成的是超级简单,基本上我已经使用youtube API从url字符串中构建了搜索结果。如果你浏览到网址,你可以看到返回的xml,一切都很好。网址:

https://gdata.youtube.com/feeds/api/videos?q=all the small things&max-results=1&v=2&format=5&orderby=relevance&safeSearch=none

我已经编写了一些jquery,它应该填充我的div,称为议程(<div id = "agenda">),它存在于html中,其中包含<yt:videoid> xml元素中的数据。只是为了用视频ID填充div,基本上。这是我的jQuery:

$(document).ready(function(){
    $.get("https://gdata.youtube.com/feeds/api/videos?q=all the small thing&max-results=1&v=2&format=5&orderby=relevance&safeSearch=none",{},function(xml){
        $('entry',xml).each(function(i){
            var vidID = $(this).find("yt:videoid").text();
        });//end find entry

        alert(vidID);
        $('#agenda').html(vidID);
    });//end ajax   
});//end .ready

然而实际上没有任何事情发生,警报不会发生,事实上它会抛出vidID未定义的错误,从我所知道的一切都按照应该的方式设置,我会发布链接,如果有人真的需要看到它的直播,但目前它是在我的覆盆子pi服务器,所以我不担心发布我的IP,但我是绝望的:p。如果有人能发现我做错了什么,我已经在这里待了好几个小时,这让我疯了。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我不确定数据的格式究竟是什么,但问题是你的vId范围只在$ .each函数中。因此,您需要将其移出每个块以便能够访问其值。接下来的事情是,如果节点条目只有1,你就可以摆脱每一个。

尝试

$(document).ready(function(){
    $.get("https://gdata.youtube.com/feeds/api/videos?q=all the small thing&max-results=1&v=2&format=5&orderby=relevance&safeSearch=none",{},function(xml){
        var vidID;       
        $('entry',xml).each(function(i){
           vidID  = $(this).find('id').text();
        });//end find entry
      alert(vidID);
        $('#agenda').html(vidID);
    });//end ajax   
});//end .ready

$(document).ready(function () {
    $.get("https://gdata.youtube.com/feeds/api/videos?q=all the small thing&max-results=1&v=2&format=5&orderby=relevance&safeSearch=none", {}, function (xml) {
        var vidID = $('entry', xml).find('id').text();
        alert(vidID);
        $('#agenda').html(vidID);
    }); //end ajax   
}); //end .ready

Fiddle

使用JSON-C格式管数据易于操作 示例: - 在您的网址中只需添加alt=jsonc

https://gdata.youtube.com/feeds/api/videos?q=all%20the%20small%20thing&max-results=1&v=2&format=5&orderby=relevance&safeSearch=none&alt=jsonc

并在需要时循环浏览json: - 在这个示例中只有一个,所以我只使用json.data.item [0]。理想情况下,您将循环使用项目。

$(document).ready(function () {
    $.get("http://gdata.youtube.com/feeds/api/videos?q=all%20the%20small%20thing&max-results=1&v=2&format=5&orderby=relevance&safeSearch=none&alt=jsonc", {}, function (json) {
      var vidID = json.data.items[0].id;
        alert(vidID);
        $('#agenda').html(vidID);
    }); //end ajax   
}); //end .ready

Fiddle