3.2 KiB
+++ date = "2019-12-15JST" tags = ["gscript"] title = "Google Apps Scriptで翻訳してみた" slug = "gscript" +++
今回使用するのは、Google Apps Script
というものです。Google Translate APIが有料しか無かったのでこちらを使うことにしました。
ハマりどころが多かったので、ポイントだけ。
まず、公開時(リリース時)は、必ずNewでバージョンをつけないと、更新されない
みたいです。空にした場合、2,3,4と自動で番号が付きます。同じバージョンを選ぶと、内容は保存されているみたいですが、デプロイされていない状態だと思われます。
次に、curl
で、-X POST
が機能しないので、書き方が悪いのかなあと思っていたら、本当に機能しないみたいです。機能するポストは以下。
$ curl -L -d ""
function doPost(e) {
var contents = e.postData.contents;
var d = JSON.parse(contents);
var spanish = LanguageApp.translate(d.txt,
'en', 'ja', {contentType: 'html'});
Logger.log(spanish);
return ContentService.createTextOutput(spanish);
}
//function doGet(e) {
// return ContentService.createTextOutput("doGet!!");
//}
これで、以下のようなコマンドを実行すると、englishがjapaneseに翻訳されます。
# post req
$ curl -L -d "{\"txt\":\"hello\"}" https://script.google.com/macros/s/${APP_ID}/exec
こんにちは
# get req
$ curl -L https://script.google.com/macros/s/${APP_ID}/exec
doGet!!
LanguageApp.translateのパラメーターは、text, sourceLanguage, targetLanguage
となっています。言語を変えたい場合は変えられるようにしておくほうがいいかもしれません。
LanguageApp.translate(d.txt, d.src, d.targ);
curl -L "{\"txt\":\"こんにちは\",\"src\":\"ja\",\"targ\":\"en\"}"
ということで、実際に、archlinux.orgの最新ニュースを翻訳してみました。
#!/bin/bash
if [ ! -f ./xq ];then
curl -sL https://github.com/syui/xq/releases/download/0.1/linux_amd64_xq -o xq
chmod +x xq
fi
url=$1
date_now=`date +"%Y%m%d"`
url_arch="https://www.archlinux.org/feeds/news/"
xml=index.xml
curl -sL $url_arch -o $xml
date_xml=$date_now
if [ "$2" != "t" ];then
date_xml=`date --date="$(./xq l $xml)" +"%Y%m%d"`
fi
if [ "$date_now" != "$date_xml" ];then
exit
fi
title=`./xq $xml|jq -r ".[0]|.title"`
body=`./xq $xml|jq -r ".[0]|.description"|tr -d '\n'`
echo $title, $body
curl -L -d "{\"txt\":\"$title\"}" $url
curl -L -d "{\"txt\":\"$body\"}" $url
$ chmod +x run.sh
$ ./run.sh https://script.google.com/macros/s/${APP_ID}/exec t
github.com/syui/xq
がおかしいと思ったら、github.com/urfave/cli
が壊れてるぽい。あと、最新のバイナリをreleasesに置いてなかったので、ずっとオプション間違えてて、ローカルでは動いてたので、ハマりまくった。やっぱり、golangで書いたものは、releasesするCIを回しておけばよかった...。