はじめに
翻訳APIにはgoogleやMicrosoftのものなど
いろいろあるみたいですが
今回はDeepl APIを使用します。
Deepl APIをNode.jsで叩く記事はあまりなかった印象でした。
今回は、この記事の続きのような感じです。
流れとしては、下記の通りです。
- LINEのメッセージを受け取る
- 格言APIで英語の文章を取得
- 取得した文章をDeepl APIに渡す
- 翻訳された結果を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を使って出力しているケースがそう多くなかったので結構手間がかかりました...。
とても綺麗なコードとは言えませんが、
スコープの知識がもっと深ければうまくできる方法はありそうです。
少しでもお力になれれば幸いです。