TwitterAPIExchange: статус твита работает, но не с изображением - PullRequest
0 голосов
/ 02 сентября 2018

Я боролся с этим в течение нескольких дней (фактически месяцев, но последние несколько дней почти безостановочно). Похоже, что многие также боролись с этим, и было бы неплохо получить окончательный ответ, на который могут опираться другие.

Я использую 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 />";
}
...