タイトル長いですね(笑)
仮想通貨の取引所Coincheckには取引所APIが公開されていて、各通貨のレート、板情報、ティッカーを取得したり、新規注文を行なったりすることもできます。今回はこの機能を使って、販売レートを自前のZabbixで取得し、グラフ化してみました。
なお、bitFlyerやZaif等、他の取引所にもAPIがあり、同様のことができます。Coincheckを使ったのは、単純に自分が使っているからです。
取引所APIの使い方
たとえばビットコインと円の販売レートを取得するには、ブラウザで下記URLにアクセスします。
https://coincheck.com/api/rate/btc_jpy/
すると、json形式でrateの値を取得できます。
{“rate”:”288130.0″}
数値が、アクセスした時点の1ビットコインの価格(円)です。
btc_jpyの部分をeth_jpyにすると、EthereumとJPYのレートを取得することができます。
https://coincheck.com/api/rate/eth_jpy/
その他全取扱通貨について、対円、対ビットコインのレートを取得できます。詳細はAPIドキュメントを確認してください。
販売レートは認証無しで取得できます。新規注文や自分が保有している仮想通貨量の取得は、認証の手順が必要になりますが、今回は割愛。
取得する販売レート
今回は全ての販売レートを取得します。
“btc_jpy” “eth_jpy” “etc_jpy” “dao_jpy” “lsk_jpy” “fct_jpy” “xmr_jpy””rep_jpy” “xrp_jpy” “zec_jpy” “xem_jpy” “ltc_jpy” “dash_jpy” “eth_btc” “etc_btc” “lsk_btc””fct_btc” “xmr_btc” “rep_btc” “xrp_btc” “zec_btc” “xem_btc” “ltc_btc” “dash_btc”
curlコマンドでAPIを使用
今回はLinuxのシェル上でCoincheckの取引所APIを参照するので、curlコマンドを使用します。
1 2 |
$ curl https://coincheck.com/api/rate/btc_jpy/ {"rate":"288542.0"} |
zabbix_senderで値をZabbixに送信
取得した販売レートをZabbixに送信するにはいろいろ方法があると思いますが、今回はzabbix_senderを使用しました。
zabbix_senderコマンドを使用すると、クライアント側からZabbixサーバーに値をプッシュできます。
コマンドは以下のように使用します。あらかじめ、Zabbix管理画面でホスト、アイテムを登録しておく必要があります。
1 |
$ zabbix_sender -z 10.0.0.1 -s "Coincheck monitor" -k sender.test -o 123 |
各オプションの意味は以下の通りです。
-z | ZabbixサーバーのIPアドレス |
-s | zabbix_senderを実行するホストの、Zabbixサーバー上で登録されているホスト名 |
-k | 送信する値を保存するアイテム名 |
-o | 送信する値 |
また、-iオプションでファイルから値を読み取り、送信することができます。
1 |
$ zabbix_sender -z 10.0.0.1 -i /tmp/value.txt |
ファイルには、ホスト名、アイテム名、値をスペースを空けて記載します。
1 2 3 |
"Coincheck monitor" sender.test1 123 "Coincheck monitor" sender.test2 456 "Coincheck monitor" sender.test3 789 |
詳細は公式マニュアルか、manページを確認してください。
Zabbixサーバー側の準備
zabbix_senderから値を受け取るため、Zabbixの管理画面で以下設定を行っておきます。
ホストの作成
「設定」→「ホスト」から「ホストの作成」をクリックし、zabbix_senderを実行するホストをZabbixの「ホスト」として作成します。私はzabbix_senderを実行するホストを「Coincheck monitor」として新たに作成しました。
アイテムの作成
「設定」→「ホスト」で表示されるホストの一覧から、「アイテム」をクリックします。
以下の値を入力します。
名前 | 任意の名前を入力します。私は通貨ペアの名前をそのまま入力しました。 |
タイプ | 「Zabbix トラッパー」を選択 |
キー | zabbix_senderの-kオプションで指定するキー名を入力します。「rate.<通貨ペア>」にしました。 |
データ型 | 「数値(浮動小数)」を選択 |
単位 | 無くても良いですが、単位が円になるものは「¥」を入力しました。実際は半角です。 |
乗数を使用 | チェックしない |
ヒストリ保存期間(日) | デフォルトでも良いですが、長期間保存したい場合は増やします。私は1825日(5年)にしました。 |
トレンド保存期間(日) | ヒストリと同じく、1825日にしました。 |
※以降はデフォルトでOKです。
1つ作ったら、「複製」して名前とキーと単位のみ変更して作成していくと楽です。
とはいえこれだけのアイテムを作成するのは面倒だと思いますので、インポート用のファイルを用意しました。
インポートのテストはしていませんのでご了承ください。
スクリプトを作成する
zabbix_senderを実行するホストにログインし、以下スクリプトを任意のディレクトリに配置します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#!/bin/bash # Fixed "定数設定" req_dest="https://coincheck.com" req_dir="/api/rate/" req_rate=("btc_jpy" "eth_jpy" "etc_jpy" "dao_jpy" "lsk_jpy" "fct_jpy" "xmr_jpy" "rep_jpy" "xrp_jpy" "zec_jpy" "xem_jpy" "ltc_jpy" "dash_jpy" "eth_btc" "etc_btc" "lsk_btc" "fct_btc" "xmr_btc" "rep_btc" "xrp_btc" "zec_btc" "xem_btc" "ltc_btc" "dash_btc") zab_host="Coincheck monitor" zab_ipadd="127.0.0.1" tmpfile="/tmp/coincheck_rate.txt" # Command "コマンド設定" zabsend="/usr/local/bin/zabbix_sender" curl="/usr/bin/curl" tr="/usr/bin/tr" echo="/bin/echo" logger_i="/usr/bin/logger -ip local0.info" logger_e="/usr/bin/logger -ip local0.error" # Main "メイン処理" { # [1] 販売レートを取得し変数に格納 for pair in ${req_rate[@]};do eval ${pair}=`${curl} -Ss ${req_dest}${req_dir}${pair}|${tr} -d \"{}rate:` done # [2] 空の一時ファイルを作成 ${echo} -n > ${tmpfile} # [3] 一時ファイルにzabbix_senderの書式で全販売レートを出力 for pair in ${req_rate[@]};do ${echo} \"${zab_host}\" rate.${pair} `eval echo '$'${pair}` >> ${tmpfile} done # [4] zabbix_senderで一時ファイルの内容を送信 ${zabsend} -z ${zab_ipadd} -i ${tmpfile} } 1> >(${logger_i}) 2> >(${logger_e}) |
req_rate
取得したい販売レートを配列で入力しています。不要なレートがあるなら削除してください。
[1] 販売レートを取得し変数に格納
curlコマンドでAPIを呼び出し、販売レートを取得します。
forでreq_rate配列に格納した通貨ペアの分だけ、以下のコマンドを実行し、値を通貨ペア名を名前にした変数に格納しています。
curl -Ss https://coincheck.com/api/rate/<通貨ペア>
[2] 空の一時ファイルを作成
touchコマンドだと上手く作成できなかったので、echoで空ファイルを作成しています。
[3] 一時ファイルにzabbix_senderの書式で全販売レートを出力
通貨ペア名の変数から、ファイルを作成します。下記のようなファイルがここで作成されます。
1 2 3 4 5 |
"Coincheck monitor" rate.btc_jpy 301526.0 "Coincheck monitor" rate.eth_jpy 23669.791 ~中略~ "Coincheck monitor" rate.ltc_btc 0.0152 "Coincheck monitor" rate.dash_btc 0.06592012 |
[4] zabbix_senderで一時ファイルの内容を送信
zabbix_senderの-iオプションを使用して、一時ファイルに格納された値を一気に送信しています。
コーディングポリシーは「シェルスクリプトでWordPressをバックアップする」と同様です。
最後のloggerの意味は「標準出力と標準エラー出力をloggerコマンドで別々にsysylogに出力する」を参照してください。
cronでスクリプトを実行する
「crontab -e」コマンドでcron設定ファイルに以下のエントリを追加します。
1分おきにスクリプトを実行する設定です。
1 |
0-59 * * * * <配置パス>/coincheck_rate.sh > /dev/null |
※<配置パス>はスクリプトを配置しているディレクトリのパスに読み替えてください。
Zabbix管理画面で確認する
問題なければ「監視データ」→「最新データ」で販売レートが取得できていることが確認できます。「グラフ」を開くと、以下のように表示されます。
いかがでしょうか。これだけなら各取引所で同様のチャートを見ることができるのであまり意味がないですが、例えばZabbixのトリガーを使って一定額になったらメールで通知するなど、工夫しだいで様々なことが出来るようになります。
PrivateAPIと組み合わせれば、自動で売り買いする仕組みを作ることも夢ではないです。次の記事ではPrivateAPIにチャレンジする予定です。
最後までご覧いただきありがとうございました。以下広告です。
PublicAPIはCoincheckのアカウントが無くても使用できますが、タダで使うのはなんだか悪い。という人は会員になってみてはいかがでしょうか。以下バナーよりどうぞ。