2006年02月15日 21:39 [Edit]

はてなキーワード連想語API vs. XMLRPC::Lite

小飼弾」を検索して「空気嫁」って出ないバグについてというネタを振ろうとしたら本当に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


この記事へのトラックバックURL

この記事へのトラックバック
誤解を恐れずに言えば、人の心はお金で買えるのです。女はお金についてきます。 2006年01月23日、証券取引法違反の容疑で逮捕されたライブドア元社長・堀江貴文氏がその著書『稼ぐが勝ち』光文社知恵の森文庫(2005)で書いている言葉です。新聞やテレビなどでしばしば引用...
人の心はお金で買える【喜八ログ】at 2006年02月15日 23:47
404 Blog Not Found:はてなキーワード連想語API vs. XMLRPC::Lite そうなのです。XMLRPC::Liteは、Non-ASCIIな文字列はbase64でおくっておったのですね。 以下のようにすれば base64 しないでそのまま string として送るようになります。 my $res = XMLRPC::Lite->new->proxy...
XMLRPC::Lite (SOAP::Lite) で base64 エンコーディングさせない【blog.bulknews.net】at 2006年02月16日 06:10
というわけで、patchを送っときました。 404 Blog Not Found:はてなキーワード連想語API vs. XMLRPC::Liteそうなのです。XMLRPC::Liteは、Non-ASCIIな文字列はbase64でおくっておったのですね。
patch - XMLRPC::Lite for UTF-8 string【404 Blog Not Found】at 2006年02月16日 21:10
<a href=http://www.freewebs.com/stoneblasers/drunklife.html>drunk girls fucking</a> <a href=http://www.freewebs.com/stoneblasers/drunklife.html>drunk yoda</a> <a href=http://www.freewebs.com/stoneblasers/drunklife.html>drunk milf</a>
drunk driving car crash【】at 2006年04月30日 02:59
XMLRPC::Liteを使って、MovableTypeのmt-xmlrpc.cgiにブログ記事を投稿しようとしたら、表題のエラーが出ました。 原因と対処法 原因はXMLRPC::Liteのバグのようです。 dankogai氏が解決方法をブログに書いておられます。 その通りにやったらうまく動きました。 ありがとうご
[Perl]XMLRPC::Liteでエラー。"Wide character in subroutine entry at ..XMLRPC/Lite.pm" 【TEST起業日記】at 2011年07月10日 23:00
XMLRPC::Liteを使って、MovableTypeのmt-xmlrpc.cgiにブログ記事を投稿しようとしたら、表題のエラーが出ました。 原因と対処法 原因はXMLRPC::Liteのバグのようです。 dankogai氏が解決方法をブログに書いておられます。 その通りにやったらうまく動きました。 ありがとうご
[Perl]XMLRPC::Liteでエラー。"Wide character in subroutine entry at ..XMLRPC/Lite.pm" 【DQNEO起業日記】at 2011年07月10日 23:01
XMLRPC::Liteを使って、MovableTypeのmt-xmlrpc.cgiにブログ記事を投稿しようとしたら、表題のエラーが出ました。 原因と対処法 原因はXMLRPC::Liteのバグのようです。 dankogai氏が解決方法をブログに書いておられます。 その通りにやったらうまく動きました。 ありがとうご
[Perl]XMLRPC::Liteでエラー。"Wide character in subroutine entry at ..XMLRPC/Lite.pm"【DQNEO起業日記】at 2011年07月11日 00:57