![見出し画像](https://assets.st-note.com/production/uploads/images/12423381/rectangle_large_type_2_386c9b710531c2ad29751a91f41d343f.jpeg?width=1200)
Coincheck用板情報取得クラス(socket_io、websocket)python
2022/03/20 接続できていなかったので、コード見直し。
こんにちは、はぐです。
以前noteで書いたアビトラbotで問い合わせがあり、ここ1週間ほどCoincheckの板情報のズレに悩まされていました。
Coincheckの板情報は差分しか送られてこないです。
約定履歴から板情報を削ってみたりしてもズレがありました。
結局ズレは、本来あるはずのpriceの板情報がない事でずれていました。
ではなぜその価格がないのか、というと
配信されていないんじゃない?
という考えに落ち着き、webはズレていないと考えるならば、webと同じことしよう、と考えました。
公式ドキュメントでは、websocketを使用していますが、webの方は解析してみるとsocket_ioです(って当たり前か ^^;)。
pythonでsocket_ioライブラリは使ったことが無かったので、いろいろ調べることから始めましたので少し時間がかかりました。
あと、webでは60秒毎にAPIから板情報を取得しに行っていますが、本コードではそれはしていません。
APIからの情報はすでに遅延しており、そこから差分を行っていくと取得した直後はズレているからです。
一応、API取得部分のコードを入れていますが、現在は無効にしています。
有効にしたければ、コードの最初の方、
# APIより板情報を取得し、差し替える時間間隔[sec]。0で無効。webでは60秒になっている。
API_UPDATE_INTERVAL = 0
これを0以上に書き換えてみてください。
使用モジュールはpython-socketioです。
pip install python-socketio
一応、公式のwebsocket版もつけておきます。
こちらは最新のwebsocketモジュールで動くようにしています。(0.47以前とかの縛りはないです。)
両方立ち上げてみて、違いを見てみてください。
受信部分以外はコードは同じです。
websocketとsockt_ioの接続のサンプルにもなると思います。
両方共通信エラー時は再接続するようになっています。
ちなみに公式のwebsocketは、切断すると一定時間サーバーから接続が拒否されます。
socket_ioの方はwebでも使われているのですぐ再接続できます。
板の処理はSortedDictを使ってます。
くもすけさんのbotフレームワークを参考にさせていただきました。
ありがとうございます。
なので、こちらも必要です。
pip install sortedcontainers
最初はlistで頑張ってソートしてたのですが、こんな便利なものがあったなんて・・・・
いろいろwebを解析してみると、隠しAPIとかも発見できて面白かったです。
使えそうなのはohlcvの取得ぐらいかな。
下記有料部分にコードを置いておきます。
ここから先は
¥ 1,000
サポートしていただけると励みになります。 頂いたサポートは有益な他の方のnote購入代に当てさせて頂き、回していきたいと思います。