OSX の Net::Domain::ExpireDate を .jp でも使う

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秒)
とりあえず報告してみた

See Also

Copyright © 髭。/ Hugo + hugo-book