「小飼弾」を検索して「空気嫁」って出ないバグについてというネタを振ろうとしたら本当にbugを見つけたというお話。
はてなダイアリー日記 - キーワード連想語API公開についてキーワード連想語API仕様の詳細については、以下キーワードをご参照ください。
はてなダイアリーキーワード連想語API
しかも(21:15現在)、なんかアクセス集中しているのかはてなキーワードがStatus 500で落ちてる(苦笑)(21:45現在直ってます)。
例題にあるPerl Scriptで日本語をぶっこむとなぜか動かない。Ruby版は問題ないのに。これではかゆいし、くやしいので、原因を探してみると、ありましたありました。
XMLRPC::Lite# 48:sub new { # 49: my $self = shift; # 50: # 51: unless (ref $self) { # 52: my $class = ref($self) || $self; # 53: $self = $class->SUPER::new( # 54: typelookup => { # 55: base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'], # 56: int => [20, sub {$_[0] =~ /^[+-]?\d+$/}, 'as_int'], # 57: double => [30, sub {$_[0] =~ /^(-?(?:\d+(?:\.\d*)?|\.\d+)|([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?)$/}, 'as_double'], # 58: dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'], # 59: string => [40, sub {1}, 'as_string'], # 60: }, # 61: attr => {}, # 62: namespaces => {}, # 63: @_, # 64: ); # 65: } # 66: return $self; # 67:}
そうなのです。XMLRPC::Liteは、Non-ASCIIな文字列はbase64でおくっておったのですね。
mkdir XMLRPC cp `perldoc -l XMLRPC::Lite` XMLRPC
としてオレlibを"."にAd-Hocにこさえて、太字の55行目をコメントアウトしたら、うまくいきまんた。
#!/usr/bin/perl use strict; use warnings; use lib "."; use XMLRPC::Lite; use utf8; binmode STDOUT => ":utf8"; my $res = XMLRPC::Lite->new->proxy('http://d.hatena.ne.jp/xmlrpc') ->call('hatena.getSimilarWord', { wordlist => [ "はてな" ] }); if ( my $fault = $res->fault ) { warn "$_ => $fault->{$_}" for ( keys %$fault ); } else { print join(", ", map { $_->{word} } @{$res->result->{wordlist}} ), "\n"; } __END__
実行結果:
ウェブマスターはてな,keyword,クエスチョン,人力検索はてな,はてなダイアリー,株式会社はてな,どんどん,サイト,ウェブサイト,疑問符,はてなアンテナ,マーク,2001年,キーワード,言葉,はてなスタッフ,ユーザー
これ、どちらのバグともいいがたいっちゃあいいがたいのですが、はてなにおかれましてはBase64 Encodeされたキーワードにも対応していただけるとうれPerl。
Dan the (Hatena|Perl) Monger
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。