Как читать JSON, чтобы получить последнее видео с YouTube - PullRequest
1 голос
/ 06 сентября 2011

Я хотел бы извлечь последнее видео (только видео) с заголовком, описанием и т. Д.

Я использую JSON Data API из YouTube Data API и использую Загрузка видео по ленте пользователя для получения данных.

Я получил от youtube JSON (объект?) О пространстве моего Youtube и попытался прочитать текст 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? Мне просто нужно понять, какое поле я могу использовать, чтобы получить последнее видео из канала. Также будут полезны советы / подсказки по получению последнего видео.

Спасибо

Ответы [ 4 ]

1 голос
/ 06 сентября 2011

Исходя из вопроса, я предполагаю, что вы хотите получить последнее видео и показать его как видеоплеер. Чтобы показать последнее видео, возможны следующие шаги:

  • Включите скрипт для самого игрока

<script type="text/javascript" src="http://swfobject.googlecode.com/svn/trunk/swfobject/swfobject.js"></script>
  • Создайте свою функцию обратного вызова. По сути, Google получает JSON, анализирует его и вызывает вашу функцию обратного вызова, указанную в параметре callback в вашем http://gdata.youtube.com/feeds/users/MYUSERNAME/uploads?alt=json-in-script&format=5&callback=showMyVideos. При обратном вызове вы хотели бы показать проигрыватель видео для последнего видео. Что-то вроде:

    // 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>
1 голос
/ 06 сентября 2011

Вы не получаете JSON!Вы получаете JavaScript!Если вы выполняете его с помощью eval (), данные автоматически передаются в функцию showMyVideos.Вам не нужно ничего анализировать;) Данные уже проанализированы, это объект, а не строка.

1 голос
/ 06 сентября 2011

Вам не нужно анализировать данные, они уже проанализированы.

URL внутри ваших тегов 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
        }
    }
}
1 голос
/ 06 сентября 2011

Когда вызывается showMyVideos, data уже проанализировано . Вам не нужно разбирать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...