DEVGRU

プログラミングと競馬予想について書きます

Zaif のREST APIエラー時にリトライする

例のZaif だが、拙宅のStreaming APIを403にした件ですでにうんざりだが、 それに加えて混雑のせいでBot のリクエストが通りづらくなっている。

しばらく待ってリクエストする、を繰り返せばいいのだが リトライするべきエラーとそうではないエラー(資産不足とか)を区別する必要がある。

混雑時に発生するエラーのうち、リトライするべきエラーについて解説する。

パターンは大きく分けて2つある。

trade temporarily unavailable.

1つは、HTTPレスポンスのステータスコードは200が返ってくるが、 その内容は以下のようなJSONとなっているもの。

{"success": 0, "error": "trade temporarily unavailable."}

成功時はsuccessが1だが、失敗時はsuccessは0で、errorに理由が書かれている。

この場合は、以下のようなPythonコードで判定できる。

response.json()["success"] != 1 and response.json()["error"] ==  "trade temporarily unavailable."

真なら10秒ぐらい待ってリトライしよう。

502 Bad gateway

もっと重症なのは、HTTPレスポンスのステータスコードが502で返ってくるケース。 技術的には、リバースプロキシとその向こう側とのやり取りで何か起きている状況。

この時、bodyはHTMLを返すので、Pythonのrequestsで.json()なぞ呼び出してJSONとしてパースしようものならJSONDecodeErrorでお陀仏である。

以下で判定する。

response.status_code == 502

その他、504を返した時もあった気がするので、それも判定すると良いかもしれない。


最近のZaifは注文受け付けられない具合が半端じゃないので、API取引は上記のコード必須である。

しかし、最近はブラウザからの通常取引もなかなか通らないのが辛い...

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

Fluent Python ―Pythonicな思考とコーディング手法

Fluent Python ―Pythonicな思考とコーディング手法

  • 作者: Luciano Ramalho,豊沢聡,桑井博之,梶原玲子
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/10/07
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

PythonユーザのためのJupyter[実践]入門

PythonユーザのためのJupyter[実践]入門

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

Zaif の streaming API がまた止まっている の続き

team-6.hatenablog.jp の続き。

Streaming API についてサポートに問い合わせても梨の礫で、ほとほと困っている。

REST API へのポーリングで実装したは良いが、ある程度ディレイを入れなければいけないし、 こっちはこっちでタイムアウトが発生することがある(ただし、これが自宅PCのWiFiも環境良くないのが原因の可能性あり)。

さて、宅外で取引のためにZaifを見たところ、板がきちんと更新されていることに気づいた。

直ったんだ!と思い帰宅して自宅PCからZaifを見たが、板は更新されず。

はた、と思いついていろいろ試した結果、 どうやら自宅からのアクセスのみ403となっていることに気づく。

どうなっているのかわけがわからないが、サポートからは音沙汰なく、しばらく不便は続きそうだ。

J:COMのアドレスから無茶やったやつがいるのかもしれないが、WebSocketサーバからBANされるってどうゆう状況だろう? 同時に大量にコネクションを張ったのだろうか?

Zaif の streaming API がまた止まっている

とある仮想通貨(ナイショ)で裁定取引をしようとして、Zaifともう1つのマーケットの板情報を取得していたが、 いざお金を振り込み取引を実装しようとしたらなんと streaming API が停止していた。

今回で2回めで、取り引きページの板情報も同じstreaming APIを使用しているようで、 停止していた(リロードすると更新される)。

気づいたのは2017/11/25 お昼ごろだが、20時を過ぎた今現在もまだ復旧していない。

仮にもお金を扱うための情報なのに、どうしてこんないい加減なことをできるのだろうか。

すぐに技術的な解決をすることは無理でも、せめて障害情報を流すとか、いろいろとやりようはあると思うのだが。

別のマーケットでもそういうことがあり、この分野のサービス提供者の不誠実さに参っている。

小さく始めて大きく稼ぐ 「仮想通貨投資」入門

小さく始めて大きく稼ぐ 「仮想通貨投資」入門

5000円ではじめる仮想通貨投資入門

5000円ではじめる仮想通貨投資入門