Untitled
Anonymous
python
01/07/2023 1:06 AM
3.5 KB
34
Indexable
import pandas as pd
import requests
from datetime import datetime
from time import sleep, time
from concurrent.futures import ThreadPoolExecutor
import random
import hopsworks
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
project = hopsworks.login()
fs = project.get_feature_store()
# endpoint to get bitcoin price
binanceAPI = "https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT"
FREQUNCY = 1
dt = datetime.now()
ts = datetime.timestamp(dt)
data_dict = {"btc_price": 0,"event_time": ts}
blockchainAPI = "https://blockchain.info/q/hashrate"
btc_price = []
timestamp = []
df_initial = pd.DataFrame(columns=['btc_price', 'timestamp'])
def get_btc_price():
while True:
r = requests.get(binanceAPI)
btc_price.append(float(r.json()['price']))
dt = datetime.now()
ts = datetime.timestamp(dt)
timestamp.append(ts)
# df = pd.DataFrame(data_dict)
# print(btc_price)
# print(timestamp)
# if (len(btc_price) >= 10):
# sleep(10) # Upload every 10 seconds
# upload_to_hopsworks(btc_price, timestamp, True)
# else:
# upload_to_hopsworks(btc_price, timestamp, False)
# print(timestamp)
# print(btc_price)
sleep(1/FREQUNCY)
def upload_to_hopsworks(first=True):
while True:
btc_df = df_initial.append(pd.DataFrame(list(zip(btc_price, timestamp)), columns=['btc_price', 'timestamp']))
# keeps the 50 most recent records
# if len(btc_df) > 20:
# btc_df = btc_df.drop(btc_df.index[0:len(btc_df)-20]).reset_index(drop=True)
if len(btc_df) > 5:
btc_fg = fs.get_feature_group( # Already created this in hospworks
name="btc_modal",
version=1)
btc_fg.insert(btc_df, storage="online", write_options={"wait_for_job": False})
print(btc_df)
# Every 60 seconds we upload our new DF to hopsworks
sleep(5/FREQUNCY)
'''
def get_hash_rate():
while True:
r = requests.get(blockchainAPI)
#rand_int = random.randint(-1000, 1000)
data_dict['hash_rate'] = float(r.json())
sleep(10/FREQUNCY)
'''
if __name__ == "__main__":
# Delete the most recent FG (outdated data)
'''
try:
previous_btc_fg = fs.get_feature_group('btc_modal', version=1)
previous_btc_fg.delete()
except:
'''
executor = ThreadPoolExecutor(2)
for func in [get_btc_price, upload_to_hopsworks]:
executor.submit(func)
executor.shutdown(wait=True)
Editor is loading...