auのデバイスIDから機種名を結びつけるハッシュを作るスクリプト

auのデバイスIDから機種名を調べようと思ったら
http://www.au.kddi.com/ezfactory/tec/spec/4_4.html
ここにある対応表を利用することになると思うのぢゃが、毎回調べるのも面倒ですな。

そこでこのページから
バイスID=>機種名
という形でハッシュデータを作成するスクリプトを作ってみたぞぃ。

#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;
use LWP::UserAgent;
use HTTP::Request;

sub get_devices
{
    my $user_agent = 'Mozilla';
    my $url        = 'http://www.au.kddi.com/ezfactory/tec/spec/4_4.html';
    my $referer    = '';
    my $str        = '';

    my $ua  = LWP::UserAgent->new();
       $ua->timeout(5);
       $ua->agent($user_agent);
    my $req = HTTP::Request->new(GET => $url);
       $req->referer($referer);
    my $res = $ua->request($req);

    if ($res->is_success()) {
        $str = $res->content();
    } else {
        die("request error.");
    }

    my %device = ();
    my %tmp    = reverse($str =~ m!<td bgcolor="#f2f2f2"[^>]*><div class="TableText">(.+?)</div></td>\s+<td><div class="TableText">(.+?)</div></td>!gs);

    for my $key (keys(%tmp)) {
        my $src_key = $key;
        $key =~ s!<[^>]+>|\s|&nbsp;!!gs;
        if (!$key) { next; }

        $tmp{$src_key} =~ s!\r\n|\t|<br>!!g;

        $device{$key} = $tmp{$src_key};
        if ($key =~ m!/!) {
            my @device_ids = split('/', $key);
            for my $device_id (@device_ids) {
                $device{$device_id} = $tmp{$src_key};
            }
            delete($device{$key});
        }
    }
    return \%device;
}

my $au_devices = get_devices();
print(Dumper($au_devices));

これを利用すれば、キーにデバイスIDを指定すれば機種名をとってこれますな。
ちなみに取得元のhtmlのフォーマットが変わっちゃうとうまく動作しなくなるかも・・・。