Debuginfo

思考とアウトプット

Net::Amazonでkindle本を取得する方法 [Perl]

Kindle本を除外する方法はGoogleでひっかかるのですが、Kindle本を取得する方法は書かれていないので書いておきます。

下記のページに書かれていますが、ProductGroupがebookのときがKindle書籍のようです。

PerlではNet::Amazonで書籍情報を取得するのがらくちんなのですが、PropertyにProductGroupが見つかりません。なのでxmlrefの中をprint Dumperしながら見つけます。階層が深いですが、下のようにすれば判定できました。正規表現で/ebook/iしてるのはAmazonデータは一貫性がなさそうなので大文字小文字を区別しないようにしてます。

#!/bin/env perl

use strict;
use warnings;

use Net::Amazon;    
use Data::Dumper;
use YAML;

my $ua = Net::Amazon->new(
    associate_tag => ‘***,
    token         => ‘******’,
    secret_key    => ‘*******’,
    locale => 'jp',
);

# Get a request object
my $response = $ua->search( title => '伝え方が9割', mode => 'books');

if($response->is_success()) {
    for my $item (@{ $response->{xmlref}->{Items} }) { 
        if ($item->{ItemAttributes}->{ProductGroup} =~ /ebook/i ){
        # Yes, this is ebook you wanted!!
            print Dumper $item;
        }
    }
} else {
    print "Error: ", $response->message(), "\n";
}