0

我是 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

4

2 回答 2

0

见底部编辑

好的,所以我添加了 &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);
});
于 2013-04-27T14:16:14.737 回答
0

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

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

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

于 2013-04-27T04:18:29.883 回答