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

Perlで Google日本語入力 API 再び

perl googleapi

直してみた。JSONモジュールを使うように修正。
Encode::JavaScript::UCSというのがあるのを知った。
Encodeモジュールのサブクラスで大変簡潔に書かれて
いるので問題もないことでしょう。

#!/usr/bin/env perl
use strict;
use warnings;
use autodie;

use Encode;
use Encode::JavaScript::UCS;
use URI::Escape;
use LWP::UserAgent;
use JSON;
use utf8;

binmode STDOUT, ":encoding(UTF-8)";

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 = Encode::JavaScript::UCS::decode("JavaScript-UCS", $decoded);
my $json = JSON->new;
my $obj  = $json->relaxed([])->decode($decoded);

for my $paragraph (@{$obj}) {
    my ($yomi, $kouhos) = @{$paragraph}[0, 1];

    print "読み:\n $yomi\n";
    print "変換候補:\n";
    for my $kouho (@{$kouhos}) {
        print " $kouho\n";
    }
    printf "\n";
}
% perl google_japanese.pl はつねみく
読み:
 はつね
変換候補:
 初音
 初音
 初値
 はつね
 初子

読み:
 みく
変換候補:
 ミク
 ミク
 未来
 mixi
 Mixi

JSONモジュールの使い方を間違っていたのもありましたね。
ドキュメントが長いから調べたらいい場所がわかりづらいん
ですよね。サンプルコードがいっぱいあるとうれしいな〜。