Somewhat ridiculous XML parser + image generator
Seriously needs caching. SRSLY
<?php class ImageGeneration { function getInfo($name) { $this->loadDefaultInfo(); $XML = new XMLReader; $XML->open("http://chat.hypermutt.net/online/user/".$name.".xml"); $wn = array(); while($XML->read()) { if ($XML->nodeType == XMLReader::ELEMENT) { $wn[] = $XML->name; } if ($XML->nodeType == XMLReader::TEXT) { if ("user/info/nick" == implode('/', $wn)) { $this->name = $XML->value . ". "; } if ("user/info/online" == implode('/', $wn)) { $this->away = ($XML->value == "TRUE") ? true : false; } if ("user/info/connected" == implode('/', $wn)) { $this->onlinefor = strtotime($XML->value); } if ("user/info/timenow" == implode('/', $wn)) { $sc = (strtotime($XML->value) - $this->onlinefor); $t = floor($sc/86400); $c["days"] = ($t > 0) ? $t."D " : ""; $sc = ($sc-$t*86400); $t = floor($sc/3600); $c["hours"] = ($t > 0) ? $t."H " : ""; $sc = ($sc-$t*3600); $t = floor($sc/60); $c["minutes"] = ($t > 0) ? $t."M " : ""; $this->onlinefor = $c["days"].$c["hours"].$c["minutes"]; } if ("user/info/away" == implode('/', $wn)) { $this->away = ($XML->value == "TRUE") ? true : false; } if ("user/info/awaymsg" == implode('/', $wn)) { $this->awaymessage = $XML->value; } if ("user/channels/channel/name" == implode('/', $wn)) { $this->channels .= str_replace('#','',$XML->value)." "; } } if ($XML->nodeType == XMLReader::END_ELEMENT) { array_pop($wn); } } $XML->close(); } function loadDefaultInfo() { $this->name = ". "; $this->online = true; $this->onlinefor = ""; $this->away = true; $this->awaymessage = ""; $this->channels = ""; } function drawImage() { header("Content-type: image/png"); $image = imagecreatefrompng("background.png"); $white = imagecolorallocate($image, 255, 255, 255); $red = imagecolorallocate($image, 255, 0, 0); $green = imagecolorallocate($image, 0, 255, 0); $feb = "slkscreb.ttf"; $fnn = "slkscr.ttf"; $sizes["name"] = imagettfbbox(6, 0, $feb, $this->name); $sizes["online"] = imagettfbbox(6, 0, $feb, "online: "); $sizes["away"] = imagettfbbox(6, 0, $feb, "away: "); $sizes["yes"] = imagettfbbox(6, 0, $feb, "yes "); $sizes["#"] = imagettfbbox(6, 0, $feb, "#: "); imagettftext($image, 6, 0, 22, 8, -$white, $feb, $this->name); imagettftext($image, 6, 0, (22 + $sizes["name"][4]), 8, -$white, $feb, "online:"); imagettftext($image, 6, 0, (22 + $sizes["name"][4] + ($sizes["online"][4] - $sizes["away"][4])), 18, -$white, $feb, "away:"); imagettftext($image, 6, 0, (22 + $sizes["name"][4] + ($sizes["online"][4] - $sizes["#"][4])), 28, -$white, $feb, "#: "); imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4]), 8, -(($this->online) ? $green : $red), $feb, (($this->online) ? "yes" : "no")); imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4]), 18, -((!$this->away) ? $green : $red), $feb, (($this->away) ? "yes" : "no")); if ($this->online) imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4] + $sizes["yes"][4]), 8, $white, $fnn, $this->onlinefor); if ($this->away) imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4] + $sizes["yes"][4]), 18, $white, $fnn, $this->awaymessage); imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4]), 28, $white, $fnn, $this->channels); imagepng($image); imagedestroy($image); } } $x = new ImageGeneration; $x->getInfo($_GET['name']); $x->drawImage(); ?>