2012-01-28 12 views
3

私のチャンネルからアップロードした最新のビデオのサムネイルを返信して、私のウェブサイトに表示したいと思っています。Youtube API最新のアップロードのサムネイルを取得

私は最小限の接続トラフAPIを使用してサムネイルのみを取得する方法を知っていますか?

ありがとうございます! -Tom

REVISED !!

Cakephpを使って、これは私がやった方法です(zendを使って提案してくれてありがとう)。

コントローラ:

App::import('Xml'); 
$channel = 'Blanktv'; 
$url = 'https://gdata.youtube.com/feeds/api/users/'.$channel.'/uploads?v=2&max-results=1&orderby=published'; 
$parsed_xml =& new XML($url); 
$parsed_xml = Set::reverse($parsed_xml); 
//debug($parsed_xml); 
$this->set('parsed_xml',$parsed_xml); 

見ます。

$i=0; 
foreach ($parsed_xml as $entry) 
{   
    echo '<a href="/videokanalen" target="_self">      
    <img width="220px" src="'.$entry['Entry']['Group']['Thumbnail'][1]['url'] .'"> 
    </a>';    
} 

残りの唯一のことは、フィード呼び出しをどこかにキャッシュすることです。ここ-Tom

答えて

2

は本当にAPIを全く触れることなくそれを行うの迅速な汚い方法です。

私はそれがベストプラクティスであるとは何も示唆していません。スマートな方法があると確信していますが、現在のYoutubeフィードサービスでは間違いなく機能します。

私の解決策は、Zend FrameworkのZend_Feed_Readerコンポーネントを使用したPHPです。あなたがそれに精通していない場合は、これを設定する必要があります。

Zend.com hereからバージョン1.11をダウンロードし、PHPインクルードパスでフレームワークファイルにアクセスできることを確認してください。

あなたはすでにあなたが選択したコントローラのアクションでこれを行うことができますMVCパターンでのZend Frameworkを使用している場合:

$channel = 'Blanktv'; //change this to your channel name 
$url = 'https://gdata.youtube.com/feeds/api/users/'.$channel.'/uploads'; 
$feed = Zend_Feed_Reader::import($url); 
$this->view->feed = $feed; 

次に、あなたがあなたのビューでこれを行うことができます。

<h1>Latest Video</h1> 
<div> 
<?php 
$i=0; 
foreach ($this->feed as $entry) 
{   
    $urlChop = explode ('http://gdata.youtube.com/feeds/api/videos/',$entry->getId()); 
    $videoId = end($urlChop);       
    echo '<h3><a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">' . $entry->getTitle() . '</a></h3>'; 
    echo '<p>Uploaded on: '. $entry->getDateCreated() .'</p>'; 

    echo '<a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">      
    <img src="http://img.youtube.com/vi/' . $videoId .'/hqdefault.jpg"> 
    </a>';     
    $i++; 
    if($i==1) break; 
} 
?> 
</div> 

そうでなければ、することができます:

<?php 
$channel = 'Blanktv'; //change this to your channel 
$url = 'https://gdata.youtube.com/feeds/api/users/'.$channel.'/uploads'; 
$feed = Zend_Feed_Reader::import($url); 
?> 
<h1>Latest Video</h1> 
<div> 
<?php 
$i=0; 
foreach ($feed as $entry) 
{   
    $urlChop = explode ('http://gdata.youtube.com/feeds/api/videos/',$entry->getId()); 
    $videoId = end($urlChop);       
    echo '<h3><a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">' . $entry->getTitle() . '</a></h3>'; 
    echo '<p>Uploaded on: '. $entry->getDateCreated() .'</p>'; 

    echo '<a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">      
    <img src="http://img.youtube.com/vi/' . $videoId .'/hqdefault.jpg"> 
    </a>';     
    $i++; 
    if($i==1) break; 
} 
?> 
</div> 

おそらく、PHPのrequiを使用する必要がありますZend_Feed_Readerファイルなどのre文。

あなたが手を必要とするかどうか私に知らせるように、これが助けてくれることを願っています。

すべてのベスト、

デイブ

UPDATE:

こんにちはトムのキャッシングについてのあなたのコメントを受けて、ここではキャッシュを使用してもよいが、していない別の迅速かつ汚いソリューションです非常に迅速に実装することができます。

キャッシングコンポーネントを使用しなかった理由は、単純なdbソリューションで十分であると考えたからです。私はまた、それが新しいかどうかを比較するためにフィードをプルしなければならないと思って、あなたにとって最も経済的ではないでしょう。

このプロセスを自動化することもできますが、プロセスを自動化したくない場合や、リンクをクリックして手動でビデオを更新しても問題ありません。

私の解決策はZFをベースにしていますが、cakephpで役立つ何かにハッキングしているので、ここで同じことをしても問題ありません。

まず(MySQLのDBを想定して)新しいテーブルを設定します。

CREATE TABLE `yourdbname`.`latestvid` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique identifier', 
`videoId` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Video id', 
`videoTitle` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Video title', 
`uploadDate` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Video upload date' 
) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci; 

INSERT INTO `yourdbname`.`latestvid` (`id`, `videoId`, `videoTitle`, `uploadDate`) VALUES (NULL, '--', '--', '--'); 

これはあなたのテンプレートで使用するための最新の動画情報のためのテーブルを作成します、私はしません設定しましたが、デフォルト値を明白な理由からあなたのテンプレートで作業してください。

public function updateAction() 
{ 
    $this->_helper->viewRenderer->setNoRender(); // disable view 
    $this->_helper->layout()->disableLayout(); // disable layout 

    $user = 'Blanktv'; // insert your channel name 
    $url = 'https://gdata.youtube.com/feeds/api/users/'.$user.'/uploads'; 
    $feed = Zend_Feed_Reader::import($url); 

    if(!$feed) 
    { 
     die("couldn't access the feed"); // Note: the Zend component will display an error if the feed is not available so this wouldn't really be necessary for ZF 
    } 
    else 
    { 
     $i=0; 
     foreach ($feed as $entry) 
     {   
      $urlChop = explode ('http://gdata.youtube.com/feeds/api/videos/',$entry->getId()); 
      $videoId = end($urlChop);        
      $videoTitle = $entry->getTitle(); 
      $uploadDate = $entry->getDateCreated();   

      // use your preferred method to update the db record where the id = 1    

      $i++; 
      if($i==1) break; 
     } 
    }  
} 

はたぶん行くを持っていると私はあなたが乗る方法を知ってみましょう:

その後、これに似た何かをするだろうか?

サムネイルを除いて、Youtubeではなくデータベースから変数を取得するようにテンプレートを調整するだけで済みます。

サムネイルがまだYoutubeから引き出されているため、物事を遅くする可能性があるので、あなたはいつももっとこのアプローチを取って実際に画像を保存できると思います。

標準のブランド設定が必要な一連の動画を実行している場合は、サムネイルを独自のサーバーにコピーしてデータベースに保存するか、標準のサムネイルを使用するスクリプトを設定できます。

:-D

デイブ

+0

ねえデイブ!本当に素敵な提案は、私を助けてくれました。私はcakephpを使用しています。あなたのアプローチを使用して、私の質問に対する改訂された答えを見つけました。残りの部分は、誰かがウェブサイトのメインページにアクセスするたびにフィードを取得しないように、YouTubeにコールをキャッシュすることです。助言がありますか? – Tom

+0

こんにちはトム、それは私が助けてうれしいです:-D、私はすぐに考えて、今夜私の時間後にあなたに戻ってくるだろう飼料をキャッシュする。 – dkcwd

+0

今更新されました。 – dkcwd

関連する問題