Easily display your last Tweet
I wanted to show my latest tweet on the front page of this site, and although I know there are several plugins which probably could've helped me do this, I decided to see how easy the API was to use.
It turned out to be incredibly easy, as long as you have PHP 5.2 or higher, that is.
This is the code:
require_once(ABSPATH . 'wp-includes/class-snoopy.php'); $snoopy = new Snoopy; $snoopy->fetch("http://twitter.com/statuses/user_timeline/jdevalk.json?count=1"); $twitterdata = json_decode($snoopy->results,true); echo "<p>\"".$twitterdata[0]["text"]."\"</p>";
As you can see, I use the Snoopy library to fetch the data, as that comes with WordPress by default. Than I decode the JSON results by using the json_decode function. This is the reason you need PHP 5.2 or up, as this was only included with this version of PHP.
Next, we output it. Of course, this is a quick & dirty implementation. If I got dugg now, and 1,000 people a minute came looking at that page, it should have some sort of caching in there. For now though, this is fine as it is!
Update: As Kim noticed in the comments, I've added some code to automatically link any @username mentions to those usernames. Replace the last echo line above with this:
$pattern = '/\@([a-zA-Z]+)/'; $replace = '<a href="http://twitter.com/'.strtolower('\1').'">@\1</a>'; $output = preg_replace($pattern,$replace,$twitterdata[0]["text"]); echo "<p>\"".$output."\"</p>";
You could even decide to add rel="nofollow" the $replace if you don't want those links to give juice.
Update 2: To make it even more complex, here is the entire code I now use, which excludes replies and caches the Twitter API requests so you won't overload the API:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | require_once(ABSPATH . 'wp-includes/class-snoopy.php'); $tweet = get_option("lasttweet"); $url = "http://twitter.com/statuses/user_timeline/jdevalk.json?count=20"; if ($tweet['lastcheck'] < ( mktime() - 60 ) ) { $snoopy = new Snoopy; $result = $snoopy->fetch($url); if ($result) { $twitterdata = json_decode($snoopy->results,true); $i = 0; while ($twitterdata[$i]['in_reply_to_user_id'] != '') { $i++; } $pattern = '/\@([a-zA-Z]+)/'; $replace = '<a href="http://twitter.com/'.strtolower('\1').'">@\1</a>'; $output = preg_replace($pattern,$replace,$twitterdata[$i]["text"]); $tweet['lastcheck'] = mktime(); $tweet['data'] = $output; $tweet['rawdata'] = $twitterdata; $tweet['followers'] = $twitterdata[0]['user']['followers_count']; update_option('lasttweet',$tweet); } else { echo "Twitter API not responding."; } } else { $output = $tweet['data']; } echo "<p>\"".$output."\"</p>"; |
As you can see it also saves the amount of followers you have into $tweet['followers'], which I then use to display this:
<p>
<a href="http://twitter.com/jdevalk">
<?=$tweet['followers']?> followers on Twitter, and you?
</a>
</p>Update 3: Another fix to automatically make all links clickable, below this line:
$output = preg_replace($pattern,$replace,$twitterdata[$i]["text"]);
Add:
$output = make_clickable($output);
This will use the WordPress internal make_clickable function to make sure that all URL's are clickable.
Enjoy!






Wow awesome share here Joost, was just looking for something like that about 3 hours ago, thank you :)
Thanks! This is great. I've been using twitter tools to do the same thing but would rather not depend on a plugin. Would it be complicated to have it remove any @ replies?
@Kim nope, I'll be working on that a bit.
I'm a total dunce when it comes to these things and generally need exact step-by-step instructions. When I tried this on my own site the @name was not linked nor was the link that I was sharing. I see on your front page that username of the person that you were talking to was linked. Am I missing something completely obvious?
Also, I have never commented here until today but I want to thank you. I learn so much from your articles and your newsletter.
Glad to be of service Kim, and no you didn't miss anything, I added some code later on to do that ;) I've updated the post to add it :)
Just updated the post with code that excludes replies and caches the requests, so you won't overload the Twitter API.
Thanks so much!! You're the best :-)
Ok - you're going to think I'm the biggest pest. I can use the original example and change it to link to the username but when I use the full code I get the following error
Missing argument 1 for Snoopy::fetch(), called in /home/kimwood/public_html/stage/wp-content/themes/kimwoodbridge/header.php on line 73 and defined in /home/kimwood/public_html/stage/wp-includes/class-snoopy.php on line 123
Thanks!
Hey Kim,
Joost just missed the variable out the fetch. Change line 6 to:
$result = $snoopy->fetch($url);
and that works great for me. Cheers for the code Joost!
Thnx for the code. Something to play with.
Regards
Champi
Thanks Anthony!
Got it - it's in the header of my website, if you want to check it out. :-)
Thanks Anthony, updated the post!
Just installed WP-Syntax too to make the code a bit more readable, but I don't know yet whether that's a keeper or not :)
And another small update to the post to reflect another change I made in my own code :)
hey joost, this is a great code!
I'm going to use the code on my new website/blog that I'm working on!
But I have a few questions about it:
I want to display the latest 3 (or a variable) tweets, in stead of the latest one.
Also, it would be great if the code would display the time at which the tweet was tweeted.
I hope you can help me with these things, because I'm not such a php-knower!...
again: thanks for the great code!
Nout
I like this a lot, but is there a way of getting a time stamp of the tweet? and a short URL?
Hi. I might've missed something but where do you input a Twitter ID or username?
At one line in the script, you can see:
http://twitter.com/statuses/user_timeline/jdevalk.json?count=20
you can change "jdevalk" in your own twitter-username.
Nout
Seems like a great plugin, has exactly what I want. But I'm having a hard time getting it to work on my site. Trying to put it in the header directly above the nav bar but when I add it in the header.php, I just get the code to show up on the site. Am I putting it in the wrong file? My site is on Wordpress 2.7. Thanks in advance, can't wait to get it running!
How can I get a similar code for a non-Wordpress site? I want to put my latest tweet in the header of my vBulletin forum.
Thanks for the code..it works flawlessly on my blog. How can I retrieve the last 5 tweets as oppose to just 1?
I would love to know that too, poking around at the code now but no succes so far...
Add this to parse hashtags:
Hello Yoast,
I integrated your code into the plugin"Pretty Links" (see http://die-truppe.com/jlf for an example). I also tried to make tweet-links clickable by
adding $output = make_clickable($output);I then tried to add target="_blank" as with Pretty Links the tweet-URL is opened within a frame:
$replace = ' href="http://twitter.com/'.strtolower('\1').'" >@\1';Unfortunately this code didn´t work; target="_blank" is not added; instead the link is marked with rel="nofollow". Do you have an idea how to make this work?
Thanks for any help!
Robert
The code didnt show up correctly, it should be
$replace = 'href="http://twitter.com/'.strtolower('\1').'">@\1';I added xa otherwise the code would be transformed into a link.
I give up - just think about adding target="_blank" to line 14 ;-)