UWSCでWeb翻訳する
UWSC公式掲示板に何やら面白そうなものがあったので、使ってみた。
Webの翻訳APIとのこと。
http://muumoo.jp/news/2007/05/09/0translationapi.html
日本語→英語と英語→日本語で呼び分けないといけないのと、結果取得が微妙なので工夫してみた。
呼び分けの解消は、正規表現で入力文字がアルファベットあたりだけかを見て判定。
結果の取得は、XPathを利用してみた。
webTrans.uws
OPTION EXPLICIT IFB GET_UWSC_NAME = "webTrans.uws" THEN WebTrans.Debug = TRUE DIM msg = "winnie the pooh" WHILE msg <> EMPTY msg = INPUT("Text", msg) msg = WebTrans.Trans(msg) WEND ENDIF MODULE WebTrans DIM _msxml DIM _regex PUBLIC Debug PROCEDURE WebTrans _msxml = CREATEOLEOBJ("MSXML2.XMLhttp") _regex = CREATEOLEOBJ("VBScript.RegExp") _regex.Pattern = "^[<#TAB>-~]*$" Debug = FALSE FEND PROCEDURE Send(msg) DIM pre IFB _regex.Test(msg) THEN pre = "ej_translation_api?_render=rss&text=" ELSE pre = "je_translation_api?_render=rss&text=" msg = ENCODE(msg, CODE_UTF8) ENDIF msg = pre + ENCODE(msg, CODE_URL) _msxml.Open("GET", "http://pipes.yahoo.com/poolmmjp/" + msg) _msxml.Send() FEND PROCEDURE WaitReady(cnt=100) WHILE _msxml.readyState <> 4 AND cnt > 0 SLEEP(0.01) cnt = cnt - 1 WEND IFB Debug THEN DIM msg = _msxml.responseText _regex.Pattern = "\n" _regex.Global = TRUE msg = _regex.Replace(msg, "<#CR>") PRINT msg _regex.Pattern = "^[<#TAB>-~]*$" ENDIF FEND FUNCTION Get(xpath="rss/channel/item/description") COM_ERR_IGN RESULT = _msxml.responseXML.selectSingleNode(xpath).text IF COM_ERR_FLG OR _msxml.status <> 200 THEN RESULT = EMPTY COM_ERR_RET FEND FUNCTION Trans(msg) Send(msg) WaitReady() RESULT = Get() FEND ENDMODULE
結果itemが複数返るケースは、ま、いっか。一つしか認識しません。
ま、機械翻訳ですから、そうそうは期待できません。
単語より文の方が得意みたい。
INPUT出してるけど、クリップボード経由でLinersさんのヘルプみたいにもできますね。