Upload Images On Twitter Using PHP
Solution 1
Well I get the answer, Download Twitter Api for php & 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;
}
Solution 2
Well your user has to be authorized with OAuth with your APP,then you use API to post tweet. According to POST statuses/update & POST statuses/update_with_media, but I had trouble posting image (about a year ago, they probably fixed it by now).
Solution 3
You can use Oauth to authorise you app. I found this guide helpful, as it shows how to connect to the API, and how to post on twitter. Using update_with_media should allow you to post with images
Solution 4
update_with_media is deprecated, you should consider using the following approach : https://dev.twitter.com/rest/public/uploading-media
Using the excellent hybridauth library and updating Twitter.php setUserStatus function with the following, you can achieve what you want :
/**
* 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 so :
$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 a full text twitt :
$res = $adapter->setUserStatus( "Just text" );
Tony Stark
Hello Everyone, Sharing your knowledge with others does not make you less important. Often, we are too slow to recognize how much and in what ways we can assist each other through sharing such expertise and knowledge. HAPPY TO SHARE KNOWLEDGE!!! THANKS TO SO!!!
Updated on November 17, 2020Comments
-
Tony Stark over 3 years
How i can upload image on
Twitter Wall
usingconsumer_key
andconsumer_secret
without login using PHP?Please help me & thanks a lot.
-
Curtis Gibby over 11 yearsI had to add a
$headers
variable to the$tmhOAuth->request()
call. I was getting back a 417 error from Twitter, and Googling led me to stick inarray('Expect' => '')
after the multiparttrue
. It worked perfectly after that. -
Tony Stark over 11 yearsI used for iphone app, this is on app store & yes it is still working.
-
Tony Stark about 11 yearsIf some one facing problem to integrate the code or something else then write comment.Please don't give downvote!!!
-
suicidebilly about 11 yearsI don´t get the DEFINE lines, there more than one Consumer Key ? Why there´s two fields ? ('YOUR_CONSUMER_KEY' , 'your twitter app consumer key') ?
-
Tony Stark about 11 years@suicidebilly for twitter integration you need four things YOUR_CONSUMER_KEY","YOUR_CONSUMER_SECRET","YOUR_OAUTH_TOKEN","YOUR_OAUTH_TOKEN_SECRET".
-
Can Rau over 8 yearsJust for guys like me stumbling on this one, media feature has been merged over a year ago ;-) github.com/hybridauth/hybridauth/blob/master/hybridauth/Hybrid/…
-
Hirdesh Vishwdewa about 8 yearswhere is
twitt/tmhUtilities.php
? -
Hirdesh Vishwdewa about 8 yearsreturns error code 410 which means this code uses API v1 which is depricated, use v1.1
-
Andy over 6 yearsPlease consider updating the code as it isn't working any longer.
-
Loko over 4 yearsNOTE:
update_with_media
API call is deprecated!