HowTo – Twitter API Displaying XML Feeds & User Info With SimpleXML

Filed under: Web Design

twitter_logoTwitter provides a number of ways to redisplay their content and access their api so we can build plugins or full applications to access and  manage our own accounts or to retrieve public content of other users.

Although we are use to reading nicely formatted twitter pages from our web browser you probably never noticed that each user has an RSS Feed and a XML Feed associated with their account.
For this example we are going to take a look at Danica Patrick’s XML Feed and see what we can find.

http://twitter.com/users/DanicaPatrick.xml

You will find all of the info that is used to populate her twitter profile including her ID number which is important and images, name, location and so on.

In addition to her profile information you see her latest tweet.

Now the reason her ID number is important is that you can use it to grab her ATOM Feed so you can display her latest tweets.  You can use the following url and apply the same code as we are using for the XML feed or you can use another RSS type  Feed Reader.

Here is her ATOM Feed Url. Using her Id from her XML Feed as shown below.

http://twitter.com/statuses/user_timeline/21255118.atom

It is important if you are looking for Twitter API Data to view the source of the ATOM Feed to find what data is missing from the XML Feed that you can capture from the ATOM or RSS Feeds.

One thing that is important to me is the URL of her larger Profile Image which is included in the ATOM Feed.. while a smaller version is included in the XML Feed.

OK Lets See the Code for grabbing the XML Feed.

Below you will see we are using curl and SimpleXML which should be parts of your PHP install to grab and extract the feed data.

[php]

<?php

function twitter_get_file($name, $credentials=false){
$res = ”;
if($credentials === false)
$res = @file_get_contents($name);
if($res === false || $res == ”){
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $name);
if($credentials !== false)
curl_setopt($ch, CURLOPT_USERPWD, $credentials);

curl_setopt($ch, CURLOPT_AUTOREFERER, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$res = curl_exec($ch);

if(!$res)
twitter_log(‘Failed to read feeds from twitter’);
curl_close($ch);
}
return $res;
}

$username ="DanicaPatrick";

$api_url_reply = ‘http://twitter.com/users/’.urlencode($username).’.xml’;
$req = twitter_get_file($api_url_reply);
$xml = @new SimpleXMLElement($req);

$id = (string)$xml->id;
$name = (string)$xml->name;
$screen_name = (string)$xml->screen_name;
$location = (string)$xml->location;
$description = (string)$xml->description;
$profile_image_url = (string)$xml->profile_image_url;
$url = (string)$xml->url;
$protected = (string)$xml->protected;
$followers_count = (string)$xml->followers_count;
$profile_background_color = (string)$xml->profile_background_color;
$profile_text_color = (string)$xml->profile_text_color;
$profile_link_color = (string)$xml->profile_link_color;
$profile_sidebar_fill_color = (string)$xml->profile_sidebar_fill_color;
$profile_sidebar_border_color = (string)$xml->profile_sidebar_border_color;
$friends_count = (string)$xml->friends_count;
$created_at = (string)$xml->created_at;
$favourites_count = (string)$xml->favourites_count;
$utc_offset = (string)$xml->utc_offset;
$time_zone = (string)$xml->time_zone;
$profile_background_image_url = (string)$xml->profile_background_image_url;
$profile_background_tile = (string)$xml->profile_background_tile;
$notifications = (string)$xml->notifications;
$geo_enabled = (string)$xml->geo_enabled;
$verified = (string)$xml->verified;
$following = (string)$xml->following;
$statuses_count = (string)$xml->statuses_count;
$lang = (string)$xml->lang;
$contributors_enabled = (string)$xml->contributors_enabled;

echo "id: " . $id . "<br>";
echo "name: " . $name . "<br>";
echo "screen_name: " . $screen_name . "<br>";
echo "location: " . $location . "<br>";
echo "description: " . $description . "<br>";
echo "profile_image_url: " . $profile_image_url . "<br>";
echo "url: " . $url . "<br>";
echo "protected: " . $protected . "<br>";
echo "followers_count: " . $followers_count . "<br>";
echo "profile_background_color: " . $profile_background_color . "<br>";
echo "profile_text_color: " . $profile_text_color . "<br>";
echo "profile_link_color: " . $profile_link_color . "<br>";
echo "profile_sidebar_fill_color: " . $profile_sidebar_fill_color . "<br>";
echo "profile_sidebar_border_color: " . $profile_sidebar_border_color . "<br>";
echo "friends_count: " . $friends_count . "<br>";
echo "created_at: " . $created_at . "<br>";
echo "favourites_count: " . $favourites_count . "<br>";
echo "utc_offset: " . $utc_offset . "<br>";
echo "time_zone: " . $time_zone . "<br>";
echo "profile_background_image_url: " . $profile_background_image_url . "<br>";
echo "profile_background_tile: " . $profile_background_tile . "<br>";
echo "notifications: " . $notifications . "<br>";
echo "geo_enabled: " . $geo_enabled . "<br>";
echo "verified: " . $verified . "<br>";
echo "following: " . $following . "<br>";
echo "statuses_count: " . $statuses_count . "<br>";
echo "lang: " . $lang . "<br>";
echo "contributors_enabled: " . $contributors_enabled . "<br>";

?>

[/php]

When you execute the PHP  File you should see something like this:

id: 21255118
name: Danica Patrick
screen_name: DanicaPatrick
location: Phoenix, AZ
description: Driver of the #7 GoDaddy.com, love to cook especially breakfast then workout running, weights, yoga, http://www.shoptissot.com
profile_image_url: http://a3.twimg.com/profile_images/676241329/danicaAvator_normal.jpg
url: http://www.DanicaRacing.com
protected: false
followers_count: 184090
profile_background_color: 000000
profile_text_color: 4a4537
profile_link_color: c91400
profile_sidebar_fill_color: d4d4d4
profile_sidebar_border_color: b50003
friends_count: 44
created_at: Wed Feb 18 23:28:33 +0000 2009
favourites_count: 120
utc_offset: -21600
time_zone: Central Time (US & Canada)
profile_background_image_url: http://a3.twimg.com/profile_background_images/92090437/twitter_2010_background01_1a.jpg
profile_background_tile: false
notifications: false
geo_enabled: false
verified: true
following: false
statuses_count: 603
lang: en
contributors_enabled: false

Now What?

Now that you have the Data you can format it however you want. You can make the page live so calls are made every time the page is loaded or you can place the data in a database.  If you have a popular site I suggest you cache the data at the very least so you don’t get banned by twitter for too many calls to their servers.