はじめに
こんにちは、なりかくんです。
今回は、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のマークダウンの機能を使って分かりやすくしています。
以上です、今回はUSD to JPYで作りましたがほかの為替レートバージョンも簡単に作れるので是非皆さんも作ってみてください。
最後までお読みいただきありがとうございました。