UWSCで簡単な翻訳を行う
UWSC公式掲示板で、「20文字程度のたくさんの翻訳ができません。誰かやって」とかいう丸投げ案件があがっていた。
stuncloudさんが丁寧な回答をしているので、良かったのだけど、一応書いてみて、どうしようか検討してたヤツをここに晒す。
これは、Googleの翻訳APIではなく、Google翻訳が隠しで提供しているAPIを叩いている。
規約的に問題あると思うし、仕様変更で使えなくなる可能性もあることに留意願いたい。
スクリプト
trancelate.uws
OPTION EXPLICIT IFB LENGTH(PARAM_STR) THEN // Test DIM res = "NG" SELECT PARAM_STR[0] CASE "TEST" res = Trancelate.Do("私はUWSCが好きです。") IF res = "I like UWSC." THEN res = "OK" DEFAULT res = Trancelate.Do(PARAM_STR[0]) SELEND MSGBOX(res) ELSE IFB GET_UWSC_NAME = "trancelate.uws" THEN // DEMO DIM msg = "test" WHILE LENGTH(msg) > 0 msg = INPUT("翻訳したい日本語を入力してください。") IF LENGTH(msg) > 0 THEN MSGBOX(Trancelate.Do(msg)) WEND ENDIF ENDIF MODULE Trancelate CONST DEF_URL = "https://translate.googleapis.com/translate_a/single?" CONST JA_EN_PARAM = "client=gtx&sl=ja&tl=en&dt=t&q=" DIM _sc PROCEDURE Trancelate() _sc = CREATEOLEOBJ("ScriptControl") _sc.Language = "JScript" _sc.ExecuteStatement("Array.prototype.Get = function(i) { return this[i]; }") FEND FUNCTION Do(msg, async=FALSE, method="GET") DIM http = CREATEOLEOBJ("MSXML2.XMLhttp") http.open(method, DEF_URL + JA_EN_PARAM + ENCODE(ENCODE(msg, CODE_UTF8), CODE_URL), FALSE) http.send() RESULT = http.statusText IFB http.status = 200 THEN // JSONをEvalしちゃうのは非推奨 DIM res = _sc.Eval(http.responseText) RESULT = res.Get(0).Get(0).Get(0) ENDIF FEND ENDMODULE