最新のPHPニュース
YouTube APIを用いたシンプルなPHPスクリプトのサンプル - Part1 -
ブログ「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)(※あなた自身の物に置き換える必要があります)のみを渡すようにします。
まず、入力された変数をチェックして、空であった場合はデフォルトの値(自由に変更してかまいません)を設定します。
$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()を使って接続します。
&page=’.$page_num.’&per_page=’.$per_page;
$handle = fopen($youtube_url, “r”);
得られた結果がファイルポインタとして$handle 変数に格納されているので、この結果を全て配列の中に型変換をして入れてやれば、簡単にデータを操作することができるようになります。
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’;
これだけではつまらないので、結果の配列を使ってループを繰り返します。
foreach ($handle as $k => $v) {
YouTubeの優れたpagenation機能を活用したいので、次へ(next)と戻る(prev)のリンクをページの上部と下部にそれぞれ設置しましょう。 (サンプルスクリプトではこれを4ページに制限してあります。これは不恰好ですが、今のところはこうしておきます)
次のロジックでは、現在のページ番号をチェックして、それが4より小さい場合には「next page」のリンクを、また1より大きい場合は「prev page」のリンクを表示します。
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を簡単にパースします。(型変換をして、配列型にして行います。)
// 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を記述します。
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 .’”>’;
}
}
}
}
最後にフッター部分を作成し、ドキュメントを閉じます。
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>’
以上で終了です
関連リンク
- Simple PHP script using the YouTube API (with pagination) Part 1
- A More Complex PHP script using the YouTube API (with video details) PART 2
関連ニュース
この記事へのトラックバックURL
>> ニュースの一覧へ戻る






