Опубликовать статус + изображение с TwitterAPIExchange на Twitter

У меня есть следующий рабочий код, код просто публикует статус и изображение о моей странице Twitter.

require_once('TwitterAPIExchange.php'); $settings = array( 'oauth_access_token' => "xxx", 'oauth_access_token_secret' => "xxx", 'consumer_key' => "xxx", 'consumer_secret' => "xxx" ); $url = "https://api.twitter.com/1.1/statuses/update_with_media.json"; $requestMethod = "POST"; $tweetmsg = $_POST['post_text']; $twimage = "Images/twitter-icon.png"; $postfields = array( 'status' => $tweetmsg, 'media[]' => "@{$twimage}" ); try { $twitter = new TwitterAPIExchange($settings); $twitter->buildOauth($url, $requestMethod) ->setPostfields($postfields) ->performRequest(); echo "Success, you just tweeted!"; } catch (Exception $ex) { echo $ex->getMessage(); } } 

Изображение прямо сейчас помещено в папку (Images), которая находится в моем проекте. Я хочу, чтобы пользователь смог выбрать изображение с его собственного компьютера, написать decription и затем чирикать его. У меня есть следующая простая форма HTML для публикации:

 <form method="post" action="index.php"> <textarea id="post_text" name="post_text" type="text"></textarea> <input type="file" name="post_file" id="post_file" multiple accept="image/*" value="Choose a file"/> <button type="submit" id="btn_submit">Submit</button> </from> 

Так у вас, ребята, есть подсказки или руководства, которые могли бы помочь мне решить мою проблему? Я думаю о правильном пути или могу ли я решить проблему по-другому? Благодаря!

В принятом ответе используется обесцененная конечная точка API https://dev.twitter.com/rest/reference/post/statuses/update_with_media

Вот рабочее решение:

 // send image to Twitter first $url = 'https://upload.twitter.com/1.1/media/upload.json'; $requestMethod = 'POST'; $image = 'full/path/to/image.jpg'; $postfields = array( 'media' => base64_encode(file_get_contents($image)) ); $response = $twitter->buildOauth($url, $requestMethod) ->setPostfields($postfields) ->performRequest(); // get the media_id from the API return $media_id = json_decode($response)->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' => 'My amazing tweet' 'media_ids' => $media_id, ); $response = $twitter->buildOauth($url, $requestMethod) ->setPostfields($postfields) ->performRequest(); 

Вы должны реализовать небольшую логику здесь. Теперь, нажав кнопку submit, выполните следующие действия: 1. Сохраните изображение в некоторой папке вашего проекта (см. Приведенный ниже код для сохранения изображения в папке)

upload_file.php // загрузка кода файла здесь

2. Сохраните текст и загрузите имя изображения в базу данных. 3. Теперь у вас есть изображения в папке с изображениями … и у вас также есть имя изображения и соответствующее сообщение в вашей базе данных.

4. $ tweetmsg = $ _POST ['post_text']; $ twimage = "Images / twitter-icon.png"; //до этого

  retrive the last inserted row and fetch message and image name $tweetmsg = $row['msg']; $image = $row['image_name']; $twimage = "Images/".$image; 

Я надеюсь, что это будет работать для вас .. Спасибо

Это было намного проще, чем я думал, я просто использовал $ _FILES для хранения изображения в переменной, чтобы использовать его в массиве $ postfields.

 $url_media = "https://api.twitter.com/1.1/statuses/update_with_media.json"; $requestMethod = "POST"; $tweetmsg = $_POST['post_description']; $twimg = $_FILES['pictureFile']['tmp_name']; $postfields = array( 'status' => $tweetmsg, 'media[]' => '@' . $twimg ); try { $twitter = new TwitterAPIExchange($settings); $twitter->buildOauth($url_media, $requestMethod) ->setPostfields($postfields) ->performRequest(); echo "You just tweeted with an image"; } catch (Exception $ex) { echo $ex->getMessage(); }