すべてのコードが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全般についてです。 残りのタスクは完全に解決可能であり、ドキュメントを読むと簡単に見えます。