use LWP::UserAgent;
use XML::Simple;
use HTML::Strip;
use strict;

# todo: eliminate redundant code
#       fix bugs
#       better parsing

my $args;
foreach my $arg (@ARGV) {
    $args .= " $arg";
}

my $node = $args;
$node =~ s/ /\%20/;

my $hs = HTML::Strip->new();

my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;

my $url = "http://everything2.com/index.pl?displaytype=xmltrue&node=" . $node;

my $response = $ua->get($url);

if ($response->is_success) {
    my $data = $response->content;
    my $data_hash = XMLin($data);

    if (ref($data_hash->{writeup}) eq 'ARRAY') {

        foreach my $writeup (@{$data_hash->{writeup}}) {
            print "$writeup->{title} $writeup->{author}->{content}\n";
	    print "-----------------------------------------------\n";
            my $doctext = $hs->parse($writeup->{doctext}); $hs->eof;
            $doctext = parse_doc($doctext);
            print "$doctext\n\n";
	}
    }

    else {

	foreach my $writeup ($data_hash->{writeup}) {
	    print "$writeup->{title} $writeup->{author}->{content}\n";
	    print "-----------------------------------------------\n";
	    my $doctext = $hs->parse($writeup->{doctext}); $hs->eof;
	    $doctext = parse_doc($doctext);
	    print "$doctext\n\n";
	}
    }
}

else {
    die $response->status_line;
}

sub parse_doc {
    my $doc = shift;
    $doc =~ s/\ ,/,/g;
    $doc =~ s/\ \./\./g;
    $doc =~ s/\ \ /\ /g;
    $doc =~ s/\n\n/\n/gi;
    $doc =~ s/\&nbsp\;/\ /g;
    $doc =~ s/\&copy\;/\(c\)/gi;
    $doc =~ s/\&\#91\;/\[/g;
    $doc =~ s/\&\#93\;/\]/g;
    $doc =~ s/\ \'s/\'s/gi;
    return $doc;
}