TwitterAPIExchange:鸣叫状态有效,但不适用于图像

时间:2018-09-02 08:54:22

标签: php twitter twitter-oauth

我已经为此苦苦挣扎了好几天(实际上是几个月,但最近几天几乎不停地)。似乎许多人也在为此而苦苦挣扎,有一个可以被他人借鉴的明确答案会很好。

我使用的是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 />";
}

0 个答案:

没有答案