【问题标题】:Extracting data from a YouTube playlist XML从 YouTube 播放列表 XML 中提取数据
【发布时间】:2013-04-27 04:15:44
【问题描述】:

我是 JavaScript 和 YouTube API 初学者

我正在尝试从 xml 文件中访问一些数据。它是从 YouTube 播放列表生成的 atom 文件。我希望能够提取列表中每个视频的缩略图、videoid 和描述。

这是我拼凑的一些 js:

$.get("playlist.xml", function(xml){
var videos = $.xml2json(xml);
alert(videos.entry[0].title);
console.log(videos);    
});

playlist.xml 包含调用生成的文件:

https://gdata.youtube.com/feeds/api/playlists/playlistid?v=2

其中 playlistid 是有效的播放列表 ID。

该文件包含所有预期的 xml,并使用以下行转换为 json(通过 JQuery XML 到 JSON 插件):

var videos = $.xml2json(xml);

顶部的代码给了我预期的输出,即:播放列表中第一个视频的标题。

当我尝试访问其他数据时,我的问题就出现了。例如,缩略图可以在此处的 xml 中找到:

entry[].media:group.media:thumbnail[]

似乎转换为json后,“:”被转换为“$”,但是当我尝试任一时出现错误错误:

    $.get("playlist.xml", function(xml){
var videos = $.xml2json(xml);
alert(videos.entry[0].media:group.media:thumbnail[0]);
console.log(videos);    
});

或:

    $.get("playlist.xml", function(xml){
var videos = $.xml2json(xml);
alert(videos.entry[0].media$group.media$thumbnail[0]);
console.log(videos);    
});

错误是:

TypeError: videos.entry[0].media$group is undefined

我觉得我不了解一些非常基本的东西,但对于我的生活,我不知道它是什么。

这是一个示例播放列表 xml 文件,如果有帮助的话: https://gdata.youtube.com/feeds/api/playlists/PLjyIfAzy9xVUWYcLK54OPd1lDXzMROK_5?v=2

【问题讨论】:

    标签: javascript jquery xml json youtube


    【解决方案1】:

    为什么不首先以 JSON 格式获取提要(URL 末尾的 &alt=json)?

    https://gdata.youtube.com/feeds/api/playlists/PLjyIfAzy9xVUWYcLK54OPd1lDXzMROK_5?v=2&alt=json
    

    您也可以添加callback 参数并将该 JSON 请求转换为 JSONP,这样您就可以使用纯客户端 JavaScript 发送它。

    【讨论】:

      【解决方案2】:

      在底部查看编辑

      好的,所以我添加了 &alt=json,但是您在将 JSON 转换为 JSONP 的回调中迷失了我。这是我当前的代码:

      var ytPlaylist="PLjyIfAzy9xVUWYcLK54OPd1lDXzMROK_5";    
      var jsonFileUrl="https://gdata.youtube.com/feeds/api/playlists/"+ytPlaylist+"?v=2&alt=json";
      
      
      $.get(jsonFileUrl, function(data) {
      alert("Data: " + data.logo);
      
      });
      

      警告框只显示“数据:未定义”

      现在,如果我这样做了

      $.get(jsonFileUrl, function(data) {
      alert("Data: " + data); 
      });
      

      我在警告框中显示了整个文件,所以数据在那里,我只是无法访问它。我也尝试过使用以下方式访问它:

      data.feed.logo
      data[0].feed[0].logo
      data[0].logo 
      data.logo.$t
      

      编辑:尚不知道为什么,但这(下)正在工作

      $.getJSON(jsonFileUrl, function(response) {
      alert("Data: " + response.feed.entry[0].media$group.media$description.$t);
      });
      

      【讨论】:

      • 不知道为什么,但这是有效的: $.getJSON(jsonFileUrl, function(response) { alert("Data: " + response.feed.entry[0].media$group.media$描述.$t); });
      • 我没有深入了解 JSON,特别是我忘记了 $t。此外,出于某种原因,我在前几次尝试它时,它似乎不喜欢我使用那些 $'s。现在,一切都很好,它可以按我的意愿工作。
      猜你喜欢
      • 1970-01-01
      • 2016-12-07
      • 2015-11-28
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 2017-08-19
      相关资源
      最近更新 更多