#! /usr/bin/perl -w # httpdlog2rss.cgi # Emmanuel M. Decarie / http://scriptdigital.com # May 11 2003 # I'm using 'use lib' because I don't have a system wide access on my account. # Required: Parse::AccessLogEntry use CGI ':standard'; use strict; use lib '/path/to/home/lib/site_perl/5.6.0'; use Parse::AccessLogEntry; my $logdir = "/path/to/my/apache/log/directory"; # the format of the name of my Apache logs is for example: 20030511.log my ($d,$m,$y) = (localtime(time))[3,4,5]; $m += 1; $y += 1900; my $logpath = sprintf "%s/%d%02d%02d%s", $logdir, $y, $m, $d, ".log"; print header ('text/plain'); my @log; if ( -f $logpath) { open (LOG, "< $logpath"); while (my $line = ) { push (@log, $line); } } sub cleanxml { my $s = shift; $s =~ s/&/&/g; $s =~ s//>/g; $s =~ s/"/"/g; $s =~ s/'/'/g; return $s; } # put here the name of your site and a description my $rss = ' Apache Log for blog.scriptdigital.com Experimenting with RSS. http://blog.scriptdigital.com'; my $parser = Parse::AccessLogEntry::new(); for (@log) { my $logline=$parser->parse("$_"); my ($host, $time, $file, $agent, $refer) = ( $logline->{'host'}, $logline->{'time'}, $logline->{'file'}, $logline->{'agent'}, $logline->{'refer'} ); $file = cleanxml ($file); $agent = cleanxml ($agent); $refer = cleanxml ($refer); $rss .= " $host <table cellspacing=4 cellpadding=4 border=1> <tr><td>Time</td><td>$time</td></tr> <tr><td>Referer</td><td>$refer<td></tr> <tr><td>User-Agent</td><td>$agent</td></tr> </table> $file "; } $rss .= ' '; print $rss;