Join over 55,891 Subscribers Today! FREE UPDATES!
Get The Only Freelancer crash course you will ever need to read!
Everyone on the web is updating to the latest & the most secure technologies with Twitter being the most hyped one as it upgraded from basic Authentication to the more secure oAuth. Earlier people had to risk their Twitter login credentials if they wanted to use some external Apps that gave them more control over their Twitter profile. Twitter would now be removing the basic Auth to fully support oAuth. As Twitter describes oAuth is:
OAuth is an authentication protocol that allows users to approve application to act on their behalf without sharing their password. More information can be found at oauth.net or in the excellent Beginner’s Guide to OAuth from Hueniverse.
As the title suggests, today we’ll be making a basic application which updates your Twitter status using oAuth and PHP. So let’s get started without wasting anymore time!
NOTE: I strongly suggest that you should click on each of the screen-shots below, so that you can clearly understand what’s going on!
Before starting up, I also suggest you to read the other article on Updating Twitter using PHP as it has some background information about this article. Read it here!
To get started open up notepad or any other code editor and make three files “index.php, style.css & update.php“. Now download the “download this Twitter oAuth library” made by Jaisen Mathai “here“. It is a ready-made library “stamped” by Twitter’s API (itself) which helps you to connect to Twitter using oAuth. Now place all these files in a folder and they should look something like this:
First of all we’ll need to register an app for you on Twitter so that you get your API keys you’ll use.
After reading that previous statement a question might have taken birth in your mind, What’s the purpose of getting these API Keys from Twitter?
We need the API Keys for getting our Application (app) registered on Twitter so that Twitter gives us the right to get the users/visitors authenticated and get their credentials/profile info from Twitter. With the increasing number of Twitter account frauds these days, I think that oAuth is the best step taken by Twitter towards user security. Also, the API keys let Twitter know of the URL where the user will be redirected to after successful authentication/login.
So for that (getting our app registered on Twitter) click here or go to http://twitter.com/apps. Note that you’ll need to login with your Twitter account to register an APP. The registration page that twitter provides is like the one below. I’ll describe everything as we go on!
I have explained the form on the screenshot above so I strongly advise you to have a close look to the form and see what to fill. Below, I have explained all the elements of the file;
After that just click on Save and you’ll be redirected to a page where Twitter will give you your API info. in the form of a Consumer Key & the Consumer Secret Key. The page will look something like the one below:
To get started, we’ll first need to fill the API keys, we got from Twitter in our Application’s library so that we don’t get confused later on! To do so open the secret.php file in the lib folder and you’ll see something like below:
<?php $consumer_key = '<PLACE YOUR CONSUMER KEY HERE>'; $consumer_secret = '<PLACE YOUR CONSUMER SECRET KEY HERE>'; ?>
Now just add the Consumer Key & the Consumer Secret you got from Twitter in between the quotes. Below is the copy of the secret.php file that 1stwebdesigner’s Twitter oAuth application is using:
<?php $consumer_key = 'vUztW1221HktEoi1MD3hxg'; $consumer_secret = '8R7gXaKaGfHHjtMxj6ennJMd0c8esDP4nCsKjiJAk'; ?>
These API keys {consumer key, consumer secret} enable Twitter to redirect and process your oAuth request to Twitter for login.
Index.php: Basically this file will do all our work as it shows the “Sign In Through Twitter” button and then processes all our oAuth request using the oAuth library we are using. Co-incidentally, Twitter also redirects the user to this file after successfull authentication {Remember the screenshot above ?}
Update.php: You’ll update your Twitter status using this file. Uses index.php file for form processing. (Explained below!)
Style.css: Contains all the styles that we’ll use for our application.
Open the Index.php file you made and add the following code to it:
<?php
session_start();
include 'lib/EpiCurl.php';
include 'lib/EpiOAuth.php';
include 'lib/EpiTwitter.php';
include 'lib/secret.php';
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$oauth_token = $_GET['oauth_token'];
if($oauth_token == '')
{
$url = $twitterObj->getAuthorizationUrl();
echo "<div style='width:200px;margin-top:200px;margin-left:auto;margin-right:auto'>";
echo "<a href='$url'>Sign In with Twitter</a>";
echo "</div>";
}
else
{
$twitterObj->setToken($_GET['oauth_token']);
$token = $twitterObj->getAccessToken();
$twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);
$_SESSION['ot'] = $token->oauth_token;
$_SESSION['ots'] = $token->oauth_token_secret;
$twitterInfo= $twitterObj->get_accountVerify_credentials();
$twitterInfo->response;
$username = $twitterInfo->screen_name;
$profilepic = $twitterInfo->profile_image_url;
include 'update.php';
}
if(isset($_POST['submit']))
{
$msg = $_REQUEST['tweet'];
$twitterObj->setToken($_SESSION['ot'], $_SESSION['ots']);
$update_status = $twitterObj->post_statusesUpdate(array('status' => $msg));
$temp = $update_status->response;
echo "<div align='center'>Updated your Timeline Successfully .</div>";
}
?>
Now I’ll be explaining the whole code used above below (in point form):
session_start();
The pre-built PHP function that we are usign above just creates a session or resumes the current one.
include 'lib/EpiCurl.php'; include 'lib/EpiOAuth.php'; include 'lib/EpiTwitter.php'; include 'lib/secret.php';
We do so as we’ll be interpreting everything in our index.php file.
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$oauth_token = $_GET['oauth_token'];
if($oauth_token == '')
{
$url = $twitterObj->getAuthorizationUrl();
echo "<div style='width:200px;margin-top:200px;margin-left:auto;margin-right:auto'>";
echo "<a href='$url'>Sign In with Twitter</a>";
echo "</div>";
}
else
{
$twitterObj->setToken($_GET['oauth_token']);
$token = $twitterObj->getAccessToken();
$twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);
$_SESSION['ot'] = $token->oauth_token;
$_SESSION['ots'] = $token->oauth_token_secret;
$twitterInfo= $twitterObj->get_accountVerify_credentials();
$twitterInfo->response;
$username = $twitterInfo->screen_name;
$profilepic = $twitterInfo->profile_image_url;
include 'update.php';
}
After that we define the variables twitterObj & oauth_token to make it easier for us to connect and authenticate with Twitter. Then we open our if statement and check the oauth_token which is our access tokes for the account that will be authenticated with Twitter. We then redirect the user to Twitter’s authentication page using the $url which is defined in one the library files. The $url is made using the access token and the Twitter oAuth login link. One of the sample $url is:
http://twitter.com/oauth/authorize?oauth_token=c1iKl42xnvOA76jIqzV4zXRVqFZcYJlYBQsXJC4Hbhw
You can clearly see how Twitter well Twitter uses the oauth_tokens. After that we just open our session with Twitter and then get the profile information of the user from Twitter:
$twitterInfo= $twitterObj->get_accountVerify_credentials(); $twitterInfo->response; $username = $twitterInfo->screen_name; $profilepic = $twitterInfo->profile_image_url;
Here we defined the twitterInfo variable which is in short getting a user’s profile credentials from the $twitterObj data and then we use the screen_name & profile_image_url functions to get the profile name and profile image of the logged in user. At the same time we are assigning variables to the profile name and profile and profile image which we will use in the update.php file.
After that we are also including the update.php file using the snippet below:
include 'update.php';
Now copy the code below to your update.php file:
<html> <head> <title>Twitter oAuth Application by 1stwebdesigner | Update your status</title> <link rel="stylesheet" href="style.css" type="text/css" media="screen, projection" /> </head> <body> <h1>Hello and Welcome to the oAuth Tutorial</h1> <?php $_SESSION['twitter_profile']; ?> <div id="form"><!--Start form--> <p>Twitter Handle: <?php echo $username ?></p> <p>Profile Picture: <br /><?php echo "<img src='$profilepic' />" ?><br /></p> <label>Update Twitter Timeline</label><br /> <form method='post' action='index.php'> <br /> <textarea name="tweet" cols="50" rows="5" id="tweet" ></textarea> <br /> <input type='submit' value='Tweet' name='submit' id='submit' /> </form> </div><!--End Form--> </body> </html>
This is just a simple HTML page consisting of small chunks of PHP code for showing the user’s username, profile picture of the user as uploaded on Twitter. The page also consists of a text box which the user can use to update his/her status timeline on Twitter. You might have noticed by now that I am using the index.php file for form processing. The code that processes this form and posts to twitter is the one below (already in our index.php file):
if(isset($_POST['submit']))
{
$msg = $_REQUEST['tweet'];
$twitterObj->setToken($_SESSION['ot'], $_SESSION['ots']);
$update_status = $twitterObj->post_statusesUpdate(array('status' => $msg));
$temp = $update_status->response;
echo "<div align='center'>Updated your Timeline Successfully .</div>";
}
Here we are taking the data from the textbox named tweet and then posting it to twitter and then notifying the user that his/her message was successfully and his/her timeline was updated.
Our style.css file doesn’t have any special styles that we need to discuss here. They were just used to style the update form.
NOTE: You may want to add the character count and limit as Twitter doesn’t accept any Tweets which consists of more than 140 characters {Even from the API}. I have explained it in my previous tutorial on 1stwebdesigner about Updating Twitter using Twitter API and PHP.
You may now download the completed application files here but don’t forget to edit the secret.php file with your API keys as it won’t work without it. Feel free to build on the application we made today!
We all know that Twitter provides an easy-to-use interface for its users. The main advantage of using oAuth is that users can see what applications have access to their profiles. If you want to check that then you can do so by:
You can check that easily by following the screenshot below:
This is a screen-shot of my Connections page which is showing me all the Twitter websites/applications I have given access to!
There’s another great Twitter oAuth library made by @abraham which can be seen in action here and it can be downloaded here. Tutorials regarding that library are available here!
That’s it! If you have anything to add or have a query then feel free to comment on this post. Thanks ;)
Get The Only Freelancer crash course you will ever need to read!
Friday, April 15th, 2011 22:00
Great tutorial! Very cool potential here.
I was struggling with a goofy error, and I just figured it out. In case anyone is in the situation where you send your tweet, the page reloads, says you successfully updated your timeline, but you DON’T see anything actually update on your feed, make sure your app is registered as Read & Write under “Default Access Type”. I had mine set to Read-only, so it wasn’t working.
I figured it out by checking the temporary variable that gets assigned the response to the update (in index.php):
$temp = $update_status->response;
and found [error] => Read-only application cannot POST
Silly error. Very simple. But fooled me nonetheless. Hopefully this post will help someone else out.
Cheers!
Thursday, April 14th, 2011 12:51
Great tutorial and have got it all working nicely. Only problem I have found is when someone tried a bit of French it didn’t get posted… Très Bien.
Doesn’t seem to like the è!
Tuesday, April 12th, 2011 11:33
I got “….enter the following PIN to complete the process.”
Where should I enter this PIN in order to continue with the process?
Please, does anyone give me an answer…
Thank you
Wednesday, April 13th, 2011 03:50
Register your application on Twitter and enter the KEY’s you get from there in the “secret.php” file!
Monday, April 11th, 2011 18:37
How can we use it to get tweek by keywords(post id ex: @cldmgc)? Atleast 10 tweeks.
Wednesday, April 13th, 2011 03:51
What do you mean by Tweaks?
Monday, April 11th, 2011 18:17
when i tried to run it it ran well but after signing in twitter took me at a page where a token was given and a message was written that “Go to and enter the following to complete the process. Can you guide me to get rid of this obstacle.
Wednesday, April 13th, 2011 03:55
Reading the tutorial properly will help you get rid of the obstacle!
– Register your app on Twitter.
– Enter the Key’s you get after app register in the “secret.php” file available in the enclosed source code package!
Read the tutorial properly!
Thursday, March 3rd, 2011 18:23
I am getting an error when trying to run the index.php in browser:
“Fatal error: Call to undefined function curl_multi_init() in E:\WEB FOLDERS\lib\EpiCurl.php on line 21″
Help?
Wednesday, March 16th, 2011 15:41
It might be problem with cURL. Try this http://www.robinthomas.in/php/enable-curl-in-wamp/
Wednesday, April 13th, 2011 03:52
It’s indeed a problem with cURL! Also use “http://127.0.0.1″ as your callback URL when testing Twitter oAuth on localhost!
Wednesday, February 23rd, 2011 16:25
I have a problem with the oauth token,
When I try to sign in to authenticate, it does not generate an oauth token. When I hover over ‘Sign In’ this is the link:
http://twitter.com/oauth/authorize?oauth_token=
then I get an error from twitter, because there is no token
can anybody help?
Tuesday, March 1st, 2011 02:14
Add your API keys to secret.php file!
Friday, February 11th, 2011 11:29
Thanks for this guide! It’s great! and now I have a problem …
The first time it works correctly, but after the user must “Sign In with Twitter” every time :-(
Are there solution for this problem? Thanks
Tuesday, March 1st, 2011 02:14
Yeah! use a database to store the Token information.
Wednesday, January 26th, 2011 23:21
When I open the library file, there’s no file called index.php… Do I create it?
Monday, January 17th, 2011 20:45
How to integrate the CSS from your previous tutorial with this one? Please help me!
Wednesday, January 5th, 2011 23:46
Great tutorial. I can’t wait to dive into this later this evening! It will make developing my Twitter app a cinch!
Wednesday, January 5th, 2011 23:44
You’re going to have to put an authenticate link in your backend and save the oauth tokens that twitter passes back to your MySQL database. Then you can just do exactly this but get the oauth tokens from you DB instead.
Wednesday, December 22nd, 2010 22:21
Also thanks for great tutorial.
I’d like to ask you, if is it possible to go straight to form and directly type the tweet without prompting me to click Allow button on twitter.com…
Wednesday, February 9th, 2011 01:35
It was possible until a few days ago but they closed that method now!
Thursday, December 16th, 2010 08:00
Hello folks,
The demo is working fine for me @ http://tutorialswalk.info/demo/twitter-update-php-oauth/ I just tweeted this using that demo: http://twitter.com/#!/Abhishekwebin/status/15314744860741632
Feel free to email me @ ‘abhishek66ster[at]gmail.com’ and I’ll walk you through the error!
Thanks :)
Abhishek Bhardwaj
Friday, December 10th, 2010 04:55
Same exact thing for me. Everything seems to work, but no update showing up on Twitter. Did something at Twitter get changed recently?
Saturday, December 4th, 2010 04:39
dude… just store it in the DB.. someone mentioned it above as well, and they got it working.
great tutorial by the way Abhishek!
Friday, December 3rd, 2010 13:08
I’m in the same boat. Everything is working minus actually updating
Monday, November 29th, 2010 15:31
I have followed this tutorial and everything seems to work apart from the actual Twitter timeline being updated. The scripts all run error free and I see the message telling me the timeline has been updated but the actual Tweet doesn’t appear in my timeline. Anyone got any ideas?
Tuesday, November 2nd, 2010 23:17
Great tutorial!
Hey Ross, how did you integrate this code to read value from your database and submit to twitter? I tried, but it seems to just fizzle.
Saturday, October 23rd, 2010 21:11
I’m having the same issue :/
Saturday, October 23rd, 2010 05:05
Perhaps I’m doing this wrong. When I click the log in with twitter link, I get an HTTP500 error page. I thought I had followed the directions to the letter. Any ideas?
Friday, October 22nd, 2010 22:42
This is a brilliant script and I have it all working and running periodic updates from my database :)
I have a problem though! Whenever I include the pound symbol (£), it fails! The response I get is “Invalid signature” which doesn’t make sense as it works fine any other time. I’ve tried the different codes for the symbol and putting it through various string converters but no luck.
Any ideas?
Friday, October 22nd, 2010 05:30
Fantastic tutorial – I really appreciate your posting the example. I’ve been having a heck-of-a-time with oAuth but that download made a new project move so much faster! Too bad you didn’t include passing the callback URI in the demo. I’ll have to go and add that in. I hate relying on the value I set in the application setup – a bad practice IMHO.
Thanks again!
Friday, October 8th, 2010 22:06
hi, I am having trouble setting this up for my website, basically what I need to do is send a tweet when there has been new values added to a mysql database.
there does not seem to be anything on the web that tells me that?
please help!
Sunday, February 27th, 2011 20:42
me too have the same problem :(
If not, then it's time to learn how to:
You can trust 1stWebDesigner to help you become a better web designer!
- Jacob Cass | Just Creative
Just enter your name and email below and click Get Updates!
Josh
Thursday, March 3rd, 2011 18:23
I am getting an error when trying to run the index.php in browser:
“Fatal error: Call to undefined function curl_multi_init() in E:\WEB FOLDERS\lib\EpiCurl.php on line 21″
Help?
Abhishek
Wednesday, April 13th, 2011 03:52
It’s indeed a problem with cURL! Also use “http://127.0.0.1″ as your callback URL when testing Twitter oAuth on localhost!
Robin
Wednesday, March 16th, 2011 15:41
It might be problem with cURL. Try this http://www.robinthomas.in/php/enable-curl-in-wamp/
priya
Saturday, November 5th, 2011 09:51
Hi
we get user name of the person through this code
$username = $twitterInfo->screen_name;
but i dont know how to get email id of him
will please answer?
Alex
Tuesday, April 10th, 2012 08:08
print the whole array as take what you required.
i.e
print_r($twitterInfo);
sonu
Wednesday, November 16th, 2011 12:23
I want to upload image on twitter account with php code can anyone help me regarding this.
Thanks for this
Francis
Wednesday, November 30th, 2011 05:27
Great tutorial, I’m planning to develop my own twitter API and this one is a good example to start for. Thanks for sharing.
tonny
Friday, December 9th, 2011 18:20
How can i decode twitterInfo object?
Pur
Sunday, December 4th, 2011 22:57
Hi Bhardwaj,
I’ve tried this script on my website for member area (where the session_start() is always there). Getting $username and $profilepic when visitor redirected to callback URL is work nicely. It means that writing $_SESSION['ot'] and $_SESSION['ots'] also good. But i always fail sending post to twitter. I tried to display error by adding print_r($temp) and I found error like “Invalid/Token Expired”. So that after doing POST Request there are missing value of $_SESSION['ot'] and $_SESSION['ots'] even if I add or remove session_start() on the top of page.
I’ve also tried other different tutorials and simply not working when sending tweet. I put customer_key and customer secret correctly, and set my application permission to read and write, give correct callback URL, domain and web address. Still not working.
Because there are missing $_SESSION['ot'] and $_SESSION['ots'] value when sending Post Request, I tried to record those string to my myql table when getting back to Callback URL (where $_SESSION['ot'] and $_SESSION['ots'] got their values correctly), and then call them when posting tweet. And still not working.
Can you tell me why I loss $_SESSION['ot'] value when sending POST Request even if i send it to different file , and why I got error: Invalid/token expired even i use toke key from mysql record.
It seems something causes that errors on my server but I don’t know what is it because the script doesn’t return any error until I put this print_r($temp).
Can you help me fix this problem please!
Thanks for your great posts.
Pur
Sunday, December 4th, 2011 23:08
Note:
My server is also PHP CURL enabed, safe_mode=off, and works well in integrating facebook API with PHP.
I really need this twitter API script, and your script is the only script that successfully displaying twitter user data on Callback, but fail sending post to twitter.
Hope you help me fix this.
Umer
Wednesday, October 26th, 2011 13:10
Nice post but even in your demo once i refresh the page, my user info including picture goes off and it does not retain the session. Kindly comment and update your code to make it complete teaching beginners to retain user info as well.
Abhishek Bhardwaj
Friday, November 11th, 2011 23:18
This was a basic tutorial without any databases involved (Yes, you’ll need a database to retain sessions).
Nilesh
Sunday, October 23rd, 2011 23:38
Really good documentation specially for beginners.
ivan
Thursday, September 22nd, 2011 20:51
I followed the instructions, step by step, but it doesn´t work fine. Twitter returns me a PIN code to put in to the app for the Authentication process ( of-band/PIN Code Authentication). This is so weird, because when I run your demo from this website, it works fine and doesn´t need the PIN code
cheerrss!!!!!!
Eric Libay
Friday, September 16th, 2011 07:35
I can’t change my “Default Access type” into “Read & Write” it always turn into Read-Only..What happen to twitter.
motorlu panjur
Sunday, October 2nd, 2011 23:09
is a herbal is live are you teacher systam
evan heminger
Tuesday, October 11th, 2011 23:20
What if I don’t have a website?
Daniel
Saturday, October 22nd, 2011 00:27
A snag which I ran into and remedied: don’t forget to enable the cURL extension in php.ini (uncomment extension=php_curl.dll). Otherwise you’ll run into ‘could not find **_curl_**() function’ errors.
Kelvin Chan
Tuesday, October 18th, 2011 20:36
great tutorial, but I can’t seem to get the oauth_token.. :(
Micky
Thursday, October 13th, 2011 03:10
Hey, get rid of the space in update.php in line 17. There are 2 spaces in that line, just delete one of them.
Tonny
Friday, December 9th, 2011 18:27
Dudz, help me how can i decode $twitterInfo->response
Drewseph
Tuesday, December 13th, 2011 03:06
I’m a bit confused at what I need to store in my database and where I need to call it
I have the script working perfectly but I’d prefer to not have to authenticate every time and have to “Allow” app to post
Andi Afriansyah
Tuesday, March 27th, 2012 08:55
where is the url api? I have searched for the url api string in the php file. But still noting :( help me. where is update api?
Emmanuel Chenze
Monday, March 26th, 2012 16:00
A good tutorial. Let me try these steps and see how it works.
saeed
Monday, April 9th, 2012 06:36
hi guys ;
i have question about sign in link when i want sign in to my app ,i have link url with out “oauth_token” code,
twitter.com/oauth/authorize?oauth_token=…empty….
what can i do ????
Alex
Tuesday, April 10th, 2012 08:05
your CURL is not working
Adeel
Tuesday, May 15th, 2012 08:48
When i log in with twitter it gets me logged in and get my details from twitter. But when i refresh page, request fails with error invalid token. Same is happening on your demo. My name and Profile picture disappears when i refresh that demo page. Kindly reply if someone understand this problem or have solution to this.
Willz
Friday, March 16th, 2012 14:21
Thanks for that excellent and straight forward solution!
Mohammad Kalim
Wednesday, March 7th, 2012 08:41
hello,
This is awesome i really love this but i need one more thing how can i do this tweet automatically, because i want to that: I have a CMS Admin Panel of my Web-Application i want to do that when every i have enter the new product they will automatically tweet the description of the product, I just do it before entering it into the database.
Please Guide me how to do that.
Thanks
saeed
Monday, April 9th, 2012 06:32
hi guys ;
i have question about sign in link when i want sign in to my app ,i have link url with out “oauth_token” code,
twitter.com/oauth/authorize?oauth_token=…empty….
what can i do ????
Theo
Saturday, February 4th, 2012 23:11
Hi!
I have some ugly php error messages:
Warning: include(lib/EpiCurl.php) [function.include]: failed to open stream: No such file or directory in /var/www/virtual/artlog.hu/htdocs/twitter/index.php on line 5
Warning: include() [function.include]: Failed opening ‘lib/EpiCurl.php’ for inclusion (include_path=’.:/usr/share/php:/usr/share/pear’) in /var/www/virtual/artlog.hu/htdocs/twitter/index.php on line 5
Warning: include(lib/EpiOAuth.php) [function.include]: failed to open stream: No such file or directory in /var/www/virtual/artlog.hu/htdocs/twitter/index.php on line 6
Warning: include() [function.include]: Failed opening ‘lib/EpiOAuth.php’ for inclusion (include_path=’.:/usr/share/php:/usr/share/pear’) in /var/www/virtual/artlog.hu/htdocs/twitter/index.php on line 6
Warning: include(lib/EpiTwitter.php) [function.include]: failed to open stream: No such file or directory in /var/www/virtual/artlog.hu/htdocs/twitter/index.php on line 7
Warning: include() [function.include]: Failed opening ‘lib/EpiTwitter.php’ for inclusion (include_path=’.:/usr/share/php:/usr/share/pear’) in /var/www/virtual/artlog.hu/htdocs/twitter/index.php on line 7
Fatal error: Class ‘EpiTwitter’ not found in /var/www/virtual/artlog.hu/htdocs/twitter/index.php on line 10
Anyone?
aaron
Saturday, January 28th, 2012 02:06
Hi– once on my server, i tried to follow the link and sign in with twitter but i got this error:
There is no request token for this page. That’s the special key we need from applications asking to use your Twitter account. Please go back to the site or application that sent you here and try again; it was probably just a mistake.
the consumer secret and key were the only two devices needed, correct?
vikash
Tuesday, February 21st, 2012 11:30
we remove bracket” just like in screat.php error willbe remove.