March 7, 2009

Posting twitter posts with Curl using PHP, Sobi2 and Joomla

Being experimenting with the API of Twitter. I started out playing with curl to send updates from a joomla directory, once a user added a listing. The concept was to have followers follow the updates live via twitter. Tools used: Joomla , Sobi2 and some basic PHP.

Firstly make sure your server supports curl and that the extension is active. A simple install to linux would look something like this.

sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

Now you have PHP cURL installed, the next thing you need to do is to restart apache2, run the following command in your terminal:

sudo /etc/init.d/apache2 restart

In the command terminal run the following command to test the connection to twitter. You can use the -v dump method to post any errors on the screen if connection fails. example curl -u -v ( and then the command )

curl -u username:password -d status="twittering from curl" http://twitter.com/statuses/update.xml

I then used the PHP curl features to do the same thing from PHP:


<span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">// Set username and password</span><span class="pln">
$username </span><span class="pun">=</span><span class="pln"> </span><span class="str">'username'</span><span class="pun">;</span><span class="pln">
$password </span><span class="pun">=</span><span class="pln"> </span><span class="str">'password'</span><span class="pun">;</span><span class="pln">
</span><span class="com">// The message you want to send</span><span class="pln">
$message </span><span class="pun">=</span><span class="pln"> </span><span class="str">'is twittering from php using curl'</span><span class="pun">;</span><span class="pln">
</span><span class="com">// The twitter API address</span><span class="pln">
$url </span><span class="pun">=</span><span class="pln"> </span><span class="str">'http://twitter.com/statuses/update.xml'</span><span class="pun">;</span><span class="pln">
</span><span class="com">// Alternative JSON version</span><span class="pln">
</span><span class="com">// $url = 'http://twitter.com/statuses/update.json';</span><span class="pln">
</span><span class="com">// Set up and execute the curl process</span><span class="pln">
$curl_handle </span><span class="pun">=</span><span class="pln"> curl_init</span><span class="pun">();</span><span class="pln">
curl_setopt</span><span class="pun">(</span><span class="pln">$curl_handle</span><span class="pun">,</span><span class="pln"> CURLOPT_URL</span><span class="pun">,</span><span class="pln"> </span><span class="str">"$url"</span><span class="pun">);</span><span class="pln">
curl_setopt</span><span class="pun">(</span><span class="pln">$curl_handle</span><span class="pun">,</span><span class="pln"> CURLOPT_CONNECTTIMEOUT</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
curl_setopt</span><span class="pun">(</span><span class="pln">$curl_handle</span><span class="pun">,</span><span class="pln"> CURLOPT_RETURNTRANSFER</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
curl_setopt</span><span class="pun">(</span><span class="pln">$curl_handle</span><span class="pun">,</span><span class="pln"> CURLOPT_POST</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
curl_setopt</span><span class="pun">(</span><span class="pln">$curl_handle</span><span class="pun">,</span><span class="pln"> CURLOPT_POSTFIELDS</span><span class="pun">,</span><span class="pln"> </span><span class="str">"status=$message"</span><span class="pun">);</span><span class="pln">
curl_setopt</span><span class="pun">(</span><span class="pln">$curl_handle</span><span class="pun">,</span><span class="pln"> CURLOPT_USERPWD</span><span class="pun">,</span><span class="pln"> </span><span class="str">"$username:$password"</span><span class="pun">);</span><span class="pln">
$buffer </span><span class="pun">=</span><span class="pln"> curl_exec</span><span class="pun">(</span><span class="pln">$curl_handle</span><span class="pun">);</span><span class="pln">
curl_close</span><span class="pun">(</span><span class="pln">$curl_handle</span><span class="pun">);</span><span class="pln">
</span><span class="com">// check for success or failure</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$buffer</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    echo </span><span class="str">'message'</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    echo </span><span class="str">'success'</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">?&gt;</span>

This is just a basic layout, the twitter API allows you to do so much more. Now comes the fun part. If you are using joomla and sobi2 as a directory component, here is a way to place the above code to your sobi2 directory and receive live updates once a user adds a listing.

Open the sobi2.class file , then scroll down to line 533 and insert the above code just above the sql query. You can then use the variables within the sobi2 framework to display to twitter. Here is another sample of this:

<strong><span style="color: #800000;"><em>function ShortenText($text) {
$chars = 140;
$text = $text." ";
$text = substr($text,0,$chars);
$text = substr($text,0,strrpos($text,' '));
$text = $text."...";
return $text;
}</em></span></strong>

$username = 'username';
$password = 'password';
$twitpost = $this-&gt;title." has joined your directory!";

<em>$twitmessage = ShortenText($twitpost);</em>

<em>$url = 'http://twitter.com/statuses/update.xml';</em>

<strong><span style="color: #800000;"><em>$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, "$url");
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_POST, 1);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$twitmessage");
curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
// check for success or failure
if (empty($buffer)) {
$twitresponse = 'Deal not posted to Twitter';
} else {
$twitresponse = 'Deal posted to Twitter';
}</em></span></strong>

Just adapt it as you need to. you can go as far as adding the url to the post. ( incorporate tiny url to keep the url short ). Will post a seperate tutorial on this shortly.

Written by: admin

Filed Under: Sobi2, Tutorials, Website Ideas, Website Scripts, Website Tools

Tags: , , ,

Trackback URL: http://www.website-ideas.co.uk/2009/03/07/getting-twitter-posts-with-curl-and-php/trackback/

Comments

  • E-TradeCounter

    April 2, 2009 at 5:20 pm

    Very nice code there. If I get some spare time might have to change it into asp.net.
    Very good code, might be worth just getting a PHP server for!

  • ponnuchamy

    August 26, 2009 at 3:28 pm

    How to get the followers information

  • ponnuchamy

    August 26, 2009 at 3:30 pm

    anyone can give the url to get the followers information from twitter.com

    $url = ‘http://twitter.com/statuses/update.xml’;

Leave a reply

* means field is required.

*

*