メモ:YouTubeAPI + PHP(Zend)
何はともあれ、動画をアップロードしてみたいんだもじゃー
動画のアップロード方法
http://code.google.com/intl/ja/apis/youtube/developers_guide_protocol.html#Uploading_Videos
"直接"アップロード
"自ホスト"(自分が持っているサイト)に動画をアップロードしてもらい、自ホストで動画データを保管するとともに、自ホストがAPIを使ってyoutubeにもデータを送信・保管する方法を指す。
アップロードの制限
サイズは100MB(102,400KB)まで。 ZIPで圧縮してもいいが(しねーよ)、サイズの制限は伸張後のファイルに適用される。
デベロッパータグとデベロッパーキー
デベロッパータグ(正体不明)は、デベロッパーキーとセットで使うこと。
あるデベロッパータグを持つデータを探そうとする時、そこで使用するデベロッパーキーは、そのデベロッパータグを割り当てるために使ったデベロッパーキーと同じものでなくてはならない。
<?php /*** * ブラウザベースアップロードのサンプル作成 * 2009.02.05 */ // // エラーリポート error_reporting(E_ALL ^ E_NOTICE); ini_set('display_errors', true); ini_set('log_errors', false); ini_set('mbstring.http_output' , 'pass'); // include_path設定 $include_path[] = ""; $include_path[] = "/usr/share/zend/library"; ini_set( 'include_path', implode((!strncasecmp(PHP_OS, "WIN", 3) ? ";" : ":"), $include_path)); // Zend Loaderで必要なライブラリの読み込み require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_YouTube'); Zend_Loader::loadClass('Zend_Gdata_AuthSub'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); // YouTubeサービス利用のログイン情報 // * YouTubeAPIの開発コード - 取得して代入 $sDeveloperKey = '[取得したデベロッパーキー]'; // * YouTubeアカウント名 $sAccount = 'ftshJp'; // * YouTubeログインパスワード $sPassword = '[取得したパスワード]'; // 動画アップロードについての情報 // [ アップロードする動画のタイトル ] $sMovieTitle = 'ftsh Test Movie'; // [ 動画の説明文 ] $sDescription = 'none...'; // [ デベロッパータグ ] - $sDevTag = 'ftshftsh'; // [ タグ ] - $sTags = 'Film,Tech'; // [ カテゴリー ] - 定義のあるカテゴリーを使うこと - http://gdata.youtube.com/schemas/2007/categories.cat $sCats = 'Film'; // [ キーワード ] $sKeywords = 'ftsh.jp'; // [ アップロード後に遷移する画面 ] $sNextUrl = 'http://zend.localhost/yt_01_uploaded.php'; // [ YouTubeクライアントログイン用のURL ] $authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin'; // クライアントログインオブジェクト作成 $httpClient = Zend_Gdata_ClientLogin::getHttpClient( $username = $sAccount, $password = $sPassword, $service = 'youtube', $client = null, $source = 'ftshYTtest', // a short string identifying your application $loginToken = null, $loginCaptcha = null, $authenticationURL ); $httpClient->setHeaders('X-GData-Key', "key={$sDeveloperKey}"); //出来たオブジェクトにデベロッパーキーも持たせる。 /*********** * アップロードのコア */ $yt = new Zend_Gdata_YouTube($httpClient); // create a Zend_Gdata_YouTube_VideoEntry $myVideoEntry= new Zend_Gdata_YouTube_VideoEntry(); // set up media group as in the example above $mediaGroup = $yt->newMediaGroup(); $mediaGroup->title = $yt->newMediaTitle()->setText( $sMovieTitle ); $mediaGroup->description = $yt->newMediaDescription()->setText( $sDescription ); $mediaGroup->keywords = $yt->newMediaKeywords()->setText( $sKeywords ); // note the different schemes for categories and developer tags // [使えるカテゴリの一覧] ...が定義されていると思う。多分。 $categoryScheme = 'http://gdata.youtube.com/schemas/2007/categories.cat'; // [デベロッパータグの定義] $developerTagScheme = 'http://gdata.youtube.com/schemas/2007/developertags.cat'; $mediaGroup->category = array( $yt->newMediaCategory()->setText($sCats)->setScheme($categoryScheme), $yt->newMediaCategory()->setText($sDevTag)->setScheme($developerTagScheme), $yt->newMediaCategory()->setText('テケトー')->setScheme($developerTagScheme) ); $myVideoEntry->mediaGroup = $mediaGroup; // アップロード用のトークンの取得 $tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken'; $tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl); $tokenValue = $tokenArray['token']; $postUrl = $tokenArray['url']; //動画ファイルを指定させるHTML $form = "<h2>YouTube + php/Zend : ブラウザベースアップロード</h2>"; $form .= "<p><strong>Title</strong>: {$sMovieTitle}</p>"; $form .= "<p><strong>Desc.</strong>: {$sDescription}</p>"; $form .= "<p><strong>DevTag</strong>: {$sDevTag}</p>"; $form .= "<p><strong>Tags</strong>: {$sTags}</p>"; $form .= "<p><strong>Keywords</strong>: {$sKeywords}</p>"; $form .= "<p><strong>Category</strong>: {$sCats}</p>"; $form .= '<form action="'. $postUrl .'?nexturl='. $sNextUrl . '" method="post" enctype="multipart/form-data">' ; $form .= '<input name="file" type="file"/>' ; $form .= '<input name="token" type="hidden" value="'. $tokenValue .'"/>' ; $form .= '<input value="Upload Video File" type="submit" />' ; $form .= '</form>'; print $form; // アップロード完了後、$sNextUrl のページにリダイレクトされる。 ?>
<?php /*** * ブラウザベースアップロードのサンプル作成 - アップロード後の結果を受け取る子 * 2009.02.05 */ echo "<h2>YouTube + php/Zend : ブラウザベースアップロード</h2>"; if( $_REQUEST['status'] === '200' ) { echo '<p>動画がアップロードされまんた!</p>'; echo '<p><strong>動画ID:</strong> '.$_REQUEST["id"].'</p>'; //こういう風にアップロード結果をすぐ見ようとしても、たいてい変換中なので観れない。 ?> <object width="425" height="344"> <param name="movie" value="http://www.youtube.com/v/<?php echo $_REQUEST["id"]; ?>&hl=ja&fs=1"></param> <param name="allowFullScreen" value="true"></param> <param name="allowscriptaccess" value="always"></param> <embed src="http://www.youtube.com/v/<?php echo $_REQUEST["id"]; ?>&hl=ja&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344" ></embed> </object> <?php } else { echo '<p>動画のアップロードに失敗した模様...</p>'; } echo '<div style="text-align:center"><a href="./yt_01.php">戻る</a></div>'; ?>