Google翻訳APIを無料で作る方法

# 概要
Google翻訳APIを使いたいと思っていたところ，1～500,000文字まで無料で，これではすぐ上限を超えてしまう！！

なんとか無料で使える方法はないかと模索していたところ，[3 分で作る無料の翻訳 API with Google Apps Script](https://qiita.com/tanabee/items/c79c5c28ba0537112922)こちらの記事を見つけました．

記事では非常に簡単に説明してくださっていますが，多言語でAPIとして使うときJSON形式で返してくれたら嬉しいと思ったので，今回はこちらの記事を参考にしながらJSON形式で返すように変更を加えたいと思います．

# Let's Google Apps Script
## プロジェクトの作成
https://script.google.com

- まずは，こちらのサイトにアクセスしてログインします

- 次に，```新規スクリプト```を選択し，GASを記述するエディタへ移動します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/320c48d5-e672-f471-e6bf-bb35dbc0686a.png)

- 赤丸を押して```名前を変更```を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/4a27fae9-1357-bf8b-24d5-b364754a7d3d.png)

- プロジェクト名を```google_translate_api```に設定し
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/12eda419-5d0e-0a8b-67a3-0e3f6a0cde85.png)

- ソースファイルの名前を```main```に設定しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/967dfe67-37c3-2d5c-395b-4902243dce08.png)

- 現状はこんな感じになっていると思います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/b1d9a611-f8ba-3b1f-92b5-c5185120b8e2.png)



## 翻訳結果を返すAPIをつくる
エディタにデフォルトで記述されている```myFunction()```を下の```doGet(e)```関数に置き換えてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/5f0c721a-345b-af9c-9b3d-8fc20c87df3a.png)


```javascript:main.gs
function doGet(e) {
    // リクエストパラメータを取得する
    var p = e.parameter;
    //  LanguageAppクラスを用いて翻訳を実行
    var translatedText = LanguageApp.translate(p.text, p.source, p.target);
    // レスポンスボディの作成
    var body;
    if (translatedText) {
        body = {
          code: 200,
          text: translatedText
        };
    } else {
        body = {
          code: 400,
          text: "Bad Request"
        };
    }
    // レスポンスの作成
    var response = ContentService.createTextOutput();
    // Mime TypeをJSONに設定
    response.setMimeType(ContentService.MimeType.JSON);
    // JSONテキストをセットする
    response.setContent(JSON.stringify(body));

    return response;
}
```

できたらファイルを保存します．

## デプロイ
上のタブから```公開```→```ウェブアプリケーションとして導入...```を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/3e495022-0ead-bf32-1d85-5c10d3e9c10c.png)

アプリケーションにアクセス出来るユーザを```全員```に変更したら```導入```ボタンを押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/25f2aa70-6c5b-8977-63d2-a4ba4d4bd4e4.png)

URLが表示されるので，ここにパラメータを与えてアクセスすればAPIが叩けます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/62fcd95a-af91-628c-5153-1219f1fe3529.png)

# APIの実行
パラメータとして，以下の3つを指定します
1. text（翻訳したいテキスト）：Hello
2. source（もとの言語）：en
3. target（翻訳したい言語）：ja

## Webで実行
### 短いテキスト
上記のパラメータを設定した，下記のリンクにアクセスすると
https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec?text=Hello&source=en&target=ja

以下のようなレスポンスが得られます

```bash
{
  "code": 200,
  "text": "こんにちは"
}
```

### 長いテキスト
長いテキストでも．．．
[https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec?text="We must develop and maintain the capacity to forgive. He who is devoid of the power to forgive is devoid of the power to love. There is some good in the worst of us and some evil in the best of us. When we discover this, we are less prone to hate our enemies."&source=en&target=ja](https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec?text="We must develop and maintain the capacity to forgive. He who is devoid of the power to forgive is devoid of the power to love. There is some good in the worst of us and some evil in the best of us. When we discover this, we are less prone to hate our enemies."&source=en&target=ja)

- 原文:
We must develop and maintain the capacity to forgive. He who is devoid of the power to forgive is devoid of the power to love. There is some good in the worst of us and some evil in the best of us. When we discover this, we are less prone to hate our enemies.

このようなレスポンスが得られます

```bash
{
  "code": 200,
  "text": "「私たちは許す能力を発達させ、維持しなければなりません。許す力を持たない彼は、愛する力を欠いています。私たちの最悪のところに善があり、私たちのうちの最善に悪があります。 、私たちは敵を憎む傾向が少ない」"
}
```

## curlで実行
curlではオプション"-L"をつけてリダイレクトに対応させています

```bash
$ curl -L "https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec?text=Hello&source=en&target=ja"

> {"code":200,"text":"こんにちは"}
```
Webで実行したときと同じ結果が返ってきます

# 感想
翻訳結果をJSON形式でもらえるようになりました．
しかし，長文になるとURLが長くなってしまうので，リクエストボディを使うほうが良いのかもしれません．

今後はこのAPIを使ったアプリケーションを作って紹介できたらと思います

# 参考文献
- [3 分で作る無料の翻訳 API with Google Apps Script](https://qiita.com/tanabee/items/c79c5c28ba0537112922)
- [今から10分ではじめる Google Apps Script(GAS) で Web API公開](https://qiita.com/riversun/items/c924cfe70e16ee3fe3ba)