Youtube API - Как ограничить результаты для разбивки на страницы?
-
20-09-2019 - |
Вопрос
Я хочу перехватывать загрузки пользователя (т. Е.:Би-би-си) и ограничьте вывод до 10 на страницу.
Пока я могу использовать следующий URL:http://gdata .youtube.com/feeds/api/users/bbc/uploads/?start-index=1&max-results=10
Вышесказанное работает нормально.
Вместо этого я хочу использовать метод запроса:
Документы Zend Framework docs: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
'<ol>';
foreach($videoFeed as $video):
print '<li>' . $video->title . '</li>';
endforeach;
print '</ol>'
;
Проблема в том, что я не могу выполнить $query->setUser('bbc').
Я попробовал setAuthor, но это возвращает совершенно другой результат.
В идеале я хочу использовать метод запроса для получения результатов в разбивке на страницы.
Как мне использовать метод $query, чтобы установить свои ограничения для разбивки на страницы?
Спасибо.
Решение
Я в основном решил это тем же способом, что и 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;
}
API Zend YouTube кажется глупым, поскольку включенный метод getUserUploads никогда не возвращает экземпляр VideoQuery до того, как он фактически извлечет канал, и хотя вы можете передать объект location в качестве второго параметра, это ситуация "или-или" - он будет использовать только параметр username для создания базового uri или использовать только location, где вам придется создавать все это самостоятельно (как указано выше).
Другие советы
Я решил просто использовать ленту пользовательских загрузок как способ заставить работать разбивку на страницы.http://gdata .youtube.com/feeds/api/users/bbc/uploads/?start-index=1&max-results=10
Если есть способ использовать метод запроса / поиска для выполнения аналогичной работы, было бы интересно изучить.