私はoauth 2.0 youtubeビデオアップロードを構築することができましたが、ビデオをアップロードするたびに無効なリクエストでHTTP 400エラーが発生します。Youtube Oauth 2.0 APIビデオアップロード失敗
しかし、奇妙なことは、動画がYouTubeにアップロードされていることです。失敗しました(アップロードが中止されました)。
私は自分のコードをすべて自分で構築していますので、フレームワークを使用していないため、Googleにはまだoauth 2.0がありません。
また、私はコメントを送ってくれました。物事....唯一の問題は、ビデオのアップロード自体です。
マイコード:
public function uploadVideo($video, $title, $description, $category, $keywords) {
$url = 'http://uploads.gdata.youtube.com/feeds/api/users/FacebookDevelopersIL/uploads';
$boundary = uniqid();
$accessToken = $this->refreshAccessToken("13", "11313", 'REFRESHTOKEN');
$xmlString = "<?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'>".$title."</media:title><media:description type='plain'>".$description."</media:description> <media:category scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>".$category."</media:category><media:keywords>".$keywords."</media:keywords></media:group></entry>";
$videoData = file_get_contents($video);
$headers = array(
'POST /feeds/api/users/FacebookDevelopersIL/uploads HTTP/1.1',
'Host: uploads.gdata.youtube.com',
'Authorization: Bearer '.$accessToken,
'GData-Version: 2',
'X-GData-Key: key='.YOUTUBE_SRM_DEVELOPER_KEY,
'Slug: IMG_0047.mp4',
'Content-Type: multipart/related; boundary='.$boundary,
'Content-Length:'.strlen($videoData),
'Connection: close'
);
$postData = "--".$boundary . "\r\n"
."Content-Type: application/atom+xml; charset=UTF-8\r\n\r\n"
.$xmlString . "\r\n"
."--".$boundary . "\r\n"
."Content-Type: video/mp4\r\n"
."Content-Transfer-Encoding: binary\r\n\r\n"
.$videoData . "\r\n"
."--".$boundary . "--";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
$response = curl_exec($ch);
curl_close($ch);
Trace::dump($response); }
エラーイム取得:HTTP/1.1 400不正な要求サーバー:2012年5月7日午後06時16分42秒上に構築されたHTTPのアップロードサーバー(1336439802)のContent-Type:text/htmlの; charset = UTF-8 X-GUploader-UploadID:AEnB2Uq7cHcf6rS4bcamu18ChAF3gnKJqsF6U_dk2qB4WR9GhAoTL_-iUejitgead-Gh-1fpJcke1z68TAxoopS2vYiGmCW69A日付:2012年5月10日11:55:24 GMTプラグマ:キャッシュなし期限:金曜日、1990年1月1日00:00:00 GMTキャッシュ-control:キャッシュなし、無店舗、-再検証しなければならないのContent-Length:15接続:近い
無効な要求みんなありがとう
!
は今(あなたのコードで)この問題を取得イム: 不正な形式のマルチポストを.....それは何を意味するのでしょうか? – Avihay
$ content変数のテキストが正しくアセンブルされていないため、エラーと思われます。私はLinuxホストを使用しています.Windowsホストの場合は、行末が異なり、問題を引き起こす可能性があります。 file_get_contents()が$ video_fileが指すファイルを読み取ることができることを確認しましたか?関数宣言の上のコメントにはリンクがあり、完成した$コンテンツの見た目と必要なヘッダーの例を示しています。たぶんそれとあなたの持っているものをよく比較すれば、その問題が明らかになるでしょう。 – Carl
carl、debianホストを使っているので、osは問題ではありません:)そして私はファイルの内容を取得していることを確認しました、あなたが組み立てた関数のようにすべてがうまくいっています....これは全く変です。 .. – Avihay