mirror of
git://git.acid.vegas/coinmarketcap.git
synced 2024-12-22 11:36:37 +00:00
Initial commit
This commit is contained in:
commit
9d4eb03273
15
LICENSE
Normal file
15
LICENSE
Normal file
@ -0,0 +1,15 @@
|
||||
ISC License
|
||||
|
||||
Copyright (c) 2020, acidvegas <acid.vegas@acid.vegas>
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
50
README.md
Normal file
50
README.md
Normal file
@ -0,0 +1,50 @@
|
||||
# coinmarketcap
|
||||
> A Python class for the API on [CoinMarketCap](https://coinmarketcap.com)
|
||||
|
||||
## Requirements
|
||||
* [Python](https://www.python.org/downloads/) *(**Note:** This script was developed to be used with the latest version of Python)*
|
||||
|
||||
## API Documentation
|
||||
- [CoinMarketCap API Documentation](https://coinmarketcap.com/api/documentation/v1/)
|
||||
|
||||
## Information
|
||||
In order to use the CoinMarketCap API, you will need an API key which you can sign up for one [here](https://pro.coinmarketcap.com/signup/).
|
||||
|
||||
Data from the API will be cached for 5 minutes at a time (that is how long it takes CoinMarketCap to refresh their data) this way you will not get rate limited.
|
||||
|
||||
The class has only 2 main functions, one for global data and one for ticker data.
|
||||
|
||||
## Example
|
||||
```python
|
||||
from coinmarketcap import CoinMarketCap
|
||||
|
||||
CMC = CoinMarketCap('API_KEY_HERE')
|
||||
|
||||
global_data = CMC._global() # Global data example
|
||||
print('Cryptocurrencies : ' + str(global_data['cryptocurrencies']))
|
||||
print('Exchanges : ' + str(global_data['exchanges']))
|
||||
print('BTC Dominance : ' + str(global_data['btc_dominance']))
|
||||
print('ETH Dominance : ' + str(global_data['eth_dominance']))
|
||||
print('Market Cap : ' + str(global_data['market_cap']))
|
||||
print('Volume : ' + str(global_data['volume']))
|
||||
|
||||
ticker_data = CMC._ticker() # Ticker data example
|
||||
for item in ticker_data:
|
||||
print('ID : ' + item)
|
||||
print('Name : ' + ticker_data[item]['name'])
|
||||
print('Symbol : ' + ticker_data[item]['symbol'])
|
||||
print('Slug : ' + ticker_data[item]['slug'])
|
||||
print('Rank : ' + str(ticker_data[item]['rank']))
|
||||
print('Price : ' + str(ticker_data[item]['price']))
|
||||
print('1h Percent : ' + str(ticker_data[item]['percent']['1h']))
|
||||
print('24h Percent : ' + str(ticker_data[item]['percent']['24h']))
|
||||
print('7d Percent : ' + str(ticker_data[item]['percent']['7d']))
|
||||
print('Volume : ' + str(ticker_data[item]['volume']))
|
||||
print('Market Cap : ' + str(ticker_data[item]['market_cap']))
|
||||
input('') # Press enter to continue...
|
||||
```
|
||||
|
||||
## Mirrors
|
||||
- [acid.vegas](https://acid.vegas/coinmarketcap) *(main)*
|
||||
- [GitHub](https://github.com/acidvegas/coinmarketcap)
|
||||
- [GitLab](https://gitlab.com/acidvegas/coinmarketcap)
|
56
coinmarketcap.py
Normal file
56
coinmarketcap.py
Normal file
@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env python
|
||||
# CoinMarketCap API Class - Developed by acidvegas in Python (https://acid.vegas/coinmarketcap)
|
||||
|
||||
import http.client
|
||||
import json
|
||||
import time
|
||||
import zlib
|
||||
|
||||
class CoinMarketCap(object):
|
||||
def __init__(self, api_key):
|
||||
self.api_key = api_key
|
||||
self.cache = {'global':dict(), 'ticker':dict()}
|
||||
self.last = {'global':0 , 'ticker':0 }
|
||||
|
||||
def _api(self, _endpoint):
|
||||
conn = http.client.HTTPSConnection('pro-api.coinmarketcap.com', timeout=15)
|
||||
conn.request('GET', '/v1/' + _endpoint, headers={'Accept':'application/json', 'Accept-Encoding':'deflate, gzip', 'X-CMC_PRO_API_KEY':self.api_key})
|
||||
response = zlib.decompress(conn.getresponse().read(), 16+zlib.MAX_WBITS).decode('utf-8').replace(': null', ': "0"')
|
||||
conn.close()
|
||||
return json.loads(response)['data']
|
||||
|
||||
def _global(self):
|
||||
if time.time() - self.last['global'] < 300:
|
||||
return self.cache['global']
|
||||
else:
|
||||
data = self._api('global-metrics/quotes/latest')
|
||||
self.cache['global'] = {
|
||||
'cryptocurrencies' : data['active_cryptocurrencies'],
|
||||
'exchanges' : data['active_exchanges'],
|
||||
'btc_dominance' : int(data['btc_dominance']),
|
||||
'eth_dominance' : int(data['eth_dominance']),
|
||||
'market_cap' : int(data['quote']['USD']['total_market_cap']),
|
||||
'volume' : int(data['quote']['USD']['total_volume_24h'])
|
||||
}
|
||||
self.last['global'] = time.time()
|
||||
return self.cache['global']
|
||||
|
||||
def _ticker(self):
|
||||
if time.time() - self.last['ticker'] < 300:
|
||||
return self.cache['ticker']
|
||||
else:
|
||||
data = self._api('cryptocurrency/listings/latest?limit=5000')
|
||||
self.cache['ticker'] = dict()
|
||||
for item in data:
|
||||
self.cache['ticker'][item['id']] = {
|
||||
'name' : item['name'],
|
||||
'symbol' : item['symbol'],
|
||||
'slug' : item['slug'],
|
||||
'rank' : item['cmc_rank'],
|
||||
'price' : float(item['quote']['USD']['price']),
|
||||
'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'])},
|
||||
'volume' : int(float(item['quote']['USD']['volume_24h'])),
|
||||
'market_cap' : int(float(item['quote']['USD']['market_cap']))
|
||||
}
|
||||
self.last['ticker'] = time.time()
|
||||
return self.cache['ticker']
|
Loading…
Reference in New Issue
Block a user