仕事中に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,"\n";
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,"\n";
さらに、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;
}
本当にこれでいいか、もうちょっと考えてからパッチとテストケース送ってみる
- そうか、Connected とは限らんわな - ひげまる (2009年06月03日 20時25分10秒)
- とりあえず報告してみた - ひげまる (2009年06月03日 21時57分34秒)
- Newer: Net::Domain::ExpireDate とりあえず patch 送った
- Older: うれしいヒトコト