OSX の Net::Domain::ExpireDate を .jp でも使う #
仕事中にNet::Domain::ExpireDate 使おうとしたら、対応コード入ってるっぽいのに .jp で使えなかったので、別の方法で解決したんだが、気になるので、ちょっとやってみた
Leopard だと strptime() が LANG=C じゃないと null 返すのでハマったが、それは後で調べる
Net::Domain::ExpireDate はいじらずに、そのまま使う #
use strict;
use warnings;
use Net::Domain::ExpireDate;
use Encode;
my $domain = "haro.jp";
my $whois = Net::Whois::Raw::whois($domain);
$whois = encode('iso-2022-jp', $whois);
my $expdate = expdate_fmt($whois, 'jp','%Y-%m-%d');
print $expdate,"\
";
Net::Domain::ExpireDate にパッチ当てる #
でも、こんな感じで普通に使いたい
use strict;
use warnings;
use Net::Domain::ExpireDate;
my $domain = "haro.jp";
my $expdate = expire_date( $domain, '%Y-%m-%d' );
print $expdate,"\
";
さらに、Net::Domain::ExpireDate は、.co.jp や .ne.jp だと使えない
つうわけで、こんな感じ
--- ExpireDate.pm 2009-04-08 17:23:06.000000000 +0900
+++ ExpireDate.pm.new 2009-06-02 22:31:18.000000000 +0900
@@ -124,6 +124,9 @@
if ($tld eq 'ru' || $tld eq 'su') {
return (dates_int_ru( $whois ));
} else { # 'com', 'net', 'org', 'biz', 'info', 'us', 'uk', 'cc'
+ if ( $tld eq 'jp' ) {
+ eval {$whois = Encode::encode('iso-2022-jp', $whois) if Encode::is_utf8($whois);};
+ }
my $expdate = $flags & FLG_EXPDATE ? expdate_int_cno( $whois ) : undef;
my $credate = $flags & FLG_CREDATE ? credate_int_cno( $whois ) : undef;
return ($credate, $expdate);
@@ -276,6 +279,8 @@
# [whois.jprs.jp] [....] 2006/12/31
} elsif ($whois =~ m|\\[\\x1b\\x24\\x42\\x4d\\x2d\\x38\\x7a\\x34\\x7c\\x38\\x42\\x1b\\x28\\x42\\]\\s+(\\d{4})/(\\d{2})/(\\d{2})|s) {
$rulenum = 7.4; $Y = $1; $m = $2; $d = $3;
+ } elsif ($whois =~ m|\\[\\x1b\\x24\\x42\\x3e\\x75\\x42\\x56\\x1b\\x28\\x42\\]\\s+Connected\\s+\\((\\d{4})/(\\d{2})/(\\d{2})|s) {
+ $rulenum = 7.4; $Y = $1; $m = $2; $d = $3;
}
本当にこれでいいか、もうちょっと考えてからパッチとテストケース送ってみる
[ひげまる] (2009年06月03日 20時25分10秒)
そうか、Connected とは限らんわな[ひげまる] (2009年06月03日 21時57分34秒)
とりあえず報告してみた