ナイルさまイベント
ナイルさまイベント

CakePHPで作る。APIを使用してサイトにYouTube検索を実装する方法

勝利

久方ぶりです。勝利です。

この度はYoutubeAPIのもっとも簡単であるであろう検索機能の利用方法を紹介します。

誰かの役に立ってくれることと、誰かが面白いマッシュアップを考えてくれることを願っております。(もうたくさんあるけどね♪)

では、さっそくオペを開始しようと思います。

下準備 -環境-

今回僕は、CakePHP1.3系を利用して構築してみました。

厳密に言えば、CakePHP 1.3.15 というものを使用させていただきました。

※DBは今回諸事情(めんどくさい&使わない)で使用を回避させていただきました。

で、今回必要なものは以下2つ用意しといてください。

・cakephp 1.3.15

http://cakephp.jp/

・ZendGdata-1.11.13

http://framework.zend.com/download/gdata

さて、そろいましたか?ではそろそろ始めましょう。

作業開始 スタート

1.ダウンロードしたzenddataの中のlibraryのZendディレクトリをcakephpのvendorsへ移動

app/vendors/Zend

 

2.ZendFrameworkLoader Compornentを作成する。

app/controllers/components/zend.php

class ZendComponent extends Object {
	public function startup() {
		$include = get_include_path();
		$include.= PATH_SEPARATOR. APP . 'vendors' . DS;
		$successful = set_include_path($include);
		if (!$successful) {
			throw new Exception('ZendComponent failed to set include path.', E_ERROR);
		}
		require_once('Zend/Loader.php');
	}
	public function loadClass($class, $dirs = null){
		Zend_Loader::loadClass($class, $dirs);
	}
	public function loadFile($filename, $dirs = null, $once = false){
		Zend_Loader::loadFile($filename, $dirs, $once);
	}
	public function isReadable($filename) {
		Zend_Loader::isReadable($filename);
	}
}

これでZendをあれしました。

 

3.Controllerの作成

app/controllers/youtube_controller.php

class YoutubeController extends AppController{ 	
	public $name = 'Youtube';
	public $uses = null;
 	public $layout = 'default';
 	public $components = array('Zend');

 	public function index(){ 
		$this->Zend->loadClass('Zend_Gdata_YouTube');
		$yt = new Zend_Gdata_YouTube();

		$searchTerms = "アイドル 水着";
		try{
			/* 検索Query */
			$query = $yt->newVideoQuery();
			$query->setRacy('include');		//制限なし
			$query->setMaxResults(15);		//15件取得
			$query->setOrderBy('viewCount');	//視聴回数でソート
			$query->setVideoQuery($searchTerms);	//検索対象

			// 検索実行
			$videoFeed = $yt->getVideoFeed($query);
			// 検索結果
			$this->set('videoFeed', $videoFeed);
		}
		catch(Exception $e){
			// Exceptionの際にどうぞ
		}
	}
}

ちなみに、下記が指定できるQueryの例になります。(あとは自分で調べてください。)

●setAuthor
エントリの投稿者を設定します。投稿者の名前は YouTube のユーザー名と同じです。
●setFormat
動画のフォーマットを指定します。モバイル向け動画の再生用の RTSP ストリーミング URL か、埋め込み型 Flash プレーヤーへの HTTP URL の 2 種類のどちらかを示す数値パラメータを指定できます。
●setRacy
結果に制限付きコンテンツを含めるかどうかを指定します。’include’ か ‘exclude’ の 2 つのパラメータのみ指定できます。
●setMaxResults
一度に返すエントリの最大数を設定します。
●setStartIndex
取得される最初の結果に 1 から始まるインデックスを設定します (複数のページで結果を表示するため)。
●setOrderBy
リストのエントリの順序を設定します。RELEVANCE、VIEW_COUNT、UPDATED、RATING などによる順序を指定できます。
●setTime
標準フィードの結果を TODAY、THIS_WEEK、THIS_MONTH、ALL_TIME の期間に限定するように設定します。
●setVideoQuery
検索キーワードを設定します。動画のすべてのメタデータ (タイトル、タグ、説明など) 内で、指定した文字列が検索されます。

 

4.Modelはつくらない

うん!モデルは作らない!!
(*´゚,_っ゚)´.;.:;*.’:;*.’:;ブッ

 

5.Viewはつくる

一転、Viewは作ります。━━Σ(´ω`*)━━ヱ!!!

app/view/youtube/index.php

Controller側でセットした変数の中身の取得方法でポプラーなものだけ紹介します。

// 検索結果の全件数
$get_Totalcount = $videoFeed->getTotalResults()->text;
// 検索結果の1ページ当たりの件数
$get_Itemcount = $videoFeed->getItemsPerPage()->text;

foreach ($videoFeed as $videoEntry) {

	//対象の動画のタイトル
	$videoEntry->getVideoTitle();

	//対象の動画の大画面リンク
	$videoEntry->getFlashPlayerUrl();

	//対象の動画のサムネイル画像があります。
	$arrVideoThumbnails = $videoEntry->getVideoThumbnails();
	foreach ( $arrVideoThumbnails as $thumbnailValue ) {
		$thumbnail_img = $thumbnailValue['url'];
	}
}

こんな感じですかね。

あとは自分たちで適度に表示させてください。

echoとかしたら出てくるよ。(ものによってはvar_dump等々)

 

6.Layoutも必然的につくるが、割愛します。

Layoutもつくるが割愛します。
各々好きなようにデザインしちゃってください!

app/view/layout/index.php

 
————
以上になります。

 

これで一応検索して表示させる事ができるようになったはずです。
あとは実際に実装してみたらいろいろできますよー。
たとえば、検索に必ず「植木」というワードを含める植木検索とか…アイディアが膨らみますね~!!
 
とりあえず、使ってみることっていいことですね!