所以我将 Twitter API 集成到一个应用程序中,我需要它能够发布图像、视频和 gif 动画。
我正在使用 php5.6 和 J7mbo/twitter-api-php 包。
到目前为止,我的代码如下:
$file = fopen(realpath('../path/' . $row['path']), 'rb');
$size = fstat($file)['size'];
$mime_type = mime_content_type($row['path']);
var_dump($size);
var_dump($mime_type);
$upload_url = 'https://upload.twitter.com/1.1/media/upload.json';
$requestMethod = 'POST';
$postfields = array(
"command" => "INIT",
'media_type' => $mime_type,
// 'media_category' => 'tweet_video',
'total_bytes' => $size
);
$initResult = json_decode($twitter->buildOauth($upload_url, $requestMethod)
->setPostfields($postfields)
->performRequest());
$mediaId = $initResult->media_id_string;
$segmentId = 0;
while (!feof($file)) {
$chunk = fread($file, 100000);
echo strlen($chunk);
$postfields = array(
"command" => "APPEND",
"media_id" => $mediaId,
"segment_index" => $segmentId,
"media" => $chunk
);
//var_dump($chunk);
$appendResult = $twitter->buildOauth($upload_url, $requestMethod)
->setPostfields($postfields)
->performRequest();
echo('chunk: '. $segmentId);
var_dump($appendResult);
$segmentId++;
}
echo ('done uploading');
fclose($file);
$postfields = array(
"command" => "FINALIZE",
"media_id" => $mediaId
);
$finResult = $twitter->buildOauth($upload_url, $requestMethod)
->setPostfields($postfields)
->performRequest();
var_dump($finResult);
Run Code Online (Sandbox Code Playgroud)
无论我的块有多大或多小,FINALIZE 请求的结果总是:
{"request":"\/1.1\/media\/upload.json","error":"Segments do not add up to provided total file size."}"
Run Code Online (Sandbox Code Playgroud)
最令人沮丧的是,在我的测试中,$size 是 273872,无论我如何分割块,它们的总长度总是 100% 保证为 273872。
这里到底发生了什么?我什至如何去调试这个?
INIT 有效。附加返回 "" 但根据 twitter 的文档(https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload-append)这是完全正确的。不过,我不知道如何提取响应状态,所以我还不确定。
PS:我很久没有使用任何社交网络 api 我不完全知道有什么可以告诉你的,请请求你希望我添加到这篇文章中的任何内容。
编辑:我用 curl 重新制作了这个。我有完全相同的结果。我想“也许它正在处理或其他什么”,所以我做了两个测试:
{
["errors"]=>
array(1) {
[0]=>
array(2) {
["message"]=>
string(31) "Sorry, that page does not exist"
["code"]=>
int(34)
}
}
}
Run Code Online (Sandbox Code Playgroud)
不知道我是否会用这个图书馆得到它。明天试试。
小智 0
那是几年后的事了,但是……
你应该对你的块进行base64编码
"media" => base64_encode($chunk)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
328 次 |
最近记录: |