当我尝试使用youtube API上传视频时,我得到错误"无效请求"。
但是!
当我上传任何"图像"而不是"视频"时,它会返回状态"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.0rn";
$request.="Host: www.google.comrn";
$request.="Content-Type:application/x-www-form-urlencodedrn";
$request.="Content-Length: ".strlen($eq)."rn";
$request.="rnrn";
$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.1rn";
$request.="Host: gdata.youtube.comrn";
$request.="Content-Type: application/atom+xml; charset=UTF-8rn";
$request.="Content-Length: ".strlen($data)."rn";
$request .="Authorization: GoogleLogin auth=".$AUTH_TOKEN."rn";
$request.="X-GData-Client: ".$API_NAME." rn";
$request.="X-GData-Key: key=".$API_KEY." rn";
$request.="rn";
$request.=$data."rn";
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> ";
哈哈哈!!差不多一年后,我想我找到了解决办法。
您的行在"/schema"之后和"/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>
请参阅下面的第2个代码块:https://developers.google.com/youtube/2.0/developers_guide_protocol_direct_uploading#Sending_a_Direct_Upload_API_Request