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