最新のPHPニュース

YouTube APIを用いたシンプルなPHPスクリプトのサンプル - Part1 -

2006年08月30日

ブログ「WaxJelly」で、YouTube APIを用いたPHPスクリプト作成方法のチュートリアルが掲載されています。
チュートリアルはPart1とPart2に分かれており、Part1ではpagenation機能を用いた簡単なスクリプトの作成方法が紹介されています。

内容は以下のとおりです。

※詳細な内容、及び完全なソースコードをご覧になりたい場合は、ブログ「WaxJelly」をご参照ください。

-----------------------------
注:各ステップの内容をコピーしたコードをそのまま実行しないでください。このコードは説明用に分解してあります。


最初に、youtubeAPIのデベロッパーIDを持っていない場合、http://youtube.com/signup?next=my_profile_devから登録することで使用することができるようになります。
(登録はフリーです。)

前提として、全ての入力はGET変数で受け取るようにすることとします。
このチュートリアルではベーシック(youtubeの"get details"オプションをはずしたもの)なものを使用し、現在のページ番号(page_num)と結果ページのページ数(per_page)、タグによる検索(tag)、developerID(dev_id)(※あなた自身の物に置き換える必要があります)のみを渡すようにします。

まず、入力された変数をチェックして、空であった場合はデフォルトの値(自由に変更してかまいません)を設定します。

if (!$_GET[’page_num’] || $_GET[’page_num’] == ‘’) {
$page_num = 1;
} else {
$page_num = $_GET[’page_num’];
if (!$_GET[’per_page’] || !$_GET[’per_page’]) {
$per_page = 25;
} else {
$per_page = $_GET[’per_page’];
} if (!$_GET[’tag’] || !$_GET[’tag’]) {
$tag = ‘mutemath’;
} else {
$tag = $_GET[’tag’];
}
$dev_id = ‘あなたのdeveloper IDをここに記入してください。’;

これで、YouTubeにクエリを送るのに必要な変数が得られたので、これを一本のURLに連結し、fopen()を使って接続します。

$youtube_url = ‘http://www.youtube.com/api2_rest?method=youtube.videos.list_by_tag&dev_id=’.$dev_id.’&tag=’.$tag.’
                    &page=’.$page_num.’&per_page=’.$per_page;
$handle = fopen($youtube_url, “r”);

得られた結果がファイルポインタとして$handle 変数に格納されているので、この結果を全て配列の中に型変換をして入れてやれば、簡単にデータを操作することができるようになります。

$contents = ‘’;
  while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
$xml = new SimpleXMLElement($contents);
// オブジェクトを配列に変換
$handle = (array)$xml->video_list;

次に、意図する表示をするために、ここで簡単なCSS処理を組み込ましょう。
セルの背景色を変更したり、イメージの位置あわせをしたりするための変数を用意します。

// 表示用の初期値を設定
$thumb_align = ‘left’;
$cell_color = ‘#ffffff’;

これだけではつまらないので、結果の配列を使ってループを繰り返します。

// 結果で得たXMLが格納された配列を用いて、ループを開始
foreach ($handle as $k => $v) {

YouTubeの優れたpagenation機能を活用したいので、次へ(next)と戻る(prev)のリンクをページの上部と下部にそれぞれ設置しましょう。 (サンプルスクリプトではこれを4ページに制限してあります。これは不恰好ですが、今のところはこうしておきます)

次のロジックでは、現在のページ番号をチェックして、それが4より小さい場合には「next page」のリンクを、また1より大きい場合は「prev page」のリンクを表示します。

echo ‘<div style=”float: right”>’;
if ($page_num > 1) {
  $prev = ‘youtube_disp_tutorial.php?page_num=’.($page_num - 1).’&tag=’.$tag.’&per_page=’.$per_page;
  echo ‘<a href=”‘.$prev.’”>prev _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" _fcksavedurl="”‘.$prev.’”>prev" page</a> | ‘;
}
if ($page_num < 4) {
  $next = ‘youtube_disp_tutorial.php?page_num=’.($page_num + 1).’&tag=’.$tag.’&per_page=’.$per_page;
  echo ‘<a href=”‘.$next.’”>next page</a>’;
}
echo ‘</div>’;
$last_vid = $page_num * $per_page;
$first_vid = $last_vid - ($per_page - 1);
echo ‘<h3>Displaying Videos ‘ . $first_vid . ‘ - ‘ . $last_vid . ‘<h3>’;
echo ‘</td></tr><tr><td>’;

ここで、返されたXMLを簡単にパースします。(型変換をして、配列型にして行います。)

if (is_array($v)) {
  // VIDEO ノードでループ
  foreach ($v as $k2=>$v2) {
    // オブジェクトを配列に変換
    $vid = (array)$v2;
    if (is_array($vid)) {
      // イメージの配置を変更
      if ($thumb_align == ‘left’) {
        $thumb_align = ‘right’;
      } else {
        $thumb_align = ‘left’;
     

以下のソースが表示のメイン部分です。$vid['key']となる連想配列に格納されている各要素の値を用いてHTMLを記述します。

       // ビデオのサムネイルとリンクURLを表示
        echo ‘<a href=”‘ . $vid[’url’] . ‘”><img src=”‘ _fcksavedurl="”‘" _fcksavedurl="”‘" _fcksavedurl="”‘" _fcksavedurl="”‘" _fcksavedurl="”‘" _fcksavedurl="”‘" _fcksavedurl="”‘" . $vid[’thumbnail_url’] . ‘” align=”‘.$thumb_align.’”/></a>’;
        // ビデオのタイトル (ビデオへのリンクも張る)
       echo ‘<a href=”‘ . $vid[’url’] . ‘”><h2>’ . $vid[’title’] . ‘</h2></a>’ . “\n”;
        // ビデオの再生時間を整形
        $minutes = floor($vid[’length_seconds’] / 60);
       $seconds = $length_seconds % 60;
       // 秒数が一桁の場合、文字列0を前につける
        if ($seconds < 10) {
         $seconds = ‘0′ . $seconds;
       }
       // M:SS 形式のフォーマットで表示
        $length = $minutes . ‘:’ . $seconds;
       echo ‘<b>’ . $length . ‘</b><br /> ‘ . “\n”;
        // ビデオの説明
        echo $vid[’description’] . ‘<br />’ . “\n”;
        // ビデオのタグ
        echo ‘<b>tags:</b> ‘ . $vid[’tags’] . ‘<br />’ . “\n”;
        // 日付を整形
        $date_added = date(”F j, Y, g:i a”, $vid[’upload_time’]);
       echo ‘<b>added:</b> ‘ . $date_added . ‘<br />’ . “\n”;
        // ビューカウントの合計
        echo ‘<b>Views:</b> ‘ . $vid[’view_count’] . ‘<br />’ . “\n”;
       // ビデオのレーティング
        echo ‘<b>rating:</b> ‘ . $vid[’rating_avg’] . ‘ with ‘ . $vid[’rating_count’] . ‘ total votes.’ . “\n”;
        // セルの色を変更
        if ($cell_color == ‘#dddddd’) {
          $cell_color = ‘#ffffff’;
        } else {
          $cell_color = ‘#dddddd’;
        }
        echo ‘</td></tr><tr><td style=”background-color: ‘. $cell_color .’”>’;
      }
    }
  }
}

最後にフッター部分を作成し、ドキュメントを閉じます。

echo ‘<div style=”float: right”>’;
if ($page_num > 1) {
  $prev = ‘youtube_disp_tutorial.php?page_num=’.($page_num - 1).’&tag=’.$tag.’&per_page=’.$per_page;
  echo ‘<a href=”‘.$prev.’”>prev page</a> | ‘;
}
if ($page_num < 4) {
  $next = ‘youtube_disp_tutorial.php?page_num=’.($page_num + 1).’&tag=’.$tag.’&per_page=’.$per_page;
  echo ‘<a href=”‘.$next.’”>next page</a>’;
}
echo ‘</div>’;
$last_vid = $page_num * $per_page;
$first_vid = $last_vid - ($per_page - 1);
echo ‘<h3>displaying videos ‘ . $first_vid . ‘ - ‘ . $last_vid . ‘<h3>’;
echo ‘</td></tr>’

以上で終了です

関連リンク

関連ニュース

この記事へのトラックバックURL

GANCHIKU.com

2006年09月05日 01:53 Services_YouTubeを使ったサンプルをまた作った。

つーか、サンプル作らずに、サービス作れってな。

先日、Web...

続きを読む

PHPとAjaxと

2007年02月06日 18:43 YouTube検索

前回作ったAmazon検索みたいなのでYouTubeの検索も...

続きを読む

kattsuk2 BLOG

2007年07月14日 13:14 youtube APIのlist_by_tagを使う!!

前にも一度紹介したんですが、youtube API 「lis...

続きを読む