はじめに
前回は気象庁のAPIを使って天気概況を取得するアプリケーションを作りましたが、今回はGoogle翻訳を使ってみます。
参考にした(というよりも殆どパクった)記事は以下です。有用な投稿に心から感謝致します。
Google翻訳APIを作る
Google無料アカウントで作れます。
Apps Scriptのページを開き
コードを選択して
参考ページのコードを無修正で貼り付けてデプロイ
ウェブアプリを選択して
アクセス出来るユーザーは全員にして
デプロイが完了
ウェブアプリの デプロイID、WebアプリURL をコピーしてメモ帳などに貼り付け、保存します。
「禅の言葉」をAPIで取得
禅の言葉は以下のURLを叩くと得られます。
GithubのAPIは、同一IPからのアクセスが一時間に60回までと制限されています。飲み過ぎ、食べ過ぎ、使い過ぎにご注意下さい。
プログラム
実行環境はこちらを参照して下さい。
ライブラリはこちらを参照して下さい。
コード
※タイトル 禅の言葉を得てGoogle翻訳で和訳
※リンク cgilib
※作成日 2024/01/20
"srclib\unidecode"を、コンパイルする。 ※←注目!
"htmlform.src"を、コンパイルする。
成功?とは、真?と、等価。
失敗?とは、偽?と、等価。
JSONファイルは、ファイル。
JSONファイル名は、"zen.json"。
JSONデータは、文字列実体、長さ、8192バイト。
作業文字列は、文字列実体、長さ、8192バイト。
子プロセス実行文字列は、文字列実体、長さ、1024バイト。
翻訳前文字列は、文字列実体、長さ、1024バイト。
翻訳後文字列は、文字列実体、長さ、1024バイト。
全ての空白を_に置換とは (置換前文字列 → 置換後文字列)
置換前文字列は、文字列実体、長さ、8192バイト
置換後文字列は、文字列実体、長さ、8192バイト
切り出し文字は、変数
置換前文字列に、入れる
置換前文字列の、文字数で、回数指定し
置換前文字列から、一文字切り出し、切り出し文字に、入れる
切り出し文字が、' 'に、等しい
ならば
'_'を
さもなければ
切り出し文字を
つぎに
置換後文字列に、一文字追加する
繰り返す
置換後文字列を、返す。
禅ファイルは、ファイル。
禅ファイル名は、"cgi-zen.txt"。
禅の言葉は、文字列実体、長さ、1024バイト。
禅の言葉を得るとは ( ・ → 文字列 )
ここから
禅ファイル名が、ファイル有り?
ならば
一秒待つ ※排他制御(他の誰かが使っている)
さもなければ
打ち切り
つぎに
繰り返す
「cmd /c curl "https://api.github.com/zen" > 」を、子プロセス実行文字列に、入れる
禅ファイル名を、子プロセス実行文字列に、追加する
子プロセス実行文字列で、子プロセス実行する
禅ファイルを、禅ファイル名で、オープンする
禅ファイルから、一行読み込み、禅の言葉に、入れる
禅ファイルを、クローズする
禅ファイル名で、ファイル削除し
禅の言葉を、返す。
英和翻訳とは ( 英文文字列 → 和文文字列 )
分断位置は、変数
英文文字列は、文字列実体
英文文字列に、入れる
Unicodeデコードテーブルを読み出しし、偽?
ならば
重大エラー
つぎに
ここから
JSONファイル名が、ファイル有り?
ならば
一秒待つ ※排他制御(他の誰かが使っている)
さもなければ
打ち切り
つぎに
繰り返す
「cmd /c curl -L "https://script.google.com/macros/s/」を、子プロセス実行文字列に、入れる
「(デプロイID)/exec?text=」を
子プロセス実行文字列に、追加し
英文文字列を、子プロセス実行文字列に、追加し
'&'を、子プロセス実行文字列に、一文字追加し
「source=en」を、子プロセス実行文字列に、追加し
'&'を、子プロセス実行文字列に、一文字追加し
「target=ja" > 」と、JSONファイル名を、合成し、子プロセス実行文字列に、追加し
子プロセス実行文字列で、子プロセス実行する
JSONファイル名で、JSONファイルを、オープンする
JSONファイルから、一行読み出し、作業文字列に、入れ
作業文字列を、UTF8→SJIS変換し、JSONデータに、入れる
JSONファイルを、クローズする
JSONファイル名を、ファイル削除する
JSONデータから、','を、一文字検索したところで、JSONデータを、分断し、捨てる
JSONデータから、8文字、切り出し、捨てる
JSONデータから、2文字、右側切り出し、捨てる
JSONデータを、翻訳後文字列に、入れる。
メインは
メインの前処理する
私のプログラム名・短縮を、中で一行表示
「禅の言葉」の、その値が、空列?
でなければ
禅の言葉を得て、翻訳前文字列に、入れる
つぎに
「禅の言葉」、「禅の言葉」で、データ送信ボタン作成する
「翻訳前文字列」、0文字制限、60文字幅、翻訳前文字列で、一行テキスト入力フォーム作成する
「英和翻訳」、「英和翻訳」で、データ送信ボタン作成する
「英和翻訳」の、その値が、空列?
または
「翻訳前文字列」の、その値が、空列?
でなければ
「翻訳前文字列」の、その値を、翻訳前文字列に、入れ
翻訳前文字列の、全ての空白を_に置換し、英和翻訳する
つぎに
翻訳前文字列を、小さく一行表示し
翻訳後文字列を、中で一行表示する
メインの後処理すること。
コードの中の(デプロイID)と書かれたところに、Apps Script で得られた デプロイID を入れて下さい。
curl コマンドは、パラメーター"-L"を付けて、リダイレクトに対応する必要があります。また、URLはダブルクオートで挟む必要があります。
実行結果
起動して、英文を入力し、[英和翻訳]すると翻訳されます。
[禅の言葉]をクリックすると都度異なる「禅の言葉」が得られます。
[英和翻訳]すると和訳が表示されます。
おわりに
翻訳出来るのはワン・センテンスだけです。ピリオド以降は翻訳されません。