mirror of
https://github.com/kennethreitz/coinbin.org.git
synced 2026-06-05 23:10:17 +00:00
oh yeah
This commit is contained in:
+49
-1
@@ -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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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>')
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
<p class="subtitle">A Human–Friendly API Service for Crypto Currency Information.</p>
|
||||
|
||||
<p>This service provides machine (and human) friendly JSON data for all known crypto–currencies. All active & known coins are supported.</p>
|
||||
<p>This service provides machine (and human) friendly JSON data for all known crypto–currencies. 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>
|
||||
|
||||
Reference in New Issue
Block a user