YouTube APIの続き:メタデータの編集、削除、取得

数日前、システムAPIを介してYouTubeに動画をアップロードすることに関する投稿を公開しました。 今日は、既にダウンロードしたビデオの編集、ステータスの取得、削除について説明する続編を紹介します。



すべてのコードがPHPの特定の方言で提供されており、ニーズに合わせて簡単に変換およびカスタマイズできることを、もう一度注目する価値があります。 前回の投稿では、個人メール、ICQ、および求人への多数の応答が発生したため、継続は適切であると思います。



最初のポイントは、 iexxがコメントで言及したという事実に言及します。 つまり、 Zend_Gdataクラスが言及されました 。 このクラスは、説明したすべての問題を本当に解決します。私の投稿では、YouTube APIの機能を示し、動作するコードの例を示しています。



ドキュメントでは、ほとんどすべてのリクエストがgdata.youtube.comハンドラーに送信され、必要なアクション、データ変更の送信方法に応じて-これはPUT、POST、DELETE、またはGETになります。これに特に注意することをお勧めします。



誰もが知っているように、はい、前の投稿でこれを言及しました。YouTubeに投稿された各ビデオは、ビデオがアップロードされた直後に、eTpTy2Kvj4oなどの独自の11桁のコードを取得します。 このコードを知っていると、サーバーからビデオに関する必要な情報を取得できます。 ダウンロードしたビデオはすべて、ビデオホスティングサーバーでエンコード手順を実行します。この操作を完了するのにかかる時間は、ホスティングサーバーの負荷とビデオの実際のサイズによって異なります。



ビデオがエンコードされて適切なステータスを受け取るまで、明白な理由により、ビデオを編集したり、投稿されたビデオに関するメタデータを受け取ったりすることはできません。

動画のメタデータとステータス値を取得するには、 gdata.youtube.com / feeds / api / videos / VIDEOページでGETに連絡する必要があります。たとえば、 http//gdata.youtube.com/feeds/api/videos/eTpTy2Kvj4o (ブラウザで見てください)。 サーバーが404エラーを返した場合、これはビデオが存在しないか、まだエンコードされていないことを意味します。 YouTubeアカウントで動画を見ることができる場合もありますが、GDataインターフェースではまだ利用できません-それは起こります。 15〜20分ですべてが所定の位置に収まります。



サーバーの応答は、Atom形式のXMLの形式で表示されます(上記のリンクを参照)。これから、タイトル、作成者の名前、ビデオサイズ、タグ、カテゴリなどのメタデータを抽出し、サムネイルの配列を取得できます。 つまり、ビデオデータの取得は、XMLを解析するという簡単なタスクに帰着します。



ビデオ編集手順は、ダウンロードする前にビデオに関するメタデータを保存する手順と非常に似ています。 最初に、名前、説明、カテゴリ、タグをリストするXMLを作成します。



$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'>$name</media:title>

<media:description type='plain'>".$descr."</media:description>

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

<media:keywords>".$tags."</media:keywords>

</media:group>





";





その後、PUTメソッドを使用して、このピースをgdata.youtube.com / feeds / api / users / YOUTUBE_USERNAME / uploads / VIDEO CODEに送信します。たとえば、次のようにします。



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

{

$request ="PUT /feeds/api/users/YOUTUBE_USERNAME/uploads/_" 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));

}









すべてのデータが送信されました! 繰り返しますが、私は意図的にエラー処理の問題を回避し、プログラマの良心に任せます。 API_NAME、API_KEYなどの値-最後の投稿を参照してください。



そして最後に、ビデオの削除。 ここでも、すべてが非常に単純で、「データ配信」メソッドのみが変更されています。今回はDELETEです。 この場合のコードは次のようになります。



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

{

$request ="DELETE /feeds/api/users/YOUTUBE_USERNAME/uploads/_" HTTP/1.1\r\n";

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

$request.="Content-Type: application/atom+xml; charset=UTF-8\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";

socket_set_timeout($fp, 10);



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

fclose($fp);

}









さて、実際に私が特に今日お話ししたかったのはこれだけで、YouTube API全般についてです。 残りのタスクは完全に解決可能であり、ドキュメントを読むと簡単に見えます。



All Articles