WebService::DMMを書いてみた

DMMがようやく WebAPIを提供ということで書いてみました。
Perlのコードを久しく書いていなかったのでリハビリも兼ねてます。

サンプルコード

#!perl
use strict;
use warnings;

use lib '../lib';
use WebService::DMM;
use Config::Pit;

use utf8;

binmode STDOUT, ":utf8";

my $config = pit_get('dmm.co.jp', require => {
    affiliate_id => 'DMM Affiliate ID',
    api_id       => 'DMM API ID',
});

my $dmm = WebService::DMM->new(
    affiliate_id => $config->{affiliate_id},
    api_id       => $config->{api_id},
);

my @items = $dmm->search(
    site    => 'DMM.co.jp',
    service => 'mono',
    floor   => 'dvd',
    sort    => 'review',
    keyword => '蒼井そら',
    hits    => 10,
);

my $index = 1;
for my $item (@items) {
    printf "%2d: %s\n", $index, $item->title;
    $index++;
}

結果

 1: 公然妄想露出 アエギ声出しちゃダメ!! 蒼井そら
 2: 蒼井そら エスワン8時間Special
 3: 秘密捜査官の女 被虐の巨乳エージェント 蒼井そら
 4: Sola様のM調教 蒼井そら
 5: ギリギリモザイク 妄想的特殊浴場 本指名 蒼井そら
 6: 夫の目の前で犯された若妻 蒼井そら
 7: ギリモザ 交わる体液、濃密セックス 蒼井そら
 8: ギリギリモザイク 繰り返す昇天、壮絶アクメ。 蒼井そら
 9: 極美映像 ハリウッド基準で魅せる超高画質セックス 蒼井そら
10: 犯された人妻女教師 蒼井そら

おわりに

レスポンスが EUC-JPでエンコーディングされた XMLなんですが、
これは一体誰得なんでしょうか ? LibXMLで EUC-JPの XMLがパース
できるかは環境依存ぽかったので、UTF-8に変換してからパース
しています。


DMMは、「このページ, テンプレート使って書いてるの?」みたいなのが
多々あり(あるところだけ、class属性が抜けているなど)、とてもスクレーピング
しづらかったので、これでいくらかマシになったように思えます。
ただ EUC-JPとか XMLとか今時の Web APIではないように思えました。


もう少し、修正とテストをして CPANに出すか検討します。