我正在使用图书馆tmhOAuth在应用程序中发布到Twitter,我已经实现了上传图片,但我在实现视频上传时遇到了麻烦.
这是我用来上传图片的电话,与图像完美配合.
$temp = '@upload/'.$name.';type='.$_FILES['img']['type'].';filename='.$name;
$media = $tmhOAuth->request('POST', 'https://upload.twitter.com/1.1/media/upload.json', array('media' => $temp), true, true);
Run Code Online (Sandbox Code Playgroud)
所以我认为视频可能是相同的,但我得到了错误
stdClass Object ( [request] => /1.1/media/upload.json [error] => media type unrecognized. )
Run Code Online (Sandbox Code Playgroud)
我相信我必须根据Twitter API进行3次单独调用,所以我尝试了这个
$media = $tmhOAuth->request('POST', 'https://upload.twitter.com/1.1/media/upload.json?command=INIT&media_type=video/mp4&total_bytes='.$_FILES['img']['size'], array('media' => $temp), true, true);
$media_id = json_decode($tmhOAuth->response['response'])->media_id_string;
$media = $tmhOAuth->request('POST', 'https://upload.twitter.com/1.1/media/upload.json?command=APPEND&media_id='.$media_id.'&segment_index=0', array('media' => $temp), true, true);
$media = $tmhOAuth->request('POST', 'https://upload.twitter.com/1.1/media/upload.json?command=FINALIZE&media_id='.$media_id, array('media' => $temp), true, true);
Run Code Online (Sandbox Code Playgroud)
但是我对所有3个电话都持续出现同样的错误
stdClass Object ( [request] => /1.1/media/upload.json [error] => media type unrecognized. )
Run Code Online (Sandbox Code Playgroud)
任何人都可以举例说明如何将视频上传到Twitter?我在网上找不到任何例子,这可能是不可能的.
小智 7
我有同样的问题.这就是我设法解决它的方法.首先,设置一个var,其中包含要上载的媒体的文件系统完整路径.
$media_path = '/PATH/TO/THE/file.mp4';
Run Code Online (Sandbox Code Playgroud)
然后实例化$ tmhOAuth并执行3个步骤:
$tmhOAuthUpload = new tmhOAuth();
Run Code Online (Sandbox Code Playgroud)
INIT:
$code = $tmhOAuthUpload->request(
'POST',
$tmhOAuthUpload->url('/1.1/media/upload.json'),
array(
"command" => "INIT",
"total_bytes" => (int)filesize($media_path),
'media_type' => 'video/mp4',
)
);
Run Code Online (Sandbox Code Playgroud)
检索Twitter返回的媒体ID
$results = json_decode($tmhOAuthUpload->response['response']);
$media_id = $results->media_id_string;
Run Code Online (Sandbox Code Playgroud)
APPEND:使用附加循环处理视频/媒体上传
$fp = fopen($media_path, 'r');
$segment_id = 0;
while (! feof($fp)) {
$chunk = fread($fp, 1048576); // 1MB per chunk for this sample
$tmhOAuthUpload->request(
'POST',
$tmhOAuthUpload->url('/1.1/media/upload.json'),
array(
"command" => "APPEND",
"media_id" => $media_id,
'media_data' => base64_encode($chunk),
"segment_index" => $segment_id
)
);
$segment_id++;
}
Run Code Online (Sandbox Code Playgroud)
最终结果:
$tmhOAuthUpload->request(
'POST',
$tmhOAuthUpload->url('/1.1/media/upload.json'),
array(
"command" => "FINALIZE",
"media_id" => $media_id,
)
);
Run Code Online (Sandbox Code Playgroud)
那时我能够发送我的推文:
$code = $tmhOAuth->request(
'POST',
$tmhOAuthUpload->url('1.1/statuses/update'),
array(
'media_ids' => $media_id,
'status' => $text,
),
true // use auth
);
Run Code Online (Sandbox Code Playgroud)
希望有所帮助
归档时间: |
|
查看次数: |
4266 次 |
最近记录: |