Files
drift/utils/glassnode/client.py
T

80 lines
2.2 KiB
Python
Raw Normal View History

import os
import sys
from .utils import *
from .endpoints import Endpoints
class GlassnodeClient:
def __init__(
self,
api_key=None,
asset='BTC',
resolution='24h',
currency='native',
since=None,
until=None
):
"""
Glassnode API client.
:param asset: Asset to which the metric refers. (ex. BTC)
:param resolution: Temporal resolution of the data received. Can be '10m', '1h', '24h', '1w' or '1month'.
:param currency: NATIVE, USD
:param since: Start date as a string (ex. 2015-11-27)
:param until: Start date as a string (ex. 2018-05-03)
"""
if api_key:
self._api_key = api_key
elif 'GLASSNODE_API_KEY' in os.environ:
self._api_key = os.environ.get('GLASSNODE_API_KEY')
else:
# API key is required for every endpoint!
print(f'\033[91m ERROR: Glassnode API key required!\033[0m')
sys.exit()
self.endpoints = Endpoints()
self.endpoints.endpoints = self._api_key
self._asset = asset
self._resolution = resolution
self._since = since
self._until = until
self._currency = currency
@property
def asset(self):
return self._asset
@property
def resolution(self):
return self._resolution
def get(self, endpoint, params=None):
return fetch(endpoint, self.__prepare_request_params(params))
def __prepare_request_params(self, params):
p = dict()
p['api_key'] = self._api_key
p['a'] = self._asset
p['i'] = self._resolution
if self._since is not None:
try:
p['s'] = unix_timestamp(self._since)
except Exception as e:
print(e)
if self._until is not None:
try:
p['u'] = unix_timestamp(self._until)
except Exception as e:
print(e)
# Set domain specific query parameters if available
if params:
if 'e' in p:
p['e'] = params['e']
if 'm' in p:
p['miner'] = params['m']
return p