#!/usr/bin/perl -w
# tristan+perl@ethereal.net 12jun2003
# This is likely to violate Amazon's terms of service.
# Use at your own risk.
use strict;
use WWW::Mechanize::Sleepy;
use HTML::TreeBuilder;
my $spoof = 'Windows IE 6';
my $tag = 'tristanhorn-20';
my $wishlist = 'DPZQ22DLBXK4';
my $sleep = 0;
my $agent = WWW::Mechanize::Sleepy->new( sleep => $sleep );
$agent->agent_alias($spoof);
sub traverse {
my $url = $_[0];
my $res = $agent->get($url);
if ($res->is_success) {
my $next;
my $tree = HTML::TreeBuilder->new;
$tree->parse($res->decoded_content);
$tree->eof;
foreach my $link ($tree->look_down('_tag', 'a', sub { return unless $_[0]->attr('href'); return if $_[0]->as_text =~ /^(?:Buy new|See similar items|Click here to see our price|Click for product details|\s*)$/; 1; })) {
if ($link->as_text eq 'Next') {
$next = URI->new_abs($link->attr('href'), $res->base)->canonical;
} elsif ($link->attr('href') =~ m|/dp/([^/]+)|) {
my $title = $link->as_text;
print qq|$title
\n|;
}
}
$tree->delete;
&traverse($next) if $next;
} else {
die "Unable to retrieve $url: " . $res->status_line . "\n";
}
}
# avoid "Wide character in print" warning
binmode STDOUT, ':utf8';
&traverse("http://www.amazon.com/gp/registry/$wishlist");