0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【目指せ完走賞】なりかくんのDiscordAdvent Calendar 2022

Day 9

【9日目】Node.jsで為替レートをDiscordにリアルタイムで投稿する

Last updated at Posted at 2022-12-14

はじめに

こんにちは、なりかくんです。
今回は、Node.jsで為替レートをリアルタイムに取得してDiscordにリアルタイムで投稿するプログラムを作ってみようと思います。

今回使う為替レートの取得方法

今回は、以下のAPIを利用します。
https://svr242api.nakn.jp/rate.json

このAPIはAPI Keyなどが不要で、非常にシンプルなレスポンスなので非常に使いやすいのが特徴です。以下が記事執筆時のレスポンスJsonの例です。

{
  "status": true,
  "datetime": "2024-05-01 12:54:10+0",
  "rate": {
    "GBPNZD": 2.1169,
    "CADJPY": 114.62,
    "GBPAUD": 1.9254,
    "AUDJPY": 102.32,
    "AUDNZD": 1.0991,
    "EURCAD": 1.47,
    "EURUSD": 1.0683,
    "NZDJPY": 93.01,
    "USDCAD": 1.376,
    "EURGBP": 0.8552,
    "GBPUSD": 1.2488,
    "ZARJPY": 8.396,
    "EURCHF": 0.9821,
    "CHFJPY": 171.64,
    "AUDUSD": 0.6484,
    "USDCHF": 0.9193,
    "EURJPY": 168.58,
    "GBPCHF": 1.148,
    "EURNZD": 1.811,
    "NZDUSD": 0.5894,
    "USDJPY": 157.77,
    "EURAUD": 1.647,
    "AUDCHF": 0.596,
    "GBPJPY": 197.06
  }
}

Discordへの投稿

Discordへは、WebHookを使ってメッセージを送信しようと思います。
今回作ったコードはこんな感じです。

exrate.js
const request = require("request");

exrate();
setInterval(exrate, 15000);

async function exrate () {
    let getExRate = await getRequest({ url: "https://svr242api.nakn.jp/rate.json", json: true });
    if (!getExRate.status) return;
    let time = new Date(getExRate.datetime).getTime()/1000;
    await getRequest({
        url: "WebHookのURL",
        method: "POST",
        json: {
            content: `USD to JPY : ${getExRate.rate.USDJPY} (<t:${time}> <t:${time}:R>)`
        }
    });
}

function getRequest(option) {
    return new Promise((resolve, reject) => {
        request(option, function (error, response, body) {
            if (error) {
                reject(error);
            } else {
                resolve(body);
            }
        });
    });
}

非常にシンプルで、requestモジュールを利用してGETやPOSTしているのとsetIntervalを使って定期的に取得をしているだけです。

このコードを動かしてみるとこのようになります。
15秒ごとにしっかりと投稿されていることが分かります。また、何秒前かわかるようにDiscordのマークダウンの機能を使って分かりやすくしています。
image.png

以上です、今回はUSD to JPYで作りましたがほかの為替レートバージョンも簡単に作れるので是非皆さんも作ってみてください。
最後までお読みいただきありがとうございました。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?