如何阅读JSON以获取YouTube上的最后一个视频

时间:2011-09-06 08:03:50

标签: javascript json youtube

我想提取最后一个视频(仅限视频),包括标题,说明等。

我正在使用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中的最后一个视频。此外,有关获取最后一个视频的提示/提示也会有所帮助。

由于

4 个答案:

答案 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>
 

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