-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGetAPIData.py
95 lines (84 loc) · 2.65 KB
/
GetAPIData.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from flask import Flask, render_template
from requests import Session
from requests.exceptions import ConnectionError, Timeout, TooManyRedirects
import json
import math
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from coin import Coin
from coin_database import Base, Coins
from sqlalchemy import exists
import threading
app = Flask(__name__)
def createSession():
engine = create_engine('sqlite:///coins_db.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
return DBSession()
def init():
url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
parameters = {
'start':'1',
'limit':'10',
'convert':'CAD'
}
headers = {
'Accepts': 'application/json',
'X-CMC_PRO_API_KEY': '57b0aad8-c20d-4c66-84f6-29a84f550a17',
}
apiSession = Session()
apiSession.headers.update(headers)
numTimesUpdated = 0
def update(index):
updateTimer = threading.Timer(60.0, update, [index+1])
updateTimer.start()
print (index)
if index >= 3:
print("cancelled thread")
updateTimer.cancel()
print("\nupdated",flush=True)
response = apiSession.get(url, params=parameters)
apiData = json.loads(response.text)
session = createSession()
for c in apiData['data']:
newItem = Coins(
name=c['name'],
symbol=c['symbol'],
price=math.floor(c['quote']['CAD']['price']*100)/100,
marketCap=math.floor((c['quote']['CAD']['market_cap']) *100)/100,
id=c['id']
)
exists = session.query(Coins).filter_by(id = c['id']).first()
if exists is not None:
coin = session.query(Coins).filter_by(id = c['id']).one()
print("updated " + coin.name + " from " + str(coin.price) + " to " + str(newItem.price))
coin.price = newItem.price
coin.marketCap = newItem.marketCap
else:
session.add(newItem)
print("created" + coin.name + "at")
session.commit()
update(numTimesUpdated)
init()
@app.route('/')
@app.route('/coins')
def coinsHome():
try:
apiCoins = []
cSession = createSession()
coinQueries = cSession.query(Coins).all()
coinHeader = Coin("Coin", "Name","Price", "Market Cap")
for c in coinQueries:
coinData = Coin(
c.name,
c.symbol,
math.floor(c.price*100)/100,
math.floor((c.marketCap)*100)/100
)
apiCoins.append(coinData)
return render_template('coin.html', data=apiCoins, header=coinHeader)
except (ConnectionError, Timeout, TooManyRedirects) as e:
print(e)
if __name__ == '__main__':
app.debug = True
app.run(host='0.0.0.0', port=8080)