#「BCHクジラ監視くん」とは
BCHクジラ監視くん(https://twitter.com/BCHwhalewatch) とは、
BitcoinCash(BCH)の保有数がTOP100のアドレスを監視して、監視対象に送金・入金があればツイートでお知らせするbotです。
#主な機能
監視中のアドレスに1度に1000 BCH以上の送金・入金があればツイートします (送金・入金アラート)。
監視対象となる保有数TOP100アドレスのリストは「Bitcoin Cash Rich List」(https://bitinfocharts.com/top-100-richest-bitcoin%20cash-addresses.html) から毎日1回データを取得して更新しています。
監視アドレスの残高・トランザクション件数情報はCSVに記録し、定期的に残高が一番増えたアドレスと一番減ったアドレスの情報をツイートします (定時レポート)。
また1日の終わり(23:45 頃)に以下の情報をツイートします(監視結果レポート)。
・TOP100アドレスの総残高と増減枚数(前日比)
・前日より最も残高が増えたアドレスと減ったアドレスとその増減枚数
・TOP100アドレスのその日のトランザクション(TX)件数と最もTX件数が多かったアドレスとその件数
#その他の機能
CoinMarketCap(https://coinmarketcap.com/) よりBitcoinCashのランキング、価格($とBTC建て)、24時間の出来高、循環供給量、ドミナンス、トータルハッシュレートのデータを取得して毎日1回ツイートします (通貨データ)。
※今後、機能は追加or修正する可能性あり
#通知スケジュール
・送金・入金アラート → 1000 BCH以上の移動が確認された時
・定時レポート → 8:00/16:00/23:30
・監視結果レポート → 23:45
・通貨データ → 7:00
※大体です
#使用したAPIなど
ソースコードを公開しようか迷いましたがひとまず非公開にします。
そのため私が使ったAPIやモジュールなどをざっくり書きたいと思います。
同様のことをやりたい時に何か参考になればと思います。興味がない方、Pythonに詳しい方は読み飛ばしてください。
使用したAPI
・アドレスやトランザクション情報の取得 → BTC.com (https://bch.btc.com/api-doc)
・BitcoinCashの通貨データの取得 → CoinMarketCap (https://coinmarketcap.com/ja/api/)
・ツイッター → (https://apps.twitter.com/)
使用したおすすめのPythonモジュール
・schedule (https://schedule.readthedocs.io/en/stable/)
ジョブのスケジューリングが出来るモジュール。日時や曜日などの設定を決めておくと、その時間に関数が実行されます。scheduleモジュールとthreadingモジュールを組み合わせてマルチスレッドにすることで、メイン処理は別にやりつつ設定した時間にサブ処理が走るので便利です。私は同様の方法を使ってサブ処理内でフラグの書き換えを行い、メイン処理内に「フラグが立ったらツイートする」という処理をいくつか組み込んで各ツイートを行っています。
・cashaddress (https://github.com/oskyk/cashaddress)
BitcoinCashのレガシー⇔キュッシュアドレスに変換出来るモジュール。
・BeautifulSoup4 (https://www.crummy.com/software/BeautifulSoup/bs4/doc/)
Webスクレイピングするためのモジュール。TOP100アドレスの取得は「Bitcoin Cash Rich List」からrequestsモジュールのget関数でHTMLデータを取得して、そこからこのモジュールを使ってアドレス名だけスクレイピングしています。
・tweepy (http://tweepy.readthedocs.io/en/v3.5.0/)
PythonでTwitter APIを操作するためのモジュール。
ツイッターのOAuth認証やつぶやきがサクッと出来ます。
その他使用したモジュール(説明は省略)
・csv
・datetime
・time
・requests
・json
・traceback
・re
・threading
・emoji
#開発環境
・Python 3.6
・Windows 8.1
#実装環境
・Python 3.5.3
・Raspberry Pi 3 Model B(OS:raspbian)