1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Mind Webアプリケーション(CGI)で「禅の言葉」を得てGoogle翻訳で和訳

Last updated at Posted at 2024-01-20

はじめに

前回は気象庁のAPIを使って天気概況を取得するアプリケーションを作りましたが、今回はGoogle翻訳を使ってみます。
参考にした(というよりも殆どパクった)記事は以下です。有用な投稿に心から感謝致します。

Google翻訳APIを作る

Google無料アカウントで作れます。

Apps Scriptのページを開き

shot_240118_102428.jpg

コードを選択して

shot_240118_230219.jpg

参考ページのコードを無修正で貼り付けてデプロイ

shot_240118_230324.jpg

ウェブアプリを選択して

shot_240118_230340.jpg

アクセス出来るユーザーは全員にして

shot_240118_230413.jpg

デプロイが完了

shot_240118_230436.jpg

ウェブアプリの デプロイIDWebアプリURL をコピーしてメモ帳などに貼り付け、保存します。

「禅の言葉」をAPIで取得

禅の言葉は以下のURLを叩くと得られます。

GithubのAPIは、同一IPからのアクセスが一時間に60回までと制限されています。飲み過ぎ、食べ過ぎ、使い過ぎにご注意下さい。

プログラム

実行環境はこちらを参照して下さい。

ライブラリはこちらを参照して下さい。

コード
cgi-zen.src

※タイトル	禅の言葉を得て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はダブルクオートで挟む必要があります。

実行結果

shot_240120_211216.jpg

起動して、英文を入力し、[英和翻訳]すると翻訳されます。

shot_240120_211235.jpg

[禅の言葉]をクリックすると都度異なる「禅の言葉」が得られます。

shot_240120_211319.jpg

[英和翻訳]すると和訳が表示されます。

shot_240120_211331.jpg

おわりに

翻訳出来るのはワン・センテンスだけです。ピリオド以降は翻訳されません。

1
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?