This commit is contained in:
2017-08-25 00:18:13 -04:00
parent a00be5d8ef
commit 0edd8d2d45
3 changed files with 55 additions and 46 deletions
+49 -1
View File
@@ -46,6 +46,43 @@ class MWT(object):
return func
class Coin():
"""A Coin, unlike Mario's."""
def __init__(self, ticker):
self.ticker = ticker
self.name = None
self.rank = None
self._value = None
self.update()
def update(self):
coins = get_coins()
print(f'Fetching data on {self.ticker}')
self.name = coins[self.ticker]['name']
self.rank = coins[self.ticker]['rank']
self._usd = coins[self.ticker]['usd']
@property
def usd(self):
return self._usd
@property
def btc(self):
coins = get_coins()
rate = coins['btc']['usd']
return float(self.usd / rate)
def value(self, coin):
"""Example: BTC -> ETH"""
return (self.btc / Coin(coin).btc)
def __repr__(self):
return f'<Coin ticker={self.ticker!r}>'
@MWT(timeout=300)
def get_coins():
coins_db = OrderedDict()
@@ -54,15 +91,26 @@ def get_coins():
html = pq(pq(r.content)('table')[0]).html()
df = pandas.read_html("<table>{}</table>".format(html))
df = pandas.concat(df)
btc_value = float(df.to_dict()['Price'][0][1:].replace(',', ''))
for row in df.itertuples():
rank = int(row[1])
name = row[2]
ticker = row[3].lower()
usd = float(row[5][1:].replace(',', ''))
btc = usd / btc_value
coins_db.update({ticker: {'rank': rank, 'name': name, 'ticker': ticker, 'usd': usd}})
coins_db.update({ticker: {'rank': rank, 'name': name, 'ticker': ticker, 'usd': usd, 'btc': btc}})
return coins_db
def get_coin(ticker):
return Coin(ticker)
+3 -43
View File
@@ -1,6 +1,6 @@
import os
from scraper import get_coins
from scraper import get_coins, get_coin, Coin
from wallets import wallets
from flask import Flask, jsonify, render_template, request
@@ -15,46 +15,6 @@ API_KEYS = os.environ.get('API_KEYS', '').split(':')
db = records.Database()
pro_db = records.Database(os.environ['HEROKU_POSTGRESQL_TEAL_URL'])
class Coin():
"""A Coin, unlike Mario's."""
def __init__(self, ticker):
self.ticker = ticker
self.name = None
self.rank = None
self._value = None
self.update()
def update(self):
coins = get_coins()
print(f'Fetching data on {self.ticker}')
self.name = coins[self.ticker]['name']
self.rank = coins[self.ticker]['rank']
self._usd = coins[self.ticker]['usd']
@property
def usd(self):
return self._usd
@property
def btc(self):
coins = get_coins()
rate = coins['btc']['usd']
return float(self.usd / rate)
def value(self, coin):
"""Example: BTC -> ETH"""
return (self.btc / Coin(coin).btc)
def __repr__(self):
return f'<Coin ticker={self.ticker!r}>'
def get_coin(ticker):
return Coin(ticker)
app = Flask(__name__)
app.debug = True
@@ -69,7 +29,7 @@ def hello():
lbc_sc = get_exchange('lbc', 'sc')
lbc_42_sc = get_exchange_value('lbc', 'sc', 42.01)
return render_template('index.html', lbc=lbc, lbc_42=lbc_42, lbc_sc=lbc_sc, lbc_42_sc=lbc_42_sc, coins=get_coins().keys())
return render_template('index.html', lbc=lbc, lbc_42=lbc_42, lbc_sc=lbc_sc, lbc_42_sc=lbc_42_sc, coins=get_coins().values())
@app.route('/thanks')
def thanks():
@@ -78,7 +38,7 @@ def thanks():
@app.route('/coins')
def all_coins():
return jsonify(coins=[k for k in get_coins().keys()])
return jsonify(coins=get_coins())
@app.route('/<coin>')
+3 -2
View File
@@ -15,7 +15,7 @@
<p class="subtitle">A HumanFriendly API Service for Crypto Currency Information.</p>
<p>This service provides machine (and human) friendly JSON data for all known cryptocurrencies. All active & known coins are supported.</p>
<p>This service provides machine (and human) friendly JSON data for all known cryptocurrencies. All {{ coins|length }} active & known coins are supported.</p>
<p>Historical data, exchange rates, conversion ratios, and value conversion endpoints are all available, free of charge<label for="sn-in-his-later-books" class="margin-toggle sidenote-number"></label></span><input type="checkbox" id="sn-in-his-later-books" class="margin-toggle"/><span class="sidenote"><em>If you enjoy this service, consider <a href="/thanks">sending us a tip</a>!</em></span>. Data is refreshed every five minutes.</p>
@@ -82,7 +82,8 @@
<pre>
{
"coins": [{% for coin in coins %}
"<a href="/{{ coin }}">{{ coin }}</a>", {% endfor %}
"<strong><a href="/{{ coin['ticker'] }}">{{ coin['ticker'] }}</a></strong>":
{{ coin }},{% endfor %}
]
}
</pre>