Upload images to Twitter using PHP

How can I upload an image to Twitter Wall using consumer_key and consumer_secret without logging in using PHP?

Please help me and thank you very much.

+6
source share
4 answers

Well, I get the answer, download Twitter Api for php and created one function.

 function image_upload(){ define( 'YOUR_CONSUMER_KEY' , 'your twitter app consumer key'); define( 'YOUR_CONSUMER_SECRET' , 'your twitter app consumer key secret'); require ('twitt/tmhOAuth.php'); require ('twitt/tmhUtilities.php'); $tmhOAuth = new tmhOAuth(array( 'consumer_key' => "YOUR_CONSUMER_KEY", 'consumer_secret' => "YOUR_CONSUMER_SECRET", 'user_token' => "YOUR_OAUTH_TOKEN", 'user_secret' => "YOUR_OAUTH_TOKEN_SECRET", )); $image = 'image.jpg'; $code = $tmhOAuth->request( 'POST','https://upload.twitter.com/1/statuses/update_with_media.json', array( 'media[]' => "@{$image};type=image/jpeg;filename={$image}", 'status' => 'message text written here', ), true, // use auth true // multipart ); if ($code == 200){ tmhUtilities::pr(json_decode($tmhOAuth->response['response'])); }else{ tmhUtilities::pr($tmhOAuth->response['response']); } return tmhUtilities; } 
+9
source

Well, your user must be logged in using OAuth with your APP, then you use the API to publish tweets. According to POST statuses / update and POST / update_with_media statuses , but I had problems sending the image (about a year ago they probably fixed it).

+3
source

You can use Oauth to allow you an application. I found this useful reference as it shows how to connect to the API and how to post messages on twitter. Using update_with_media should allow you to send messages with images

+2
source

update_with_media is deprecated, you should consider the following approach: https://dev.twitter.com/rest/public/uploading-media

Using the excellent hybridauth library and updating the Twitter.php setUserStatus function, follow these steps:

 /** * update user status * https://dev.twitter.com/rest/public/uploading-media-multiple-photos */ function setUserStatus( $status ) { if(is_array($status)) { $message = $status["message"]; $image_path = $status["image_path"]; } else { $message = $status; $image_path = null; } $media_id = null; # https://dev.twitter.com/rest/reference/get/help/configuration $twitter_photo_size_limit = 3145728; if($image_path!==null) { if(file_exists($image_path)) { if(filesize($image_path) < $twitter_photo_size_limit) { # Backup base_url $original_base_url = $this->api->api_base_url; # Need to change base_url for uploading media $this->api->api_base_url = "https://upload.twitter.com/1.1/"; # Call Twitter API media/upload.json $parameters = array('media' => base64_encode(file_get_contents($image_path)) ); $response = $this->api->post( 'media/upload.json', $parameters ); error_log("Twitter upload response : ".print_r($response, true)); # Restore base_url $this->api->api_base_url = $original_base_url; # Retrieve media_id from response if(isset($response->media_id)) { $media_id = $response->media_id; error_log("Twitter media_id : ".$media_id); } } else { error_log("Twitter does not accept files larger than ".$twitter_photo_size_limit.". Check ".$image_path); } } else { error_log("Can't send file ".$image_path." to Twitter cause does not exist ... "); } } if($media_id!==null) { $parameters = array( 'status' => $message, 'media_ids' => $media_id ); } else { $parameters = array( 'status' => $message); } $response = $this->api->post( 'statuses/update.json', $parameters ); // check the last HTTP status code returned if ( $this->api->http_code != 200 ){ throw new Exception( "Update user status failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus( $this->api->http_code ) ); } } 

Just using it like this:

 $config = "/path_to_hybridauth_config.php"; $hybridauth = new Hybrid_Auth( $config ); $adapter = $hybridauth->authenticate( "Twitter" ); $twitter_status = array( "message" => "Hi there! this is just a random update to test some stuff", "image_path" => "/path_to_your_image.jpg" ); $res = $adapter->setUserStatus( $twitter_status ); 

Or for the full text of twitt:

 $res = $adapter->setUserStatus( "Just text" ); 
+1
source

Source: https://habr.com/ru/post/911407/


All Articles