Excite翻訳に日本語テキストを渡して翻訳結果を得る

その他の話題
04 /12 2015
日英翻訳を行うサービスを使って、日本語テキストを英語に変換するプログラムを書いてみた。
今回使うのは、普段からよく利用しているExcite翻訳
Google Translate API や MicrosoftのAPIも調べたが、登録が必要なので却下。

Excite翻訳についても、XMLが使えるとか、HTTP POSTでやりとりする情報がいくつか見つかったが、情報が古いせいか、試行錯誤してみたがどうもうまくいかなかった。
そこで、最も手っ取り早くて確実な方法、すなわちHTTP GETで原文を渡し、結果をHTMLで取得してから必要なデータだけを切り出すことにした。

まずはブラウザに以下のURLを入力してみる。
http://www.excite.co.jp/world/english/?before=I+like+apple&wb_lp=ENJA
これで、Excite翻訳のサイトが開き、左側のテキストボックスに"I like appe"、右側に"私はりんごが好きである"と表示される。
(もしこれができないようなら、Excite翻訳の仕様が変わったのかもしれない。2015年4月現在は問題ない。)

ここまでできれば、後は人間とブラウザの代わりにPHPがパラメータを送信して結果を解析すれば良い。
以下はその全ソース。


<?php
/**
* Excite翻訳に日本語テキストを渡して翻訳結果を得る
*/

// 起動時オプションの解析
$options = getopt('hv');
if (isset($options['h']))
help();

function help() {
echo "Excite翻訳に日本語テキストを渡して翻訳結果を得る\n"
."Usage: ". basename($_SERVER['PHP_SELF']). " [-h][-v] < 日本語テキストファイル\n"
." -h Helpを表示して終了\n"
." -v 饒舌モード\n";
exit;
}

// 饒舌モード
$verbose = FALSE;
if (isset($options['v']))
$verbose = TRUE;

// 標準入力から全部読む
$input = file_get_contents('php://stdin');
$input = str_replace("\r", '', $input);
// HTTP GETを使う都合上、600byte以内に納める
// ("あ"はUTF8では3byteだが、url_encodeすると9byteになる
// → GETは通常2000byte程度が上限なので、1/3以下の600byteに抑える)
if (strlen($input) > 600) {
// 1行ずつ文字数を数え、600を超えるまで足していく
$a = explode("\n", $input);
$input = '';
foreach ($a as $s) {
if (strlen($input. $s) > 600)
break;
$input .= "$s\n";
}
}
if ($verbose)
echo $input;

// Excite翻訳の呼び出し先URL
// HTTP POSTやXML通信などを試行錯誤してみたが、結局HTMLをGETする方法しかうまくいかなかった
$url = "http://www.excite.co.jp/world/english/?before=". urlencode($input). "&wb_lp=JAEN&ie=UTF-8";

// HTML丸ごと取得
$contents = file_get_contents($url);
#echo $contents;

// 翻訳結果の部分だけ得る
$after = '';
if (preg_match('/<textarea id="after"[^>]+>(.*)<\/textarea>/Uu', $contents, $match)) {
$after = htmlspecialchars_decode($match[1]);
$after = str_replace('&#010;', "\n", $after);
}
echo "$after\n";


使い方は、コマンドラインで
$ echo "こんにちは、世界!" | php excite.php
とするか、あらかじめ日本語のテキストファイル(例えば nihongo-file.txt )を作っておき、
$ php excite.php < nihongo-file.txt > eigo-file.txt
のようにすれば良い。

コメント

非公開コメント

Paq

忘れっぽい中年プログラマが、日々の開発作業の中で、忘れると困ることを書き留めています。