#!/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");