Youtube API - 如何限制分页结果?

时间:2010-03-15 16:38:24

标签: zend-framework youtube-api zend-gdata

我想获取用户的上传内容(即:BBC)并将输出限制为每页10个。

虽然我可以使用以下网址: 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框架文档上(与之前在“按元数据搜索视频”标题下的页面相同),与此类似:


$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-&gt; setUser('bbc')。

我尝试了setAuthor,但这会返回完全不同的结果。

理想情况下,我想使用查询方法以分页方式获取结果。

如何使用$ query方法设置分页限制?

感谢。

2 个答案:

答案 0 :(得分:5)

我决定使用用户上传Feed作为分页工作的一种方式。 http://gdata.youtube.com/feeds/api/users/bbc/uploads/?start-index=1&max-results=10

如果有一种方法可以使用查询/搜索方法来完成类似的工作,那么探索它会很有趣。

答案 1 :(得分:3)

我基本上以与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方法在实际提取Feed之前从不返回VideoQuery实例,虽然您可以将位置对象作为第二个参数传递,但它是“任何 - 或”情况 - 它' ll只使用username参数构建一个基本的uri或仅使用该位置,你必须自己构建整个东西(如上所述)。