5

だから、これがYouTubeユーザーの公開プレイリストを取得するための私のコードです:

function getyoutubeplaylists($userName) {
$yt = connectyoutube();
$yt->setMajorProtocolVersion(2);
$playlistListFeed = $yt->getPlaylistListFeed($userName);
foreach ($playlistListFeed as $playlistListEntry) {
    $playlist['title'] = $playlistListEntry->title->text;
    $playlist['id'] = $playlistListEntry->getPlaylistID();
    $playlists[] = $playlist;
    $playlistVideoFeed = $yt->getPlaylistVideoFeed($playlistListEntry->getPlaylistVideoFeedUrl());
    foreach ($playlistVideoFeed as $videoEntry) {
        $playlist_assignment['youtube_id'] = substr($videoEntry->getVideoWatchPageUrl(),31,11);
        $playlist_assignment['id'] = $playlist['id'];
        $playlist_assignments[] = $playlist_assignment;
    }
}
$everything['playlists'] = $playlists;
$everything['playlist_assignments'] = $playlist_assignments;
return $everything;
}

問題は、これは最初のページまたは結果のみを取得することです。Zend Gdataを使用して結果の次のページを取得する方法についてのアイデアはありますか?

生のgdataXMLは、必要なURLを示しています。

<link rel="self" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/users/pennstate/playlists?start-index=1&amp;max-results=25"/>
<link rel="next" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/users/pennstate/playlists?start-index=26&amp;max-results=25"/>

ただし、getPlaylistListFeedには、「start-index」または「max-results」を指定するパラメーターがないようです。

4

3 に答える 3

2

これは、次のページだけでなく、フィードで使用可能なすべてのエントリを取得するための便利な Zend 関数です。

 $playlistListFeed = $yt->retrieveAllEntriesForFeed($yt->getPlaylistListFeed($userName));
于 2012-08-27T06:11:06.597 に答える
1

「私のウェブサイトに表示するビデオのリストを取得しようとして」一日中無駄にしたので、多くのことを学んだサンプルコードを貼り付けようと思いました。そして予想通り、Zend_Gdata_YouTube::すでにMagentoのインストールに含まれています. 以下のコードは、「動画」の統一されたリストを表示します。再生リストは、他の動画と同じように一覧に表示されます。 更新:回答から Magento 拡張機能を作成しました。

これは、var/export にドロップした単なる一般的な php です。上部に、を含める必要がありますapp/Mage.php

<?
$userName='cacycleworksdotcom';
$yt = new Zend_Gdata_YouTube();
//////////////////////////////////////////////////////////////////////
// Get playlists.
$playlistListFeed = $yt->retrieveAllEntriesForFeed($yt->getPlaylistListFeed($userName));
$playlist=Array();
$videoEntry=NULL;
$playlistvideos=Array();

ここでは、Zend オブジェクトの配列が にあります$playlistListFeed

foreach ($playlistListFeed as $idx=>$playlistListEntry) {
    // process each playlist
    $playlists[$idx]['title'] = $playlistListEntry->title->text;
    $url=$playlistListEntry->getSelfLink()->href;
    $id=explode("/PL",$url);
    $playlists[$idx]['id'] = $id[1];
    $playlistVideoFeed = $yt->getPlaylistVideoFeed($playlistListEntry->getPlaylistVideoFeedUrl());
    $playlists[$idx]['time']=0;
    $playlists[$idx]['views']=0;
    $playlists[$idx]['rating']=0;

次に、プレイリスト内で、このプレイリストのビデオを見て、それぞれの統計を収集します。それらの時間を合計して合計再生時間を取得し、プレイリスト内の動画から最高の視聴回数と評価を取得します。

    foreach ($playlistVideoFeed as $videoEntry) {
        // info of each video inside this playlist
        $_id=substr($videoEntry->getVideoWatchPageUrl(),31,11);
        $playlistvideos[]=$_id;
        $_url=$videoEntry->getVideoWatchPageUrl();
        $playlists[$idx]['videos'][$_id]=$_url;
        $playlists[$idx]['time']+=$videoEntry->getVideoDuration();
        $_views=$videoEntry->getVideoViewCount();
        if( $_views > $playlists[$idx]['views'] )
            $playlists[$idx]['views']=$_views;
        $_rating=$videoEntry->getRating()->average;
        if( $_rating > $playlists[$idx]['rating'] )
            $playlists[$idx]['rating']=$_rating;
    }

最終的に、XML を使用してサムネイル データを取得しました。

    $xml=$playlistListEntry->getXML();
    // $playlists[$idx]['xml']=$xml;    // store original XML for now
    $xml = simplexml_load_string($xml); // transfer into object
    $attrs=$xml->group->thumbnail[1];
    $playlists[$idx]['thumb']=(string)$attrs['url'];
    //                                1st vid id         playlist id
    // http://www.youtube.com/watch?v=mcnIAErKc-g&list=PLEDADE9CA0E65BA78
    $videoid=array_keys( $playlists[$idx]['videos']);
    $videoid=$videoid[0];
    $playlists[$idx]['url'] = "http://www.youtube.com/watch?v=$videoid&list=PL".$playlists[$idx]['id'];     
}

プレイリストが処理されたので、プレイリストにない残りのビデオを取得しましょう。

//////////////////////////////////////////////////////////////////////
// Videos themselves
$idx=count($playlists);
$userFeed = $yt->getUserUploads($userName);
foreach ($userFeed as $videoEntry) {
    $idx++;
    $_id=substr($videoEntry->getVideoWatchPageUrl(),31,11);
    if( ! in_array($_id, $playlistvideos) ) {
        $_url=$videoEntry->getVideoWatchPageUrl();
        $playlists[$idx]['id']=$_id;
        $playlists[$idx]['url']=$_url;
        $playlists[$idx]['title']=$videoEntry->title->text;
        $playlists[$idx]['views']=$videoEntry->getVideoViewCount();
        $playlists[$idx]['rating']=$videoEntry->getRating()->average;
        $thumbs=$videoEntry->getVideoThumbnails();
        // these need resizing to width="320" height="180"
        $playlists[$idx]['thumb']=$thumbs[0]['url'];
        $playlists[$idx]['time']=$videoEntry->getVideoDuration();
    } // else { echo "$_id already in playlist\n";  }
}

ここには、YouTube ビデオの配列があります。一番上には、古いものから順に並べられたプレイリストがあり、その後に、プレイリストに表示されていないユーザーのビデオが、同じ古いものから順に表示されます。そこで、この単純な並べ替えコードを見つけて、順序を変更しました。ここで多次元配列をソートしようとしている場合は、ソートに関する素晴らしい記事があり、読む価値があります。

//////////////////////////////////////////////////////////////////////
// http://www.the-art-of-web.com/php/sortarray/
function orderBy($data, $field) {
    $code = "return strnatcmp(\$a['$field'], \$b['$field']);";
    //  swap $a and $b to make descending instead of ascending
    usort($data, create_function('$b,$a', $code)); //('$a,$b', $code));
    return $data;
}
$playlists = orderBy($playlists, 'views');
//////////////////////////////////////////////////////////////////////
echo "\n\n";
print_r($playlists);

これらのばかげた GData YouTube Zend オブジェクトを使い始めるのに役立つコードを次に示します。

echo "\n\n";
show_methods($videoEntry);
echo "\n\n";
show_methods($playlistListFeed[0]);
echo "\n\n";
show_methods($playlistListFeed);

function show_methods( $_a ) {
    echo "<h3>Methods for ".get_class($_a)."</h3>";
    $_a= get_class_methods($_a);
    $_a=array_unique($_a);
    array_multisort(&$_a);
    $i=0;
    foreach( $_a as $method ) {
        $i++;
        printf("%-30.30s",$method);
        if($i%5==0)
            echo "\n";
    }
}

構造を示す 2 つの配列エントリを次に示します。videosプレイリストには、その中にビデオの配列を持つキーがあることに注意してください。キーをテストすると、videosそれがプレイリストであることがわかります。urlユーザーがクリックして、YouTube サイトのビデオまたはプレイリストを開くことができます。

[1] => Array
    (
        [title] => Ducatitech.com "HowTo" Adjust your Valves
        [id] => 970EC735D36A95E8
        [time] => 855
        [views] => 144847
        [rating] => 4.9322033
        [videos] => Array
            (
                [dIj3nSJGPZw] => http://www.youtube.com/watch?v=dIj3nSJGPZw&feature=youtube_gdata_player
                [3WQY1MRlmH4] => http://www.youtube.com/watch?v=3WQY1MRlmH4&feature=youtube_gdata_player
            )

        [thumb] => http://i.ytimg.com/vi/dIj3nSJGPZw/mqdefault.jpg
        [url] => http://www.youtube.com/watch?v=dIj3nSJGPZw&list=PL970EC735D36A95E8
            )

        [thumb] => http://i.ytimg.com/vi/mcnIAErKc-g/mqdefault.jpg
        [url] => http://www.youtube.com/watch?v=mcnIAErKc-g&list=PLEDADE9CA0E65BA78
    )
[7] => Array
    (
        [id] => 80yCiFkOB9g
        [url] => http://www.youtube.com/watch?v=80yCiFkOB9g&feature=youtube_gdata_player
        [title] => Ducatitech.com: ExactFit Timing Belt Tensile Test
        [views] => 7589
        [rating] => 4.25
        [thumb] => http://i.ytimg.com/vi/80yCiFkOB9g/0.jpg
        [time] => 625
    )

そして最後に、あなたが得るものの種類show_methods()

Methods for Zend_Gdata_YouTube_VideoEntry

__construct                   __get                         __isset                       __set                         __toString                    
__unset                       addVideoDeveloperTag          delete                        encode                        ensureMediaGroupIsNotNull     
flushNamespaceLookupCache     getAlternateLink              getAuthor                     getCategory                   getComments                   
getContent                    getContributor                getControl                    getDOM                        getEditLink                   
getEtag                       getExtensionAttributes        getExtensionElements          getFeedLink                   getFlashPlayerUrl             
getHttpClient                 getId                         getLicenseLink                getLink                       getLocation                   
getMajorProtocolVersion       getMediaGroup                 getMediaSource                getMinorProtocolVersion       getNextLink                   
getNoEmbed                    getPreviousLink               getPublished                  getRacy                       getRating                     
getRecorded                   getRights                     getSelfLink                   getService                    getSource                     
getStatistics                 getSummary                    getText                       getTitle                      getTitleValue                 
getUpdated                    getVideoCategory              getVideoCommentFeedUrl        getVideoComplaintsLink        getVideoDescription           
getVideoDeveloperTags         getVideoDuration              getVideoGeoLocation           getVideoId                    getVideoRatingInfo            
getVideoRatingsLink           getVideoRecorded              getVideoResponsesLink         getVideoState                 getVideoTags                  
getVideoThumbnails            getVideoTitle                 getVideoViewCount             getVideoWatchPageUrl          getWhere                      
getXML                        isVideoEmbeddable             isVideoPrivate                lookupNamespace               registerAllNamespaces         
于 2013-02-27T01:44:52.653 に答える
1

pagination の Dev Guide example に従いたいようです。

于 2011-08-15T16:16:04.090 に答える