Всем привет, столкнулся с проблемой, что уже не моуг понять, что такое Rate Limit в запросе к api. Впринцепи я понимаю, что это, но на практике оно работает не так как я думаю. Я пишу свой первый проект связанный с криптой, и там я отправляю запрос к бирже Mexc, на получение orderbook для каждого символа. Вот скрип:
import asyncio
import json
import aiohttp
counter = 0
async def get_symbols(session):
symbols = []
async with session.get('https://api.mexc.com/api/v3/defaultSymbols') as response:
data = await response.json()
for i in data['data']:
if 'USDT' in i:
symbols.append(i)
return symbols
async def get_orderbook(session, symbol, semaphore):
global counter
orderbook = {}
async with semaphore:
async with session.get(f'https://api.mexc.com/api/v3/depth?symbol={symbol}&limit=10') as response:
await asyncio.sleep(10)
counter +=1
print(response.status, counter)
try:
data = await response.json()
if 'asks' in data and 'bids' in data:
asks = data['asks']
bids = data['bids']
orderbook[symbol] = {
'a': asks,
'b': bids
}
return orderbook
except aiohttp.ContentTypeError as e:
print(e)
async def main():
async with aiohttp.ClientSession() as session:
symbols = await get_symbols(session)
tasks = []
symbols_len = len(symbols)
counter = 0
semaphore = asyncio.Semaphore(100)
for symbol in symbols:
counter +=1
tasks.append(get_orderbook(session, symbol, semaphore))
print(f'{counter}/{symbols_len}')
orderbook = await asyncio.gather(*tasks)
print(orderbook)
with open ('sdf.txt', 'w') as f:
json.dump(orderbook, f, indent=4)
if __name__ == '__main__':
asyncio.run(main())
Но как и у любого api есть свои лимиты, я пытаюсь их соблюдать, но у меня не получается. Прошу пожалуйста помочь мне с данной проблемой т.к в документации api написано, что с 1 ip 500req/10s но я даже не могу отправить 250 запросов за 10 секунд. Вот документация -
https://mexcdevelop.github.io/apidocs/spot_v3_en/?...
Если же я правильно понимаю свой же скрипт, то я отправляю по 100 запросов каждые 10 секунд, что правда, но api предоставляет возможность до 500 запросов каждые 10 секунд отправлять, но если я захочу отправлять больше 100, то сразу ошибка
Прошу сильно не судить т.к это первый проект)