Perlで Google 日本語入力 API
http://www.google.com/intl/ja/ime/cgiapi.htmlのやつを
Perlから利用してみようと思ったんだけど、Unicodeエスケープされた
文字を JSONモジュールで評価するとうまくいかない。\uというのが
uppercaseとして解釈されてしまうせいか、消えてしまいます。
配列しか戻ってこないので, evalでなんとかなるな〜と思って作って
みたのがこちら。セキュリティ的に問題ありそうだけど...
Unicodeエスケープをよく知らないのですが Javaとか Javascriptからの
利用を主に考えているのかな。
#!/usr/bin/env perl use strict; use warnings; use autodie; use Encode; use URI::Escape; use LWP::UserAgent; use Unicode::Escape; my $word = shift or die "Usage $0 word\n"; my $url_base = 'http://www.google.com/transliterate?langpair=ja-Hira|ja&text='; my $ua = LWP::UserAgent->new(env_proxy => 1); my $url = $url_base . uri_escape_utf8(decode_utf8($word)); my $res = $ua->get($url); if ($res->is_error) { die "Can't download $url(word : $word)\n"; } my $decoded = $res->decoded_content; $decoded = Unicode::Escape::unescape($decoded); if ($decoded =~ m{(?:system|unlink|rm)}) { die "Error : included invalid instruction\n"; } my $obj = eval $decoded; $obj = pop @{$obj}; my $yomi = $obj->[0]; my $kouho = $obj->[1]; print $yomi, "\n"; for my $k (@{$kouho}) { print $k, "\n"; }
結果
% perl google_japanese.pl あまがさき あまがさき 尼崎 尼ケ崎 尼ヶ崎 あまがさき アマガサキ
うまいやり方がきっとあるはずなんだろうけど、よくわからん。