我已经为此苦苦挣扎了好几天(实际上是几个月,但最近几天几乎不停地)。似乎许多人也在为此而苦苦挣扎,有一个可以被他人借鉴的明确答案会很好。
我使用的是TwitterAPIExchange,最初编写了一些包装器类,但是当它们不起作用时(相同的结果-发送消息,而不是图像),我编写了一个独立的最小示例(请参见下文)。
这将鸣叫状态,但不会鸣叫图像。为什么?
有什么想法/建议吗?
更新:我也尝试了“分块”上传(建议的图像上传方法),结果相同。上传响应的开始是:
string(2462)“ {” created_at“:”周一9月3日10:27:39 +0000 2018“,” id“:1036561354113437696,” id_str“:” 1036561354113437696“,” text“:”测试推文-删除我”,“截断”:false,“实体”:{“ hashtags”:[],“符号”:[],“ user_mentions ............”
请注意,media_id(1036561350065971201)没有出现在响应中。那正确吗?这是否表明对tweet的调用忽略了“ media-ids”参数?请注意,该鸣叫仍会出现,因此可以正常工作。
require_once($_SERVER['DOCUMENT_ROOT'] . '/php/classes/' . 'TwitterAPIExchange.php');
$settings = array(
'oauth_access_token' => "XXX",
'oauth_access_token_secret' => "XXX",
'consumer_key' => "XXX",
'consumer_secret' => "XXX"
);
// Upload the image
$url = 'https://upload.twitter.com/1.1/media/upload.json';
$requestMethod = 'POST';
$image = $_SERVER['DOCUMENT_ROOT'] . '/soundbites/images/gxk.jpg';
display($image);
$postfields = array('media_data' => base64_encode(file_get_contents($image)));
var_dump($postfields);
$twitter = new TwitterAPIExchange($settings);
$response = $twitter->buildOauth($url, $requestMethod)
->setPostfields($postfields)
->performRequest();
var_dump($response);
// get the media_id from the API return
$media_id = json_decode($response)->media_id;
display("Media_id: " . $media_id);
// .... then send the Tweet along with the media ID
$url = 'https://api.twitter.com/1.1/statuses/update.json';
$requestMethod = 'POST';
$postfields = array(
'status' => 'Test Wteet - Delete me',
'media_ids' => $media_id,
);
var_dump($postfields);
$response = $twitter->buildOauth($url, $requestMethod)
->setPostfields($postfields)
->performRequest();
var_dump($response);
function display ($msg = "No custom message", $fn = "No fn defined"){
echo $msg . "<br />";
}