import aiohttp from pydantic import BaseModel import asyncio class Models: class ExchangeRates(BaseModel): currency: str rates: dict class CoinBase(): _url_base='https://api.coinbase.com/v2' async def exchange_rates(self, currency): async with aiohttp.ClientSession() as session: url=self._url_base+f'/exchange-rates?currency={currency}' async with session.get(url) as response: data=(await response.json())['data'] for i in data['rates'].keys(): data['rates'][i]=float(data['rates'][i]) return Models.ExchangeRates(**data) r=CoinBase() asyncio.run(r.exchange_rates('USDT')) Python import aiohttp from pydantic import BaseModel import asyncio class Models: class ExchangeRates(BaseModel): currency: str rates: dict class CoinBase(): _url_base='https://api.coinbase.com/v2' async def exchange_rates(self, currency): async with aiohttp.ClientSession() as session: url=self._url_base+f'/exchange-rates?currency={currency}' async with session.get(url) as response: data=(await response.json())['data'] for i in data['rates'].keys(): data['rates'][i]=float(data['rates'][i]) return Models.ExchangeRates(**data) r=CoinBase() asyncio.run(r.exchange_rates('USDT'))
result = asyncio.run(r.exchange_rates('TON')) print(f'1 {result.currency} = {round(result.rates["USDT"],2)} USDT') Python result = asyncio.run(r.exchange_rates('TON')) print(f'1 {result.currency} = {round(result.rates["USDT"],2)} USDT') Получил "1 TON = 1.2 USDT" Данные точно корректны? Что значит rates(думал что количество определенного токена за единицу запрашиваемого)?
import asyncio import aiohttp class CoinBase: _url_base = 'https://api.coinbase.com/v2' async def exchange_rate(self, currency): async with aiohttp.ClientSession() as session: url = f'{self._url_base}/exchange-rates?currency={currency}' async with session.get(url) as response: data = await response.json() if 'data' not in data or 'rates' not in data['data']: raise ValueError("Unexpected response format from API") rates = data['data']['rates'] if currency not in rates: raise ValueError(f"Currency {currency} not found in response") return float(rates[currency]) # Преобразуем строку в число async def main(): r = CoinBase() usdt_rate = await r.exchange_rate('USDT') print(f"Exchange rate for USDT: {usdt_rate}") # Запуск асинхронной функции asyncio.run(main())
можно использовать Aiocryptopay там можно узнавать курс всех криптовалют и тд upd: документация https://help.send.tg/en/articles/10279948-crypto-pay-api