6

ユーザーのアップロード (BBC など) を取得し、出力を 1 ページあたり 10 に制限したいと考えています。

次の URL を使用できます: http://gdata.youtube.com/feeds/api/users/bbc/uploads/?start-index=1&max-results=10

上記は問題なく動作します。

代わりに query メソッドを使用したい:

Zend フレームワークのドキュメント: 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->setUser('bbc') を実行できないことです。

setAuthor を試しましたが、これはまったく異なる結果を返します。

理想的には、クエリ メソッドを使用して、ページ分割された方法で結果を取得したいと考えています。

$query メソッドを使用してページネーションの制限を設定するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

5

ページネーションを機能させる方法として、ユーザー アップロード フィードを使用することにしました。 http://gdata.youtube.com/feeds/api/users/bbc/uploads/?start-index=1&max-results=10

クエリ/検索メソッドを使用して同様の作業を行う方法がある場合は、調査するのが興味深いでしょう。

于 2010-03-16T11:11:32.733 に答える
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;
    }

含まれているgetUserUploadsメソッドが実際にフィードをフェッチする前にVideoQueryインスタンスを返すことはなく、ロケーションオブジェクトを2番目のパラメーターとして渡すことはできますが、これは「どちらか一方」の状況であるため、ZendYouTubeAPIはばかげているようです。基本的なuriを構築するためのusernameパラメーター、または(上記のように)自分ですべてを構築する必要がある場所のみを使用するためのusernameパラメーター。

于 2010-05-17T13:36:32.570 に答える