8
2

More than 1 year has passed since last update.

Node.jsでDeepl APIをたたいて、日本語翻訳をLINE Botに出力

Posted at

はじめに

翻訳APIにはgoogleやMicrosoftのものなど
いろいろあるみたいですが
今回はDeepl APIを使用します。

Deepl APIをNode.jsで叩く記事はあまりなかった印象でした。

今回は、この記事の続きのような感じです。

流れとしては、下記の通りです。
1. LINEのメッセージを受け取る
2. 格言APIで英語の文章を取得
3. 取得した文章をDeepl APIに渡す
4. 翻訳された結果をLINEのメッセージに出力

Deeplへの登録

Deeplへの登録やAPIキーの場所などはこちらを参照しました。

Deeplのnpmをインストール

deeplのnpm(Node Package Manager)があるのでそれをインストール

ターミナル上で任意のフォルダに移動しnpm install deepl --saveを実行。特になにも起こりませんが、大丈夫なはずです。

上記サイトの「Usage」を参考に、下記コードを作成しました。

全体像のコード

'use strict';

//格言APIを叩ける
const axios = require('axios');
//DeeplのAPI
const translate = require("deepl");

const express = require('express');
const line = require('@line/bot-sdk');
const PORT = process.env.PORT || 3000;

const config = {
    channelSecret: 'XXXXXXXX', // LINEシークレットチャネル
    channelAccessToken: 'XXXXXXXX' // LINEアクセストークンチャネル
};

const app = express();

app.post('/webhook', line.middleware(config), (req, res) => {
    console.log(req.body.events);

    Promise
      .all(req.body.events.map(handleEvent))
      .then((result) => res.json(result));
});

const client = new line.Client(config);

//LINEのメッセージを受けると実行される関数
async function handleEvent(event) {
  let text_ja = '';  //ここに出力する日本語を格納する
  if (event.type !== 'message' || event.message.type !== 'text') {
    return Promise.resolve(null);
  }
  const res = await axios.get('https://api.adviceslip.com/advice');
  const text_en = res.data.slip.advice; //任意のAPIから獲得した英語の格言を格納
  console.log(text_en);

  translate({
    free_api: true, // ← フリープランのみ記載
    text: text_en,
    target_lang: 'JA',
    auth_key: 'XXXXXXXX', // ここにDeeplのAPIキーを入力
  })
    .then(result => {
      text_ja = result.data.translations[0].text; //Deeplで翻訳された文章をtext_ja変数に格納
      console.log(text_ja);
      client.replyMessage(event.replyToken, {
        type: 'text',
        text: text_en +'\n'+ text_ja //英語の格言と、日本語に翻訳されたものがLINEで通知される
      });
    })
    .catch(error => {
      console.error(error)
    });
}

app.listen(PORT);
console.log(`Server running at ${PORT}`);

おわりに

Deepl APIをNode.jsを使って出力しているケースがそう多くなかったので結構手間がかかりました...。

とても綺麗なコードとは言えませんが、
スコープの知識がもっと深ければうまくできる方法はありそうです。

少しでもお力になれれば幸いです。

8
2
0

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
8
2