#!/usr/bin/perl -w
#
# changes2rss monitors a website and produces diffs which are then
# build into an RSS feed using blosxom (Debian flavour).
#
# Copyleft 2007, 2008 by Axel Beckert <abe@deuxchevaux.org> under GNU GPL.
#

use LWP::Simple qw(get);

my $url = 'http://www.nvidia.com/object/unix.html';
my $dir = '$ENV{HOME}/.liferea/.changes2rss';
my $cache = "$dir/cache";
my $data = "$dir/data";

# TODO: diff2html + blosxom

my $filename = $url;
$filename =~ s(https?://)()i;
$filename =~ y(/)(_);
my $file = "$cache/$filename";

open FILE, '>', $file or die "Can't open $file: $!";
print FILE get($url);
close(FILE);

-f "$file.prev"
    or open FILE, '>', "$file.prev"
    or die "Can't touch $file.prev: $!";

my $diff = `wdiff -3 '$file' '$file.prev'`;
unlink("$file.pref");
rename($file, "$file.prev");

$diff =~ s(&)(&amp;)g;
$diff =~ s(<)(&lt;)g;
$diff =~ s(>)(&gt;)g;
$diff =~ s(======================================================================)(<hr />)g;
$diff =~ s(\[-)(<font color="#DD0000">)g;
$diff =~ s(\{\+)(<font color="#00DD00">)g;
$diff =~ s(-\]|\+\})(</font>)g;
$diff =~ s(\n)(<br />\n)g;
$diff =~ s(<br />\n<hr /><br />\n$|^<br />\n<hr /><br />\n)()sg;

if ($diff) {
    my @d = localtime;
    my $date = sprintf("%04i-%02i-%02i_%02i:%02i:%02i",
		       $d[5]+1900, $d[4]+1, @d[3,2,1,0]);
    my $output = "$data/$filename-$date.txt";

    #print "$date\n$diff\n";

    open FILE, '>', $output or die "Can't open $output: $!";
    print FILE "Changes of $url on $date\n\n";
    print FILE $diff;
    close FILE;
}

my $feed = `env PATH_INFO=/index.rss /usr/lib/cgi-bin/blosxom -f=$dir/blosxom.conf`;
$feed =~ s/^Content-Type:.*?\n\n//s;

print $feed;

