我一直在试图将视频上传到通过直接上传YouTube的API。 我终于破解了OAuth的过程,我有一个有效的令牌。 我真的只需要做两件事情与YouTube,验证和上传。 我不是浏览,或者使用任何其他功能。 用户视频上传到这个网站,我送他们到YouTube上播放。
我觉得我对我自己来的方式80-90%在这里,所以我不想放弃这一点,并使用Zend库,谷歌提供。
问题:当我发送请求我得到这样的回应:
HTTP/1.1 413 Request Entity Too Large
Content-Type: text/html; charset=UTF-8
Content-Length: 171
Date: Thu, 18 Apr 2013 18:33:22 GMT
Expires: Thu, 18 Apr 2013 18:33:22 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Connection: close
如果我打开的警告,我也得到一个破裂的管道警告,这可能只是想通过封闭的上传数据的代码/拒绝连接。
我的要求是这样的:
POST /feeds/api/users/default/uploads HTTP/1.1
Host: gdata.youtube.com Connection: close
User-Agent: PHP Accept-encoding: identity
Authorization: Bearer <TOKEN IS HERE>
GData-Version: 2.0
X-GData-Key: key=<MYKEYISHERE>
Slug: throwing_can.mp4
Content-Type: multipart/related; boundary="5170429d1b193"
Content-Length: 3920610
随着文件本身分块并写入流。
function ytapi_write_file($handle, $path, $chunksize = 8192){
$filehandle = fopen($path, 'r');
while(!feof($filehandle)){
fwrite($handle, fread($filehandle, $chunksize));
}
fclose($filehandle);
$filehandle = null;
}
function ytapi_write($handle, $request){
fwrite($handle, $request);
return $request;
}
像这样。
ytapi_write($handle, $start); //This writes the header.
ytapi_write_file($handle, $path, 8192); //This writes the file raw/binary.
ytapi_write($handle, $end); //This writes the final boundary.
另外,我用这个标题信息:
$_header = array(
'Host'=>'gdata.youtube.com',
'Connection'=>'close',
'User-Agent'=>'PHP',
'Accept-encoding'=>'identity'
);
任何想法,我做错了什么? 如果需要,我可以提供更多的信息。 我上传的文件多一点3MB,就是坐在问题的服务器上的文件。 我已经验证的位置是否正确。
UPDATE
更改为uploads.gdata.youtube.com
现在,我得到这个错误信息:
Host: uploads.gdata.youtube.com
Connection: close
User-Agent: PHP
Accept-encoding: identity
tcp://uploads.gdata.youtube.com:80HTTP/1.1 400 Bad Request
Server: HTTP Upload Server Built on Apr 8 2013 13:06:58 (1365451618)
X-GData-User-Country: US
Content-Type: application/vnd.google.gdata.error+xml
X-GUploader-UploadID: <SOME ID>
Date: Thu, 18 Apr 2013 19:42:14 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate
Content-Length: 228
Connection: close