irccex- fantasy cryptocurrency exchange for irc |
git clone git://git.acid.vegas/irccex.git |
Log | Files | Refs | Archive | README | LICENSE |
coinmarketcap.py (2529B)
1 #!/usr/bin/env python 2 # CoinMarketCap API Class - Developed by acidvegas in Python (https://git.acid.vegas/coinmarketcap) 3 4 import http.client 5 import json 6 import time 7 import zlib 8 9 def replace_nulls(json_elem): 10 if isinstance(json_elem, list): 11 return [replace_nulls(elem) for elem in json_elem] 12 elif isinstance(json_elem, dict): 13 return {key: replace_nulls(value) for key, value in json_elem.items()} 14 else: 15 return '0' if json_elem is None else json_elem 16 17 class CoinMarketCap(object): 18 def __init__(self, api_key): 19 self.api_key = api_key 20 self.cache = {'global':dict(), 'ticker':dict()} 21 self.last = {'global':0 , 'ticker':0 } 22 23 def _api(self, _endpoint): 24 conn = http.client.HTTPSConnection('pro-api.coinmarketcap.com', timeout=15) 25 conn.request('GET', '/v1/' + _endpoint, headers={'Accept':'application/json', 'Accept-Encoding':'deflate, gzip', 'X-CMC_PRO_API_KEY':self.api_key}) 26 response = zlib.decompress(conn.getresponse().read(), 16+zlib.MAX_WBITS).decode('utf-8') 27 conn.close() 28 return json.loads(response)['data'] 29 30 def _global(self): 31 if time.time() - self.last['global'] < 300: 32 return self.cache['global'] 33 else: 34 data = self._api('global-metrics/quotes/latest') 35 self.cache['global'] = { 36 'cryptocurrencies' : data['active_cryptocurrencies'], 37 'exchanges' : data['active_exchanges'], 38 'btc_dominance' : int(data['btc_dominance']), 39 'eth_dominance' : int(data['eth_dominance']), 40 'market_cap' : int(data['quote']['USD']['total_market_cap']), 41 'volume' : int(data['quote']['USD']['total_volume_24h']) 42 } 43 self.last['global'] = time.time() 44 return self.cache['global'] 45 46 def _ticker(self): 47 if time.time() - self.last['ticker'] < 300: 48 return self.cache['ticker'] 49 else: 50 data = self._api('cryptocurrency/listings/latest?limit=5000') 51 data = replace_nulls(data) 52 self.cache['ticker'] = dict() 53 for item in data: 54 self.cache['ticker'][item['symbol']] = { 55 'name' : item['name'], 56 'symbol' : item['symbol'], 57 'rank' : item['cmc_rank'], 58 'price' : float(item['quote']['USD']['price']), 59 'percent' : {'1h':float(item['quote']['USD']['percent_change_1h']), '24h':float(item['quote']['USD']['percent_change_24h']), '7d':float(item['quote']['USD']['percent_change_7d'])}, 60 'volume' : int(float(item['quote']['USD']['volume_24h'])), 61 'market_cap' : int(float(item['quote']['USD']['market_cap'])) 62 } 63 self.last['ticker'] = time.time() 64 return self.cache['ticker']