🌟
bitbankの認証エラーを回避したお話し
1年以上前のことだけどbitbankはときどき認証エラー(20001)を起こす
そしてそれらを回避した方法
- 複数のAPI token取得
- 順番に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) が出ない認証方式を実装してくれました。
... あと多分 pybotters をお使いのようにみられるのですが、最新バージョン1.4.0
であればその新方式に切り替えているので 1 つの API キーで対応可能になります 👌全然知らなかったです
未だにベータ版を使っていましたw
無駄も多いのでラッパーも作り直すつもりでした
上記の旨を追記します