Browse Source

exchange_rate: add BitFinex, which has historical rates for usd and eur

yay

Given how few providers have free historical APIs, each one is very much appreciated.
They are doing a public service. Thanks. Not that they ever read commit messages. :)
master
SomberNight 1 year ago
parent
commit
ccf20d24dd
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 8
      electrum/currencies.json
  2. 30
      electrum/exchange_rate.py

8
electrum/currencies.json

@ -2,6 +2,14 @@
"Bit2C": [
"ILS"
],
"BitFinex": [
"EUR",
"GBP",
"JPY",
"TRY",
"USD",
"UST"
],
"BitFlyer": [
"JPY"
],

30
electrum/exchange_rate.py

@ -259,6 +259,35 @@ class Bitbank(ExchangeBase):
return {'JPY': to_decimal(json['data']['last'])}
class BitFinex(ExchangeBase):
async def get_currencies(self):
json = await self.get_json(
'api-pub.bitfinex.com',
f"/v2/conf/pub:list:pair:exchange")
pairs = [pair for pair in json[0]
if len(pair) == 6 and pair[:3] == "BTC"]
return [pair[3:] for pair in pairs]
def history_ccys(self):
return CURRENCIES[self.name()]
async def get_rates(self, ccy):
# ref https://docs.bitfinex.com/reference/rest-public-ticker
json = await self.get_json(
'api-pub.bitfinex.com',
f"/v2/ticker/tBTC{ccy}")
return {ccy: to_decimal(json[6])}
async def request_history(self, ccy):
# ref https://docs.bitfinex.com/reference/rest-public-candles
history = await self.get_json(
'api.bitfinex.com',
f"/v2/candles/trade:1D:tBTC{ccy}/hist?limit=10000")
return dict([(timestamp_to_datetime(h[0] // 1000, utc=True).strftime('%Y-%m-%d'), str(h[2]))
for h in history])
class BitFlyer(ExchangeBase):
async def get_rates(self, ccy):
@ -380,6 +409,7 @@ class CoinGecko(ExchangeBase):
return CURRENCIES[self.name()]
async def request_history(self, ccy):
# ref https://docs.coingecko.com/v3.0.1/reference/coins-id-market-chart
num_days = 365
# Setting `num_days = "max"` started erroring (around 2024-04) with:
# > Your request exceeds the allowed time range. Public API users are limited to querying

Loading…
Cancel
Save