« 6月18日 放棄放棄 | メイン | 学会誌をたくさん借りてきた »

2008年06月18日

IANA から TLD の情報を抽出するスクリプト

TLD の組織名や URL を抽出するスクリプトを書きました。Whois Gateway を作成中なのです。数年前にも作成していたのですが、頓挫していました。

use strict;
use warnings;

use LWP::Simple;

my $base = 'http://www.iana.org/domains/root/db/';

my $html = get($base);

my $re =
    '<td><a href="/domains/root/db/([\w\.-]+)">([^<]+)</a></td>' .
    '<td>([^<]+)</td><td>([^<]+)<';

while ($html =~ /$re/go) {
    my $tld  = $2;
    my $type = $3;
    my $org  = $4;

    my ($url, $whois) = get_tld_info(get($base . $1));

    printf("%s\t%s\t%s\t%s\t%s\t\n", $tld, $type, $org, $url, $whois);

    sleep 2;
}

sub get_tld_info {
    my ($html) = @_;
    my $url   = '';
    my $whois = '';

    if ($html =~ m|<b>URL for registration services:</b> <a [^>]+>([^<]+)</a>|) {
        $url = $1;
    }

    if ($html =~ m|<b>WHOIS Server:</b> ([^<]+)<|) {
        $whois = $1;
    }

    return $url, $whois;
}

ご利用は自己責任で…。

作成している Whois Gateway は CPAN の Net::Whois::Raw を利用していますが、拡張性がイマイチです。特に HTTP 経由で情報を取得する TLD を追加する場合、基のソースを弄らないといけない(オーバーライドで一部だけ弄れるのかな)。また、設定されている WHOIS Server が少なかったり古かったり。

パッチファイル作成にチャレンジしてみようかな。

【関連情報】
・IANA — Root Zone Database
 http://www.iana.org/domains/root/db/
・Walery Studennikov / Net-Whois-Raw - search.cpan.org
 http://search.cpan.org/dist/Net-Whois-Raw/

2008年06月18日 23:41 | Programming

トラックバック

コメント