🌟

bitbankの認証エラーを回避したお話し

2024/09/02に公開
2

1年以上前のことだけどbitbankはときどき認証エラー(20001)を起こす
そしてそれらを回避した方法

  1. 複数のAPI token取得
  2. 順番にAPI tokenを回す

たったこれだけ
具体的にはこのcommitのようにした

    def __init__(self, config: str, symbol: str):
        super().__init__(config)
        self.symbol = symbol
        self.key = {"bitbank": self.config["bitbank"]}
+        self.total_api_call_count = 0
+        self.current_key_index = 0
+        try:
+            self.keys = self.config["bitbank_keys"]
+            self.key = {"bitbank": self.keys[self.current_key_index]}
+            self.check_keys = True
+        except KeyError:
            self.key = {"bitbank": self.config["bitbank"]}
+            self.check_keys = False
        self.stop_flag = False
        self.retry_count = 3
        # 発注履歴ファイルを保存するファイルのパラメータ
@@ -122,7 +130,14 @@ async def _cancel_and_liquidate(self):


-    async def _requests(self, method: str, url: str, params=None, data=None):
        async with pybotters.Client(apis=self.key, base_url='https://api.bitbank.cc/v1') as client:
+        if self.check_keys:
+            self.current_key_index = self.total_api_call_count % len(self.keys)
+            current_key = {"bitbank": self.keys[self.current_key_index]}
+            self.total_api_call_count += 1
+        else:
+            current_key = self.key

+        async with pybotters.Client(apis=current_key, base_url='https://api.bitbank.cc/v1') as client:
            response = await client.request(method, url=url, params=params, data=data)
            if not str(response.status).startswith('2'):
                if str(response.status).startswith("429"):

呼ぶjsonはこのcommitのようにした

-  "bitbank": ["API_KEY", "API_SECRET"]
+  "bitbank": ["API_KEY", "API_SECRET"],
+  "bitbank_keys": [
+    ["API_KEY", "API_SECRET"],
+    ["API_KEY", "API_SECRET"],
+    ["API_KEY", "API_SECRET"],
+    ["API_KEY", "API_SECRET"]
  ]

Discussion

まちゅけんまちゅけん

こんにちは。 もし既にご存知でしたら申し訳ないですが、つい先週 bitbank 側が認証エラー(20001) が出ない認証方式を実装してくれました。
https://github.com/bitbankinc/bitbank-api-docs/issues/94#issuecomment-2311641192
https://bitbank.cc/blog/articles/406396361
... あと多分 pybotters をお使いのようにみられるのですが、最新バージョン 1.4.0 であればその新方式に切り替えているので 1 つの API キーで対応可能になります 👌

shibashiba

全然知らなかったです
未だにベータ版を使っていましたw
無駄も多いのでラッパーも作り直すつもりでした
上記の旨を追記します