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/\ \;/\ /g; $doc =~ s/\©\;/\(c\)/gi; $doc =~ s/\&\#91\;/\[/g; $doc =~ s/\&\#93\;/\]/g; $doc =~ s/\ \'s/\'s/gi; return $doc; }