読者です 読者をやめる 読者になる 読者になる

Perlで Google 日本語入力 API

perl googleapi

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 あまがさき
あまがさき
尼崎
尼ケ崎
尼ヶ崎
あまがさき
アマガサキ

うまいやり方がきっとあるはずなんだろうけど、よくわからん。