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|.]+$/";
if(preg_match($isjs,$user)){
Then I set the content type to show the image and use cURL to get the information from the user’s twitter page.

header('Content-type:image/png');
$info = array();
$cont = get('http://twitter.com/'.$user);
I get the information using regular expressions and put them in an associative array:

preg_match_all('/([^>]+)/msi',$cont,$follow);
$info['follower'] = convert($follow[1][0]);
preg_match_all('/([^>]+)/msi',$cont,$follower);
$info['followed'] = convert($follower[1][0]);
preg_match_all('/([^>]+)/msi',$cont,$updates);
$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('http://chart.apis.google.com/chart?cht=p3&chco=336699&'.
'chtt='.urlencode($title).'&chd=t:'.$values.
'&chs=350x100&chl='.$labels);
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);
curl_close($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 BlueSky

Newsletter

Check out the Dev Digest Newsletter I write every week for WeAreDevelopers. Latest issues:

Word is Doomed, Flawed LLM benchmarks, hard sorting and CSS mistakes Spot LLM benchmark flaws, learn why sorting is hard, how to run Doom in Word and how to say "no" like a manager.
30 years of JS, Browser AI, how attackers use GenAI, whistling code Learn how to use AI in your browser and not on the cloud, why AI makes different mistakes than humans and go and whistle up some code!
197: Dunning-Kruger steroids, state of cloud security, puppies>beer
196: AI killed devops, what now? LLM Political bias & AI security Learn how AI killed DevOps, create long tasks in JS, why 1 in 5 security breaches are AI generated code & play "The Scope Creep"
195: End of likes, JS Zoo and Tim Berners-Lee doesn't see AI vs Web Meta kills like buttons, Tim-Berners-Lee thinks AI won't kill the web, GitHub is ending toasts and the worst selling Microsoft product.

My other work: