Amazon Web Services

davorg on 2005-01-21T12:14:22

Like acme , I've been playing with Amazon Web Services. I decided that I've not been reading enough books, so I've set myself a target of reading fifty books this year. I've got a database table where I store the ISBNs of books I'm reading and I use Amazon Web Services to grab more details of the books from Amazon. Net::Amazon and Class::DBI make this trivial.

#!/usr/bin/perl

use Net::Amazon;
use Cache::File;
use Books;

@ARGV || die "No ISBN given\n";

my %az_opt = (
              token        => "MY AMAZON WEB SERVICE ID",
              locale       => 'uk',
              affiliate_id => "davblog-21",
              cache        => Cache::File->new(
                                               cache_root
                                               => '/tmp/amzn_cache',
                                               cache_umask     => 000,
                                               default_expires => '30 day',
                                              ),
             );

my $amz = Net::Amazon->new(%az_opt);

foreach (@ARGV) {
  my $isbn = sprintf "%010s", $_;
  my $resp = $amz->search( asin => $isbn );
  die "Can't find $isbn" unless $resp->is_success;
  my ($prop) = $resp->properties;

  print $prop->title, "\n";
  print ' - ', join (', ', $prop->authors), "\n";
  print $prop->url, "\n";
  print $prop->ImageUrlSmall, "\n";
  print "\n";

  my $book = Books::Book->create(
                                 {
                                  isbn => $isbn,
                                  title => $prop->title,
                                  author => join (', ', $prop->authors),
                                  url => $prop->url,
                                  cover_url => $prop->ImageUrlSmall,
                                  md_cover_url => $prop->ImageUrlMedium,
                                  lg_cover_url => $prop->ImageUrlLarge
                                 }
                                );
}

Some of this code comes from a similar application that Tony Bowden has written. Books.pm is a Class::DBI module which includes classes for the various tables in my database.

Having got this data into the database along with details of the dates I started and finished reading each book, it becomes simple to create a page that shows what I'm reading. There are also RSS feeds which I use to power the "Reading List" section on the front page of my blog.

All in all, a very satisfying couple of hours work.