As an additional (read: useless) module to add to LiveJournal was quite easy, however WebLogs is not quite the same to parse with it’s semi-proprietary format.
The following trivial code snippit uses PHP’s (now) native XML routines to parse this format and make it human-readable. Feel free to steal, use, or adapt as you need – you’ll notice that it’s quite, ah… inelegant.
<?php parse_webblogs(); // print_r($parsedlogs); while (list($number, $stuff) = each ($parsedlogs)) { echo "Entry $number: " . nicetime("$stuff[WHEN]") . " ago $stuff[NAME] [<a href='$stuff[URL]'>RSS</a>]<br />"; } function nicetime($arg = "") { // Boy is this ugly. I'll have to fix it later. if ($arg < 60) return $arg . "s"; if ($arg > 60 && $arg < 3600) return round(($arg / 60)) . "m"; if ($arg > 3600) return round(($arg / 3600)) . "h"; } function parse_webblogs() { global $parsedlogs; $fp = @fopen('http://www.weblogs.com/rssUpdates/changes.xml', 'rB'); if (! $fp) return false; $data = fread($fp, 1000000); $data = str_replace("\\r", '', $data); $data = str_replace("\\n", '', $data); $xp = xml_parser_create(); xml_set_element_handler($xp, '_simple_xml_startElement', '_simple_xml_endElement'); xml_parse($xp, $data, true); xml_parser_free($xp); return $parsedlogs; } function _simple_xml_startElement($xp, $element, $attr) { global $parsedlogs; if (strcasecmp('weblog', $element)) { return; } $parsedlogs[] = $attr; } function _simple_xml_endElement($xp, $element) { global $parsedlogs; return; } ?>