google-ime-api-normalizer RSSPLAIN

Related pages: kiyoka !kiyoka.blog.list kiyoka.2011_03_06 kiyoka.2010_12_30 !kiyoka.blog.2011_03 !kiyoka.blog.2010_12
55555555555555555553323555555555555555555555555555555555555555555555555555555444421222122124255
5

Google IME APIのJSON正常化: google-ime-api-normalizer

5

google-ime-api-normalizerは、Googleが提供するGoogle IME APIEXTが返すJSONを正常なJSONフォーマットにするプロキシです。

5

 

5

 

5

オリジナルのGoogle IME APIEXTの問題

5

Rubyなどの言語からJSONライブラリでGoogle IME APIを処理しようとするとパースエラーが出ます。

5

[Rubyでパースした例]

5
$ ruby ./google_api_call.rb 
5
/usr/local/stow/ruby-1.9.2-p136/lib/ruby/1.9.1/json/common.rb:146:in `parse': 376: unexpected token at '], (JSON::ParserError)
5
],
5
]
5
'
5
        from /usr/local/stow/ruby-1.9.2-p136/lib/ruby/1.9.1/json/common.rb:146:in `parse'
5
        from ./google_api_call.rb:20:in `block in <main>'
5
        from ./google_api_call.rb:19:in `each'
5
        from ./google_api_call.rb:19:in `<main>'
5

 

5

 

5

使いかた

3
  http://www.google.com/transliterate
3

の代りに

2
  http://google-ime-api-normalizer.heroku.com/transliterate
3

にアクセスするだけです。

5

リクエスト時に指定するパラメータなどは、オリジナルのGoogle IME APIEXTと同じです。

5

 

5

オリジナルのGoogle IME APIEXTとの違いは、返却するJSONのフォーマットのみです。

5

このプロキシを通すことで、下記の余分なコンマが除去され、PerlやRubyなどの一般的なJSONライブラリで正常にパースできます。

5

google-ime-api-response

5

 

5

 

5

サンプル

5

Ruby 1.9.1用

5

[ソースコード]

5
#!/usr/local/bin/ruby
5
# -*- coding: utf-8 -*-
5
5
require 'uri'
5
require 'net/http'
5
require 'pp'
5
require 'json'
5
5
def fetchJson( kana )
5
  body = ""
5
  Net::HTTP.version_1_2
5
  Net::HTTP.start('google-ime-api-normalizer.heroku.com', 80) {|http|
5
    path = sprintf( '/transliterate?langpair=%s&text=%s', 'ja-Hira|ja', URI.encode( kana ))
5
    response = http.get(path)
5
    body = response.body
5
  }
5
end
5
5
[ "せれんでぃぴてぃ",
5
  "しょかいきどう",
5
  "たけうちかんすう",
5
  "あいまいもじれつ",
5
  "あいまいけんさく",
5
  "かんじゃにえいと",
5
  "おれおれさぎ",
5
  "りあじゅう" ].each { |x|
5
  pp JSON.parse( fetchJson( x ))
5
}
5

 

5

[実行結果]

5
$ ruby ./google_api_call.rb 
5
[["せれんでぃぴてぃ",
5
  ["セレンディピティ", "Serendipity", "serendipity", "SERENDIPITY", "serendipity"]]]
5
[["しょかいきどう", ["初回起動", "諸開基堂", "初開基堂", "しょかいきどう", "ショカイキドウ"]]]
5
[["たけうち", ["竹内", "竹内", "武内", "タケウチ", "takeuchi"]],
5
 ["かんすう", ["関数", "関数", "館数", "巻数", "函数"]]]
5
[["あいまい", ["曖昧", "あいまい", "アイマイ", "合舞", "愛麻衣"]],
5
 ["もじれつ", ["文字列", "もじれつ", "モジレツ"]]]
5
[["あいまいけんさく", ["あいまい検索", "曖昧検索", "あいまいけんさく", "アイマイケンサク"]]]
5
[["かんじゃにえいと", ["関ジャニエイト", "患者に栄と", "患者に英と", "患者にエイト", "かんじゃにえいと"]]]
5
[["おれおれさぎ", ["オレオレ詐欺", "俺俺詐欺", "俺々詐欺", "おれおれさぎ", "オレオレサギ"]]]
5
[["りあじゅう", ["リア充", "リア厨", "リア中", "リ・ア中", "りあじゅう"]]]
5

 

5

 

4

ソースコード

4

kiyoka/google-ime-api-normalizer - GitHubEXT

4

 

4

 

2

TODO

1
done テストモードを追加する。Googleにアクセスせずに、特定の入力に対して固定の結果を返す
2
 (案)
2
 URLとして
2
 http://google-ime-api-normalizer.heroku.com/transliterate_test
1
 にアクセスし、"1" "2" "3" などの数字文字列を指定すると、
2
  [[[["あいまい", ["曖昧", "あいまい", "アイマイ", "合舞", "愛麻衣"]],
2
   ["もじれつ", ["文字列", "もじれつ", "モジレツ"]]]
1
 という結果を返す。
2
 そうすれば、Googleの内部辞書が変化してもクライアントのテストスイートは影響を受けないので固定できる。
4

 

2

 

5

このページへの質問・要望などありましたら、コメントおねがいします

5

...comment disabled...