#!/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|<a href="http://www.amazon.com/o/ASIN/$1/$tag"><img src="http://images.amazon.com/images/P/$1.01.LZZZZZZZ.jpg">$title</a><br>\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");
