例の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にやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者: Al Sweigart,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る
Fluent Python ―Pythonicな思考とコーディング手法
- 作者: Luciano Ramalho,豊沢聡,桑井博之,梶原玲子
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/10/07
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: 池内孝啓,片柳薫子,岩尾エマはるか,@driller
- 出版社/メーカー: 技術評論社
- 発売日: 2017/09/09
- メディア: 大型本
- この商品を含むブログ (1件) を見る
Effective Python ―Pythonプログラムを改良する59項目
- 作者: Brett Slatkin,石本敦夫,黒川利明
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/01/23
- メディア: 大型本
- この商品を含むブログ (5件) を見る