YouTube API経由で動画をアップロードする

しばらく前、職場で、YouTubeを使用して顧客のサイトの作業を調査し、構成する必要がありました。その後、スタートアップでは、ほぼ同じ知識とスキルを適用するようになりました。 この短い投稿では、youtube apiを使用してビデオファイルをダウンロードする方法を説明します。



投稿で提供されているコードにあまり注意を払ってはならないことをすぐに予約します。これはこの投稿専用に書かれたものであり、理解を深めるためにより多くの意味的な負荷がかかります。 PHPの方言のすべてのコード:)



ステップ1は、YouTubeサービスの通常ユーザーとしてあなたを登録することです。 もちろん、既存のログインとパスワードのペアを使用することもできますが、便宜上、ダウンロードしたビデオがブロードキャストされるチャンネルに新しいユーザーを登録する方が良いと思われます。



ステップ2は、 http://code.google.com/apis/youtube/dashboard/ページにアクセスして、開発者キーを取得することから始まります。 指定されたページで、アプリケーションの名前、リクエストを送信するサイトのURL、および説明を指定する必要があります。 必要なデータを入力すると、システムはキーを生成します。これは、AI39si5b05QIsObFU2_BSrPvyO6zC9Eu14BnDzKkhhIqHebS4PqE8o2AKigjP8gCaYTFblB8bpj8CkIWAU5qvdwのような文字のシーケンスです。



YouTubeデータを送信するとき、X-GData-Clientの2つの主要なパラメーターを含む:<client_id>、ここで<client_id>はアプリケーションの名前、X-GData-Key:key = <developer_key>を渡すことに注意してくださいここで、ご想像のとおり、<developer_key>は生成されたキーです。 この段階で、準備が完了し、アプリケーションの構築が開始されました。



ステップ3は、開発者のドキュメント( http://code.google.com/intl/en/apis/youtube/developers_guide_protocol.html )の調査から始まります。ドキュメントの構造を理解することは非常に重要です。最初は複雑に見えるかもしれません。 何をどこで理解したら、問題は消えます。



そのため、どこでもどこでも使用される定数がいくつかあります。これらは次のとおりです。



これらの定数をどのように、どこに保存するか-わからない、おそらく何らかの構成ファイルになるか、DEFINEによって宣言された定数はポイントではないが、このデータはいつでもどこでも必要なので、データベース、私は最善の解決策ではないと思います。



正しい操作を開始するには、別の定数の値-認証トークンを取得する必要があります。 Googleでは、Auth SubとClientLoginの2種類の認証を提供しています。 後者の方法は、このメモのフレームワークで考慮されます。これにより、後続のリクエストに関連付けられたユーザーアカウントを特定できるため、後続のリクエストでログインとパスワードを転送する必要があります。



認証トークンを一意に識別して提供できるURL www.google.com/youtube/accounts/ClientLoginにデータを送信する必要があります。 以下に小さなコードを示しますが、curlを使用したい人にとってはこのコードがよりエレガントになることは明らかですが、最初の段階ではコードは参照専用であることを警告しました。



$eq = 'accountType=HOSTED_OR_GOOGLE&Email=YOUTUBE_EMAIL&Passwd=YOUTUBE_PASS&service=youtube&source=API_NAME;

if ($fp = fsockopen ("ssl://www.google.com", 443, $errno, $errstr, 20))

{

$request ="POST /youtube/accounts/ClientLogin HTTP/1.0\r\n";

$request.="Host: www.google.com\r\n";

$request.="Content-Type:application/x-www-form-urlencoded\r\n";

$request.="Content-Length: ".strlen($eq)."\r\n";

$request.="\r\n\r\n";

$request.=$eq;

fwrite($fp,$request,strlen($request));

while (!feof($fp))

$response.=fread($fp,8192);

fclose($fp);

}

preg_match("!(.*?)Auth=(.*?)\n!si",$response,$ok);

AUTH_TOKEN = $ok[2];









そのため、現在確認しているように、Googleから肯定的な応答を受け取りました。ここでは、とりわけ、AUTH_TOKEN定数に格納されている認証トークンが提供されました。 このマーカーは時々更新する必要があります-残念ながら、マーカーが有効であると見なされる期間を見つけられなかったため、新しいマーカーを取得します。



これで、YouTubeと完全に連携する準備が整いました。



ステップ4-ビデオをダウンロードします。 ビデオのアップロードは、正式には2つのコンポーネントで構成されています。データを送信してからダウンロードURLを取得することと、実際のビデオアップロードです。 実際に動画を送信する価値のある一意のダウンロードURLを取得するには、名前、説明、タグ、カテゴリなど、動画を説明するデータをサーバーに送信する必要があります。



ダウンロード、編集、削除、チャンネルのコンテンツの受信などのためにデータを送信する必要があるメインURLはgdata.youtube.comです。 すべてのデータはPOSTメソッドを使用して送信されます。 リクエストを作成します:



$data = "<?xml version='1.0'?>

<entry xmlns='http://www.w3.org/2005/Atom'

xmlns:media='http://search.yahoo.com/mrss/'

xmlns:yt='http://gdata.youtube.com/schemas/2007'>

<media:group>

<media:title type='plain'>_</media:title>

<media:description type='plain'>_</media:description>

<media:category scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>_</media:category>

<media:keywords>_</media:keywords>

</media:group>





";





その後、このリクエストを送信します。



if ($fp = fsockopen ("gdata.youtube.com", 80, $errno, $errstr, 20))

{

$request ="POST /action/GetUploadToken HTTP/1.1\r\n";

$request.="Host: gdata.youtube.com\r\n";

$request.="Content-Type: application/atom+xml; charset=UTF-8\r\n";

$request.="Content-Length: ".strlen($data)."\r\n";

$request .="Authorization: GoogleLogin auth=AUTH_TOKEN\r\n";

$request.="X-GData-Client: API_NAME \r\n";

$request.="X-GData-Key: key=API_KEY \r\n";



$request.="\r\n";

$request.=$data."\r\n";

socket_set_timeout($fp, 10);



fputs($fp,$request,strlen($request));

$response = fread($fp,3280);

fclose($fp);









サーバーから受信したデータは、変数$応答に格納されました。 答えはatom / xmlの形式で表示されます。ここでは、2つのタグに最も関心があります。-ダウンロードURLとダウンロードトークンが含まれています。 次のような必要なデータを取得できます。



preg_match("!(.*?)!si",$response, $url);

preg_match("!(.*?)!si",$response, $token);








その後、動画をアップロードするためのフォームを作成します。 次のようになります。

<form action="$url[1]?nexturl=URL_______" method="post" enctype="multipart/form-data">

<input type="file" name="file"/>

<input type="hidden" name="token" value="$token[1] " />

<input type="submit" value="go" />

</form>











ダウンロード後、成功した場合、YouTubeサーバーはユーザーのブラウザをアドレスバーに一意のYouTubeビデオコードを使用してsite_to_transfer_data_after_loadingのURL_にリダイレクトします。



さて、これですべてです。 この記事では、エラー処理のトピックについては意図的に取り上げませんでしたが、これらはすべてドキュメントに記載されているか、経験的に知られています。 次回は、ダウンロードした動画の確認、編集、削除についてお話します。



All Articles