2011-06-23 27 views
4

YouTube APIを使用して動画をアップロードしようとすると、「無効なリクエスト」というエラーが表示されます。Youtube API(無効なリクエスト)に問題がありますか?

BUT!

「ビデオ」の代わりに「画像」をアップロードすると、ステータス「200」とビデオIDが返されます。

なぜビデオをアップロードできないのですか?

$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]; 

$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'>test</media:title> 
    <media:description type='plain'>test</media:description> 
    <media:category scheme='http://gdata.youtube.com/schema /2007/categories.cat'>People</media:category> 
    <media:keywords>toast, wedding</media:keywords> 
    </media:group> 
</entry> "; 

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); 
} 


preg_match('|<url>(.*)</url>|Uis', $response, $url); 
preg_match('|<token>(.*)</token>|Uis', $response, $token); 

print " 
    <form action='".$url[1]."?nexturl=http%3A%2F%2Fwww.google.com' 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> "; 
+1

なぜあなたはこれを行うには、YouTubeのPHPクライアントライブラリを使用しないでください? –

+0

私はZENDライブラリを使用していますが、この変形は機能しません。 私はこのエラーを取得する: >致命的なエラー: >メッセージでキャッチされない例外 > 'Zend_Gdata_App_HttpExceptionは' '予想される応答コード200、 > = 400 エンコーディング= 'をUTF- 8 '> YT:?検証required<場所 >タイプ=' のxpath '>メディア:グループ/メディア:タイトル/テキスト()' > 中> /ホーム/スイッチオフ/データ/ WWW /online-gid.ru/YouTubeAPI/Zend/Gdata/App.php:700 >スタックトレース: #0 > /home/switchoff/data/www/online-gid.ru/YouTubeAPI/Zend/Gdata.php(219): – Nick

+0

> Zend_Gdata_App-> performHttpRequest( 'POST'、 'http://gdata.yo。 .. '、配列、 >' ' application/ato ... '、NULL)#1 > /home/switchoff/data/www/online-gid.ru /youTubeAPI/Zend/Gdata/App.php(886): > Zend_Gdata-> performHttpRequest( 'POST'、 > 'http://gdata.yo ...'、Array、 > '' application/ato ... ')#2 > /home/switchoff/data/www/online-gid.ru/YouTubeAPI/Zend/Gdata/YouTube.php(704): > Zend_Gdata_App-> post(Object(Zend_Gdata_YouTube_VideoEntry)、 > 'http://gdata.yo ...')#3 >/home /switchoff/data/www/online-gid.ru/YouTubeAPI/test.php(56): – Nick

答えて

2

ハハハ!!ほぼ1年後、私はその修正を見つけたと思う。

あなたのラインが "/スキーマ" の後と "/ 2007" の前にスペースが含まれている

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

それは

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

の下で第二のコードブロックを参照してくださいする必要があります:https://developers.google.com/youtube/2.0/developers_guide_protocol_direct_uploading#Sending_a_Direct_Upload_API_Request

関連する問題