娘(2歳)が動物動画を見るとたいへん喜ぶので、動物動画サイトをつくってみた。
ふつうに楽しいサイトに仕上がったので、ぜひお楽しみください ;-)
説明文(Wikipedia)部分は手でコピペ→読みやすいように加工して、動画収集にはYouTube API を使っています。
WordPress上で動いています。プラグイン化する腕はないので、テンプレートにそのまま記述しています。(カスタムフィールドに検索キーワード登録→YouTubeから検索→独自アルゴリズム(←そんなえらそうなもんじゃない(笑))でランク付け&関係なさそうな動画を除外など)
自分用のメモとして、YouTube API を使ってみたごく簡単な手順を以下に記しておきます。
(1)Zend Gdataライブラリ入手
PHPで楽して書きたいので、Zend Gdataライブラリをを使うことにする。
ライブラリをダウンロードして適当なディレクトリに展開。
とりあえず今回は全部展開してディレクトリに置いたが、本当は library/ 配下のみ置けば用は足りるはず。
(2)PHP5環境を用意
Zend GdataライブラリにはPHP5が動く環境が必要。
(なので、ついでに当ぢぢらぶろぐも ロリポップ→heteml に乗り換えました)
(3)今回は検索だけなので Developer Key は不要。でもなんとなくとってみる。
(4)ソース。
その1:YouTubeライブラリを呼ぶ。
Zend Gdataのライブラリディレクトリに include_path が通っている必要がある。とりあえず実行時に通すことにする。
// YouTubeローダ
$ZEND_LIB_DIR = ライブラリを置いてるディレクトリ. 'ZendGdata-1.5.2/library/';
set_include_path(ini_get('include_path') . ($_SERVER['WINDIR']>” ? ‘;’ : ‘:’) . $ZEND_LIB_DIR);
require_once ‘Zend/Loader.php’;
Zend_Loader::loadClass(’Zend_Gdata_YouTube’);
その2:検索は簡単。
$yt = new Zend_Gdata_YouTube();
// 検索条件設定
$query = $yt->newVideoQuery();
$query->setVideoQuery ('cattle|cow|bull'); // ウシに関する動画を探してみようと思う
$query->setCategory('Animals'); // 動物カテゴリから
// 検索実行
$feeds = $yt->getVideoFeed($query);
キーワードの羅列は | で区切る。
カテゴリは先頭大文字で、キーワードは先頭小文字でセットする。
ここで注意する点:
英語のキーワードと日本語のキーワードが混在しているとうまく検索できないっぽい(確か英語の検索結果のみ表示される)。
ZooTubeでは日本語のみと英語のみで2度に分けてクエリを投げて、あとからマージする処理をしている。
その3:あとは適当にループまわして表示する
foreach($feeds as $entry) {
// エントリのIDを取得
$id = substr($entry->getVideoWatchPageUrl(), -11);
// タイトル
$title = $entry->getVideoTitle();
// 詳細
$desc = $entry->getVideoDescription();
// URL
$url = $entry->getFlashPlayerUrl();
// 評価:未評価だと getRating() で nullが返る
if ($entry->getRating()) {
$rate = (string)$entry->getRating()->getAverage();
}
// 時間(秒)
$duration = $entry->getVideoDuration();
print <<<END_OF_HTML
<div class="entry">
(略:適当に表示)
:
END_OF_HTML;
}
実際はもうすこしごにょごにょやってますが(表示順を整えたり、かぶってる動画や関係なさそうな動画を除去したり)、まぁこんなに簡単に動画収集サイトができるのはありがたいことだ。
つい最近APIがらみのドキュメントも日本語化されたことだし(もーちょっと早く出てくれれば自分も恩恵にあずかれたのだが :-P)、これからどんどん YouTube API を活用したサイトが出てくると楽しくなるなと思います。

タグ:
2008年6月16日 (月)
まだコメントはありません。