Я боролся с этим в течение нескольких дней (фактически месяцев, но последние несколько дней почти безостановочно). Похоже, что многие также боролись с этим, и было бы неплохо получить окончательный ответ, на который могут опираться другие.
Я использую TwitterAPIExchange и первоначально написал несколько классов-обёрток, но когда они не работали (те же результаты - твитят сообщение, но не изображение), я написал отдельный минимальный пример (см. Ниже).
Это будет твитнуть статус, но не изображение. Почему?
Есть идеи / предложения?
ОБНОВЛЕНИЕ: я также попытался загрузить "чанкинг" (рекомендуемый метод загрузки изображений) с тем же результатом. Начало ответа от загрузки:
string (2462) "{" creat_at ":" Mon Sep 03 10:27:39 +0000 2018 "," id ": 1036561354113437696," id_str ":" 1036561354113437696 "," text ":" Test Tweet - Delete me "," усеченный ": false," entity ": {" hashtags ": []," symbols ": []," user_mentions ............ "
Обратите внимание, что media_id (1036561350065971201) не отображается в ответе. Это правильно? Означает ли это, что при вызове твита игнорируется параметр «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 />";
}