【PHP】YouTubeの新APIを使って動画をアップロードする
YouTubeの新しくなったAPIを調査中。2008/3/13のニュース記事
Googleが公開しているドキュメントに従ってサンプルコードを流用して書いていけばとりあえず動画の投稿はできた。
まずはここからZend Frameworkをダウンロードしてくる。現在の最新は1.5.2。使うのはlibrary/Zend以下のファイル群。実際に動かすときには、このlibraryにパスが通っている必要がある。こういう方法とか
開発中の最新バージョンがほしい場合はここを参考にsubversionクライアントを使って取得する。私の場合はこれで取得。
次にYouTube APIで必要な開発コードを取得する。ここから。
YouTubeでアカウントを登録してない場合は登録する。
とりあえずAPIを使って投稿したいだけならば、ここにZendが作ったサンプルコードが置いてあるので、これを使うだけでも動作確認はできる。
しかし、このコードだとユーザが自分のアカウントを入力しないといけない。実現したかったのは共通のアカウントを使っての動画投稿(いちいちアカウントを入力しない)。
以下、実際のコードです。これを実行するとファイルを参照するフォームが表示されるので、ファイル選択後→uploadボタンクリックで投稿できるはず。とりあえずはここまで。
<?php
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');$sDeveloperKey = 'AI39...'; //YouTubeAPIの開発コード
$sAccount = 'account'; //YouTubeアカウント名
$sPassword = 'password'; //YouTubeログインパスワード$sMovieTitle = 'My Test Movie'; //アップロードする動画のタイトル
$sDescription = 'My description'; //動画の説明文
$sTags = 'cars, funny'; //タグ
$sNextUrl = 'http://test.net/test.php'; //アップロード後に遷移する画面$authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$username = $sAccount,
$password = $sPassword,
$service = 'youtube',
$client = null,
$source = 'gwiki', // 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);// 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('Autos')->setScheme($categoryScheme),
$yt->newMediaCategory()->setText('mydevelopertag')->setScheme($developerTagScheme),
$yt->newMediaCategory()->setText('anotherdevelopertag')->setScheme($developerTagScheme)
);// set keywords, please note that they cannot contain white-space
$mediaGroup->keywords = $yt->newMediaKeywords()->setText($sTags);
$myVideoEntry->mediaGroup = $mediaGroup;$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$tokenValue = $tokenArray['token'];
$postUrl = $tokenArray['url'];// place to redirect user after upload
$nextUrl = $sNextUrl;// build the form
$form = '<form action="'. $postUrl .'?nexturl='. $nextUrl .
'" method="post" enctype="multipart/form-data">'.
'<input name="file" type="file"/>'.
'<input name="token" type="hidden" value="'. $tokenValue .'"/>'.
'<input value="Upload Video File" type="submit" />'.
'</form>';echo $form;
?>