1

次の方法で動画をアップロードしたい:

  1. ファイルをサーバーにアップロードするだけです(いつものように)
  2. サーバー側の Yii アプリケーションがそのビデオを取得し、youTube の特別なアカウントから Youtube にアップロードします。

私は何を持っていますか:

  • 私の YouTube (google) アカウント名とメールアドレス。「名前」または「name@gmail.com」
  • 自分のパスワード
  • Google の「製品ダッシュボード」で見つけた開発者キー
  • 「myapp」という名前のアプリケーションの名前:

製品ダッシュボード: myapp

そのため、Google でいくつかのドキュメントを読み、ClientLogin 認証タイプを使用するのが最善の方法であると判断しました。これは、使用するアカウントが 1 つしかなく、必要なデータがすべて揃っているためです。ZendFramework の GData の例を見つけて、Yii アプリケーションにインポートしました。

/upload ディレクトリから 1 つの動画をアップロードして動作することをテストするためだけに、コードを特別に単純化しました。YouTube アカウントに動画がアップロードされているはずです。もちろん、ビデオはありませんが、ここにいます :-) アクションの完全なコードは以下のとおりです。

Yii::import('application.vendors.*');
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

$yt_user = 'myYTname';
$yt_pass = 'myYTpass';
$yt_source = 'myapp';
$yt_api_key = 'veryVERYlongKEYhere';

$authenticationURL= 'https://www.google.com/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
    $username = $yt_user,
    $password = $yt_pass,
    $service = 'youtube',
    $client = null,
    $source = $yt_source,
    $loginToken = null,
    $loginCaptcha = null,
    $authenticationURL
);
$yt = new Zend_Gdata_YouTube($httpClient, $yt_source, null, $yt_api_key);
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$filesource = $yt->newMediaFileSource(Yii::getpathOfAlias('webroot').'/upload/videos/video.mp4');
$filesource->setContentType('video/mp4');
$filesource->setSlug('video.mp4');
$myVideoEntry->setMediaSource($filesource);
$myVideoEntry->setVideoTitle('My Test Movie');
$myVideoEntry->setVideoDescription('My Test Movie description');
$myVideoEntry->setVideoCategory('Autos');
$myVideoEntry->SetVideoTags('cars, funny');
$myVideoEntry->setVideoDeveloperTags(array('mydevtag', 'anotherdevtag'));

$uploadUrl = "http://uploads.gdata.youtube.com/feeds/api/users/{$yt_user}/uploads";
try {
    $newEntry = $yt->insertEntry($myVideoEntry, $uploadUrl, 'Zend_Gdata_YouTube_VideoEntry');
} catch (Zend_Gdata_App_HttpException $httpException) {
    echo $httpException->getRawResponseBody();
} catch (Zend_Gdata_App_Exception $e) {
    echo $e->getMessage();
}

ご覧のとおり、公式の例から多くのデフォルト コードがあります。しかし、うまくいきません。誰もエコーは私に情報を示しません。しかし、try-catch を削除すると、エラーが発生しました。

Zend_Gdata_App_HttpException
Read timed out after 10 seconds 
4

1 に答える 1

0

したがって、この問題は自分で解決できます :) まず第一に、localhost からアップロードしようとしないでください。次に、私の場合、開発キーを言わなかったというエラーが発生しました。したがって、同じエラーが発生した場合は、これを変更してみてください。

    $newEntry = $yt->insertEntry($myVideoEntry, $uploadUrl, 'Zend_Gdata_YouTube_VideoEntry');

4 番目のパラメータを追加する - 追加のヘッダー:

$yt->insertEntry($myVideoEntry, $uploadUrl, 'Zend_Gdata_YouTube_VideoEntry', array(
    'X-GData-Key' => 'key=yourBIGbigBIGdeveloperKEYhere'
));

頑張って、YouTube API を楽しんでください!

于 2012-07-03T14:04:20.073 に答える