How to display Twitter updates using PHP (and without using curl)
This is something I needed to do recently. The following code reads a user timeline from Twitter (I’ve chosen the RSS format) and puts the result into a <ul> block. I’ve added a bunch of comments since PHP isn’t what I’d call a self-explanatory language.
<?php $doc = new DOMDocument(); # load the RSS -- replace 'lylo' with your user of choice if($doc->load('http://twitter.com/statuses/user_timeline/lylo.rss')) { echo "<ul>\n"; # number of <li> elements to display. 20 is the maximum $max_tweets = 10; $i = 1; foreach ($doc->getElementsByTagName('item') as $node) { # fetch the title from the RSS feed. # Note: 'pubDate' and 'link' are also useful (I use them in the sidebar of this blog) $tweet = $node->getElementsByTagName('title')->item(0)->nodeValue; # the title of each tweet starts with "username: " which I want to remove $tweet = substr($tweet, stripos($tweet, ':') + 1); # OPTIONAL: turn URLs into links $tweet = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $tweet); # OPTIONAL: turn @replies into links $tweet = preg_replace("/@([0-9a-zA-Z]+)/", "<a href=\"http://twitter.com/$1\">@$1</a>", $tweet); echo "<li>". $tweet . "</li>\n"; if($i++ >= $max_tweets) break; } echo "</ul>\n"; } ?>
Posted by Olly on February 4, 2009 at 4:56 pm in web and tagged with php
Comments (10)
| Permalink
| Comments feed

Most useful, thanks!
[...] – I’m used to Cocoa), but I have now switched to using the PHP DOMDocument object. Check out this page as a [...]
This is very useful. It works great on my local machine. However, when I pushed it live to the web, it worked the first time and then stopped working. No tweets are returned. When I added “www.” to the url of my page, it worked again. Hitting refresh, it no longer worked. It’s as if Twitter blocks access to the feed after one request from a certain URL…
Thanks for this! works perfectly!
The script is great. How would I display the date like in the following example?
Jun 1st – @JoeBob Twitter message
The script is great but how would I display the date like in the following example?
Jun 1st – @JoeBob Twitter message
This is a great script. I have had some fun with it by adding other variables to the script, allowing me more control over which items to display (i.e. the date, the title, etc.) and how to display them. Thanks again!
Hi. I have added small features to this script for my blog. Can I have your permission to post the script on my blog. I will give you the credit for the original work. Sorry for the comment but I don’t see any contact information to email you.
Hello!
Great script, thank you!
It’s possible to integrate hashtag support?
Greetings from barcelona :)
marco
I am having the same problem as Stanford. It works the first couple times but after a few refreshes, I get
Warning: DOMDocument::load(http://twitter.com/statuses/user_timeline/*myfeed*.rss) [function.DOMDocument-load]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /mnt/w0802/d03/s39/b02d9397/www/my_page.php on line 5