Christian Heilmann

Show the world your Twitter type (using PHP and Google Charts)

Sunday, November 23rd, 2008 at 1:00 pm

I just had a bit of fun with Twitter and the Google charts API. You can now add an image to your blog, web site or wherever and show a picture of what kind of a twitter user you are. All you need to do is embed an image and give it the right source:

For example my user name is codepo8, which would be:

And the resulting image is:

For John Hicks for example it is:

And the resulting image is:

How it is done and how to “change stuff”

You can download the source code and have a play with this (I hope this will not spike my traffic :) so it might go offline if that is the case). There’s really not much magic to this:

First I get the user name and filter out nasties:

$user = $_GET[‘user’];
$isjs = “/^[a-z|A-Z|_|-|$|0-9|.]+$/”;

Then I set the content type to show the image and use cURL to get the information from the user’s twitter page.

$info = array();
$cont = get(‘’.$user);

I get the information using regular expressions and put them in an associative array:

$info[‘follower’] = convert($follow[1][0]);
$info[‘followed’] = convert($follower[1][0]);
$info[‘updater’] = convert($updates[1][0]);

The convert function removes the comma punctuation added by twitter and makes sure the values are integers.

I then need to determine which of the three values is the highest and define a scaling factor as the Google API only allows values up to 100. I then check what the type of the user is by getting the right array key and change the values for displaying.

$max = max($info);
$convert = 100 / $max ;
foreach($info as $k=>$f){
if($f = $max){
$type = $k;

$disp[$k] = $f * $convert;

I check the type and assemble the display string accordingly:

if($type = ‘updater’){
$t = ’ is an ‘;

if($type = 'follower'){
$t = ' is a ';

if($type = ‘followed’){
$t = ’ is being ‘;

$title = $user . $t . $type;

I assemble the labels array and the values array and add all up to the correct Google charts API url. I use cURL to get the image and echo it out.

$out = array();
foreach($info as $k=>$i){
$out[] = $k.’+(‘.$i.’)’;

$labels = join($out,’|’);
$values = join($disp,’,’);
$img = get(‘’.
echo $img;

The rest are the cURL and convert helper functions.

function get($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$feed = curl_exec($ch);
return $feed;

function convert($x){
$x = str_replace(‘,’,’‘,$x);
$x = (int)$x;
return $x;

You like?

Faster version (one cURL, instead of two)

Instead of setting the PNG header and echoing out the image you can also just set a location header at the end and redirect the URL request to Google’s servers. I guess they have more bandwidth. :)

Tags: , , , , , ,

Share on Mastodon (needs instance)

Share on Twitter

My other work: