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
のようにすれば良い。

固定IPアドレスを使う

その他の話題
04 /01 2010

私が愛用している栃木CATVでは、個人で固定IPアドレスを利用することができない。
法人契約にすれば可能らしいが、4,000円/月から10,000円/月になってしまう。これはちょっと高すぎる。

フレッツADSLへの乗り換えも視野に入れつつ(残念ながら私の家ではフレッツ光も使えないし、イーアクセスも使えなかった)、どうにかして固定IPを使えないかと調べていたら、いいサービスがあった。

マイIP (固定IP取得)サービス - INTERLINK

とりあえず最大2ヶ月無料で使えるらしいので、さっそく契約してみよう・・と思ったら、
「契約した日の翌月末まで無料」だった。
この日は3月31日。これだと無料期間が4月30日までになってしまう。
一晩待って、4月1日に契約することにした。

さて、いざ契約してみたは良いが、手順の通りに設定をしても接続ができない。
「エラー678:リモートコンピュータが応答しませんでした。」と怒られてしまうのだ。
CATVのせいか?フレッツに関しては事例が豊富だがCATVの事例は無い。
はたまたルータのせいか?動作確認済みルータには私の corega BAR pro2 は無い。
ちなみにこのルータにはVPNパススルー機能があり、無効になっていたので有効に変えたが、変わらない。

しばらく悩んだが、試しにルータを再起動してみると、アッサリうまくいった。
少し使ってみたところ、エラー619や774などが出たりしたので、多少の調整を要したが、その後は問題ないようだ。
参考までに、現在の設定値を記しておく。

"my固定IP"のプロパティ:("my固定IP"は私が勝手に決めた名前)

  • 全般
    宛先のホスト名またはIPアドレス
    203.***.***.***(マイIPの契約時に割り当てられたアドレス)
  • オプション
    接続時に進行状況を表示する
    名前、パスワード、証明書などの入力を求める
    Windows ログオン ドメインを求める
    リダイヤル回数:3
    リダイヤル間隔:30秒
    切断するまでの待ち時間:切断しない
    回線が切断されたら、リダイヤルする
  • セキュリティ
    標準(推奨設定)
    IDを確認する方法:セキュリティで保護されたパスワードが必要
    Windows ログオン名をパスワードを自動的に使う
    データの暗号化を必ず使う
  • ネットワーク
    VPNの種類:PPTP VPN([設定]は標準のまま)
    この接続は次の項目を使用します:
    インターネット プロトロル(TCP/IP)
    QoS パケット スケジューラ
    他はチェックを外す
    • インターネット プロトロル(TCP/IP)のプロパティ
      IPアドレスを自動的に取得する
      DNSサーバーのアドレスを自動的に取得する
      • 詳細設定
        リモート ネットワークでデフォルト ゲートウェイを使う
        他はデフォルトのまま
  • 詳細設定
    • 設定 → Windows ファイアウォール
      有効(推奨)
      例外を許可しない

"my固定IP"の接続ダイアログ:
ユーザー名:mi*****(マイIPの契約時に割り当てられたID)
パスワード:********(mi******と同時に表示されたパスワード~

このコンピュータに設定されている効果の制約のため・・・

その他の話題
09 /09 2009

XLSファイル内のハイパーリンクを開こうとすると、「このコンピュータに設定されている効果の制約のため、この操作は中止されました。システム管理者にお問合せください。」というエラーが出るようになってしまった。
システム管理者は私なのだが・・・。

ググってみると、Microsoftサポートオンラインに2つの記事が見つかった。
(1) Outlook でハイパーリンクをクリックすると、エラー メッセージが表示される
(2) Outlook Express 6 で電子メール内の Web アドレスのリンクをクリックしても、Web ページが表示できない場合の対処方法

(1)を参考にしてレジストリを見ると、確かに
HKEY_Local_Machine\Software\Classes\htmlfile\shell\open\command
が無い。
HKEY_Local_Machine\Software\Classes\htmlfile\shell
ここまでは存在したが、この下に Edit と Print しか無かった。
IEの再インストールや設定の変更は面倒だし、(2)の後半に書いてある regsvr32 urlmon.dllを試したが、レジストリは再生されなかった。
そこで、ダメモトでレジストリを手動で書いたところ、うまくいった。
以下のように操作した。

  1. Shellを右クリック→新規→キー→「Open」と入力。
  2. Openをクリック→右ペインの"(規定)"をクリック→「&Open」と入力。
  3. Openを右クリック→新規→キー→「command」と入力。
  4. Commandをクリック→右ペインの"(規定)"をクリック→ブラウザのURLを入力。
    例:「"C:\Program Files\Browsers\Sleipnir\bin\Sleipnir.exe"」
  5. Excelを閉じて開き直す。

FAX送信サービス比較

その他の話題
01 /09 2009

各種の文書ファイルをFAXで送信したい。 簡単確実な方法は、プリンタで印刷してFAX機から送信する方法だ。 が、これだと紙を消費するし、ファインモードであっても細かい文字はつぶれてしまう。やはりデジタルなデータはデジタルのまま送りたい。 FAXモデムを使う方法もあるが、今手元にはFAXモデムがない。少量の送信をしたいだけなのでわざわざ買ってくるのももったいないし、今時FAXモデムを使うというのも時代に逆行している気がする。 やはりここは、Web上のサービスを利用したい。 という事で、今利用するならどこのサービスがよいか、調べてみた。 安いこと、月々の基本料がかからないこと、メールかブラウザだけで送れること、最低でもPDF対応(できればdocやxlsにも対応していて欲しい)が条件である。

D-FAX

登録すると020で始まる電話番号がもらえて、FAXからパソコンへの送信が無料で出来るようになる。送信側には料金がかかる。 Webで検索してみると「パソコンからFAXへの送信もできる」という情報があったが、D-FAXのサイトで調べてみたところ、これは出来ない模様。残念。

結論:基本的に出来ない

e-ネコWebFAX

初期導入費用:無料 月額基本料金:無料 1枚あたりの送信料:25.2円(ファイン37.8円)夜間割引有り

最も安い。 が、残念ながら法人契約のみだった。 個人でも頼めば加入させてくれるのかもしれないが、そこまでは調べていない。

結論:法人のみ

@nifty FAX出力サービス

1枚あたりの送信料:テキスト42円 、画像126円

画像を送ると高い。 それ以前に、このサービスは @nifty.com 会員専用だった。 niftyには、@nifty.com と @nifmail.jp の2種類のメールアドレスがある。 前者はniftyの接続サービスを利用している会員、後者は無料のWeb会員。(詳しい説明) 私はCATVを利用しているので、@nifty.com のアドレスは持っていないし申し込むつもりもない。

結論:nifty接続サービスを申し込まないとダメ

BIGLOBE FAX配信サービス

1枚あたりの送信料:42円(海外は別料金)

BIGLOBE会員になる必要があるが、「BIGLOBEサービス会員でない方も月額基本料不要の「コンテンツ」コースに申し込めばご利用いただけます。」との事。 このあたりniftyも見習って欲しい。 コンテンツコースは初期費用も月額基本料も無料なので、FAX送信のためだけに入会しても損はない。

iFAX(インターネットFAX)

初期導入費用:無料 月額基本料金:6.3円 1枚あたりの送信料:25.2円 夜間19.95円

NTT Communicationsのサービスだけ合って、固定電話(NTT東日本・西日本)を持っていることが条件。 我が家にもNTT回線はあるので、これは問題ない。 個人のお客さま向けサービス一覧のページを見るとiFAXは「法人向けサービス」に分類されているようだが、「個人事業~中小法人のお客さま」という分類もあるようなので、「個人事業主だ」と主張すれば受け入れてくれるのではないだろうか。

以上5社を比較検討してきた。最終候補はBIGLOBEiFAX。 両者を費用面で検討してみる。 iFAXの方が1枚あたりの料金は安いが、月額基本料がかかる。 25.2 ?+6.3*3 = 44.1 19.95+6.3*3 = 38.85 なので、3ヶ月に1枚FAX送信する程度の頻度であれば、両者はほぼ同程度。 それ以上の頻度(2ヶ月に1枚以上)送るならiFAXの方が安い。 4ヶ月に1枚以下の頻度であればBIGLOBEの方が安い。

iFAXで「1枚送ったら解約(休止)、送りたくなったら再開」するような柔軟な対応が出来るならiFAXがベストだが、申し込んでからサービス開始までに1週間程度かかるらしい。FAXはたいてい「今すぐに送りたい」ので、解約~再開の繰り返しが仮に出来たとしても現実的では無さそうだ。

私の場合、FAXを送る頻度はおそらく半年に1度程度。 また固定料金サービスはいったん申し込んだらなかなか解約しない性格なので、おそらくiFAXでは無駄がある。

と言う事で、BIGLOBEに申し込んでみることにした。 BIGLOBEのアカウントを持つのは、PC-VAN時代以来なので十数年ぶりだ。 Web上でクレジットカードなどを入力したら仮パスワードが発行され、すぐに会員サービスが利用できるようになった。 さっそくFAX送信のテストをしてみよう・・かと思ったが、42円かかるので保留。 後でやろう。

初投稿

その他の話題
07 /02 2007

ジャストシステムブログを使ってみることにした。
何はともあれ、テスト投稿。

WYSIWYGエディタは、機能的には少ない気がするが、最低限のものはありそう。
「1つ戻る」(Ctrl-Zのようなもの)があるといいな。

Enterキーで<p>、Shift+Enterで<br>なのは使いづらい気がするけど、これが普通?

Paq

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