TradingViewのアラート情報をWebhookを使ってローカルで受け取る

TradingView の alertcondition では、Webhook を設定できます。
IFTTTなどを使っていろいろなアプリでメッセージを受け取ることができますが、自分の手元のローカル環境で受け取ることができれば、もっと柔軟に便利に扱うことができるのではないかと思い、ローカルで受け取る方法を探しました。この記事はその備忘録です。

環境

私は、ウェブのフロントエンドエンジニアなので、JavaScript が最も得意です。なので、環境は Node.js を使います。また、Webhook を受け取る外部サーバーとして ngrok を使います。
Node 側での実装は express を使用します。

①必要なものをインストール

$ npm i -g ngrok
$ npm i express body-parser

②実装を書く(かんたん)

// server.js

const express = require('express')
const bodyParser = require('body-parser')
const PORT = process.env.PORT || 3000

app.use(bodyParser.json())

app.get('/', () => res.send('Hello'))

// URL /webhook で受け取れるように
app.post('/webhook', (req, res) => {
  console.log(req.body)
})

// サーバーを起動
app.listen(PORT)
console.log(`Server running at ${PORT}`)

③コマンドラインからサーバーを起動する

$ node server

③ngrok を起動する

$ ngrok http 3000

URLが発行される(URLは起動するたびに変わる)

スクリーンショット_2021-02-04_2_58_10

④TradingView のアラートにURLをセットする

スクリーンショット_2021-02-04_3_10_34

ひとまずこれで終了です。
アラートを鳴らして検証してみます。

検証でつまづいたところ

Message の内容は厳格にJSON形式に従っていないといけません。ご覧の通り「{{」がやたら多いので間違えがちです。間違えていた場合、受け取るデータは「{}(空のオブジェクト)」になります。私の場合の対処法は、bodyParser.json() を bodyParser.text() などにして、内容が間違えていないか確かめたりしました。

終わり

以上です。もっと難しいのかなと思っていましたが(実際に役立てようとすると難しいこともあるでしょうけど)、ごく簡単でした。あとは、これを使って何ができるかを考えるだけです。

この記事が気に入ったらサポートをしてみませんか?