我想提取最后一个视频(仅限视频),包括标题,说明等。
我正在使用YouTube Data API中的JSON数据API并使用Video Upload By User Feed来获取数据。
我从youtube获得了一个关于我的Youtube空间的JSON(对象?)并尝试阅读JSON文本,但这是一个自杀。
我的代码是:
<div id="ytContent"></div>
<script type="text/javascript">
function showMyVideos(data) {
var feed = data.feed;
var entries = feed.entry || [];
for (var i = 0; i < entries.length; i++) {
var entry = entries[i];
var title = entry.title.$t;
$('#ytContent').append(title + "<br />");
}
}
</script>
<script type="text/javascript" src="http://gdata.youtube.com/feeds/users/MYUSERNAME/uploads?alt=json-in-script&format=5&callback=showMyVideos"></script>
但如果我尝试这样做:
var p = eval("(" + data + ")");
alert(p);
我无法获得正确的解析器。为什么?我该如何解析我的JSON?我只需要了解我可以使用哪个字段来获取Feed中的最后一个视频。此外,有关获取最后一个视频的提示/提示也会有所帮助。
由于
答案 0 :(得分:1)
调用showMyVideos时,data
已经解析。你不需要解析它。
答案 1 :(得分:1)
你没有获得JSON!你得到了JavaScript! 如果使用eval()执行它,数据将自动传递给showMyVideos函数。您不必解析任何内容;)数据已经被解析,它是一个对象,而不是一个字符串。
答案 2 :(得分:1)
您不需要解析数据,它已经被解析。
script
标记内的网址会被渲染为函数调用,并将数据对象作为参数传递:showMyVideos({ /* data object */ });
。
您的问题是,您尝试访问所接收数据中的entry
字段(var entries = feed.entry || []
),但data.feed
中没有此字段:
var data = {
"version": "1.0",
"encoding": "UTF-8",
"feed": {
"xmlns": "http://www.w3.org/2005/Atom",
"xmlns$openSearch": "http://a9.com/-/spec/opensearchrss/1.0/",
"id": {
"$t": "http://gdata.youtube.com/feeds/users/MYUSERNAME/uploads"
},
"updated": {
"$t": "2011-09-06T08:05:27.303Z"
},
"category": [
{
"scheme": "http://schemas.google.com/g/2005#kind",
"term": "http://gdata.youtube.com/schemas/2007#video"
}
],
"title": {
"$t": "Uploads by MYUSERNAME",
"type": "text"
},
"logo": {
"$t": "http://www.youtube.com/img/pic_youtubelogo_123x63.gif"
},
"link": [
{
"rel": "related",
"type": "application/atom+xml",
"href": "http://gdata.youtube.com/feeds/users/myusername"
},
{
"rel": "alternate",
"type": "text/html",
"href": "http://www.youtube.com/profile_videos?user=MYUSERNAME"
},
{
"rel": "http://schemas.google.com/g/2005#feed",
"type": "application/atom+xml",
"href": "http://gdata.youtube.com/feeds/users/MYUSERNAME/uploads"
},
{
"rel": "http://schemas.google.com/g/2005#batch",
"type": "application/atom+xml",
"href": "http://gdata.youtube.com/feeds/users/MYUSERNAME/uploads/batch"
},
{
"rel": "self",
"type": "application/atom+xml",
"href": "http://gdata.youtube.com/feeds/users/MYUSERNAME/uploads?alt=json-in-script&start-index=1&max-results=25&format=5"
}
],
"author": [
{
"name": {
"$t": "MYUSERNAME"
},
"uri": {
"$t": "http://gdata.youtube.com/feeds/users/myusername"
}
}
],
"generator": {
"$t": "YouTube data API",
"version": "2.1",
"uri": "http://gdata.youtube.com/"
},
"openSearch$totalResults": {
"$t": 0
},
"openSearch$startIndex": {
"$t": 1
},
"openSearch$itemsPerPage": {
"$t": 25
}
}
}
答案 3 :(得分:1)
基于这个问题,我假设您想要获取最后一个视频并将其显示为视频播放器。 为了显示最后一个视频,可能的步骤是:
<script type="text/javascript" src="http://swfobject.googlecode.com/svn/trunk/swfobject/swfobject.js"></script>
callback
参数中指定的回调函数。在您的回调中,您需要显示最后一个视频的视频播放器。类似的东西:
// function to load your video
function loadVideo(playerUrl, autoplay) {
swfobject.embedSWF(
playerUrl + '&rel=1&border=0&fs=1&autoplay=' +
(autoplay?1:0), 'player', '290', '250', '9.0.0', false,
false, {allowfullscreen: 'true'});
}
// this is your callback function, Google call this function after parsing the JSON
// and passing it as data
function showMyVideos(data) {
var feed = data.feed;
var entries = feed.entry || [];
if (entries.length > 0) {
// show the video for the last entry
loadVideo(entries[entries.length-1].media$group.media$content[0].url, false);
}
}
接下来,您可以定义要放置视频的位置
<div id="playerContainer" style="width: 20em; height: 180px; float: left;">
<object id="player"></object>
</div>
最后调用将调用您的回调的脚本。这应该与问题中的代码相同
<script type="text/javascript" src="http://gdata.youtube.com/feeds/users/MYUSERNAME/uploads?alt=json-in-script&format=5&callback=showMyVideos"></script>