ゆーすけべー日記

はてなBlogってどーなの!?

Amazonアソシエイト決算2007.11を発表するテスト

Danさんの真似をして「Amazonの2007年11月分の決算の集計が終わったので結果を発表します。」というこのエントリーを書くために、 AmazonアソシエイトからのレポートをXMLで取得して、パースしてHTMLに書きだすというPerlのスクリプトを書いた。で、みてみた。所詮、俺なんかの範疇では3位くらいまでしかちゃんと格付けできないことがわかった。 そして、エロDVDがたくさん売れてた。

というしょぼいランキングですが、せっかく作ったので、1位から3位を紹介します。 エロDVDはその中には含まれていないので心配ご無用です。

えー、1位は「いかにして問題をとくか」でした。 「ゆーすけべー日記: いかにして効率よく大量のおっぱい画像をダウンロードするか」というエントリーに張ったのが功を奏し結構売れてます。 実際、いい本なので、まだ味読の人は是非。 個人的には、3位以内には入っていませんが、 「ゆーすけべー日記: "Welcome To The Black Parade" - My Chemical Romance」で紹介したマイケミの「ザ・ブラック・パレード」が売れたのが嬉しいです。

日記で言及してなくても結構売れたりするものですね。 ちなみに、Amazonが出力するreport.xmlをパースしてHTMLに書き出すPerlのスクリプトはこんな感じです。 中古で売れた本の重複を防いだり、順位付けをするため、ちょっと長くなってます。

#!/usr/bin/perl

use strict;
use warnings;
use XML::XPath;
use XML::XPath::XMLParser;
use Template;
use Unicode::RecursiveDowngrade;

my $xp = XML::XPath->new( filename => 'report.xml' );
my $nodeset = $xp->find('//Item');
my @lists;
foreach my $node ( $nodeset->get_nodelist ) {
    #print Dumper($node);
    my %attribute;
    foreach my $attr ( @{$node->find('@*')} ){
    $attribute{$attr->getName} = $attr->getNodeValue;
    }
    push(@lists, \%attribute);
}

my @items;
foreach my $list (@lists) {
    my $flag = 1;
    foreach my $item (@items) {
    if( $list->{Title} eq $item->{Title}){
        $item->{Qty} ++;
        $flag = 0;
        last;
    }
    }
    push(@items, $list) if $flag;
}

@items = sort { $b->{Qty} <=> $a->{Qty} } @items;

my $num = $items[0]->{Qty};
my $no = 1;

foreach my $item (@items) {
    if( $item->{Qty} == $num ) {
    $item->{No} = $no;
    }else{
    $num --;
    $no ++;
    $item->{No} = $no;
    }
}

my $rd = Unicode::RecursiveDowngrade->new;
my $ref = $rd->downgrade(\@items);

my $tt = Template->new;
$tt->process(\*DATA,{items=>$ref})
    || die $tt->error(), "\n";

__DATA__
<ul>
[% FOREACH item = items -%]
<li style="margin-bottom:10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/[% item.ASIN %]/kamawada-22/">
<img src="http://images.amazon.com/images/P/[% item.ASIN %].01._SCTHUMBZZZ_.jpg" align="left" />
</a>
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/[% item.ASIN %]/kamawada-22/">
[% item.Title %]</a><br />
[% item.No %]位だよ!
<br clear="all"/>
</li>
[% END -%]
</ul>