Youtube API - Как ограничить результаты для нумерации страниц? - PullRequest
6 голосов
/ 15 марта 2010

Я хочу получить загрузки пользователя (например, BBC) и ограничить вывод до 10 на страницу.

Хотя я могу использовать следующий URL: http://gdata.youtube.com/feeds/api/users/bbc/uploads/?start-index=1&max-results=10

Все вышеперечисленное работает нормально.

Я хочу использовать вместо этого метод запроса:

Документы Zend Framework: http://framework.zend.com/manual/en/zend.gdata.youtube.html

Укажите, что я могу получить видео, загруженные пользователем, но в идеале я хочу использовать метод запроса, чтобы ограничить результаты для нумерации страниц.

Метод запроса находится в документации Zend Framework (на той же странице, что и раньше, под заголовком «Поиск видео по метаданным») и похож на этот:


$yt = new Zend_Gdata_YouTube();
$query = $yt->newVideoQuery();
$query->setTime('today');
$query->setMaxResults(10);
$videoFeed = $yt->getUserUploads( NULL, $query );

print <code>'<ol>'; foreach($videoFeed as $video): print '<li>' . $video->title . '</li>'; endforeach; print '</ol>';

Проблема в том, что я не могу сделать $ query-> setUser ('bbc').

Я пробовал setAuthor, но это возвращает совершенно другой результат.

В идеале я хочу использовать метод запроса, чтобы получить результаты в разбивке по страницам.

Как мне использовать метод $ query, чтобы установить мои ограничения на нумерацию страниц?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 16 марта 2010

Я решил просто использовать ленту пользовательских загрузок, чтобы заставить страницы работать. http://gdata.youtube.com/feeds/api/users/bbc/uploads/?start-index=1&max-results=10

Если есть способ использовать метод запроса / поиска для выполнения аналогичной работы, было бы интересно изучить.

3 голосов
/ 17 мая 2010

Я в основном решил это так же, как worchyld с небольшим поворотом:

    $username = 'ignite';
    $limit = 30;  // Youtube will throw an exception if > 50
    $offset = 1;  // First video is 1 (silly non-programmers!)
    $videoFeed = null;
    $uploadCount = 0;
    try {
        $yt = new Zend_Gdata_YouTube();
        $yt->setMajorProtocolVersion(2);
        $userProfile = $yt->getUserProfile($username);
        $uploadCount = $userProfile->getFeedLink('http://gdata.youtube.com/schemas/2007#user.uploads')->countHint;

        // The following code is a dirty hack to get pagination with the YouTube API without always starting from the first result
        // The following code snippet was copied from Zend_Gdata_YouTube->getUserUploads();
        $url = Zend_Gdata_YouTube::USER_URI .'/'. $username .'/'. Zend_Gdata_YouTube::UPLOADS_URI_SUFFIX;
        $location = new Zend_Gdata_YouTube_VideoQuery($url);
        $location->setStartIndex($offset);
        $location->setMaxResults($limit);
        $videoFeed = $yt->getVideoFeed($location);
    } catch (Exception $e) {
        // Exception handling goes here!
        return;
    }

Zend YouTube API выглядит глупо, так как включенный метод getUserUploads никогда не возвращает экземпляр VideoQuery до того, как он фактически извлекает фид, и хотя вы можете передать объект местоположения в качестве второго параметра, это ситуация «или-или» - это Я буду использовать только параметр username для создания базового URI или использовать только местоположение, где вы должны создать все это самостоятельно (как указано выше).

...