From 270f3e6d77cc720b1b3f3c529b1b6aa5c63578a2 Mon Sep 17 00:00:00 2001 From: Michael Kantor Date: Tue, 9 Jan 2024 22:02:20 -0500 Subject: Recreated git repo as screenshots were too large. --- cusmodules/cuswidgets/ticker_gecko.py | 126 ++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100755 cusmodules/cuswidgets/ticker_gecko.py (limited to 'cusmodules/cuswidgets/ticker_gecko.py') diff --git a/cusmodules/cuswidgets/ticker_gecko.py b/cusmodules/cuswidgets/ticker_gecko.py new file mode 100755 index 0000000..1b7d1ee --- /dev/null +++ b/cusmodules/cuswidgets/ticker_gecko.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python +import os +import sys +import json +import time +import requests +import subprocess +from datetime import datetime +from threading import Thread + +def match(currency): + currencies = { + "BTC": "bitcoin", + "ETH": "ethereum", + "XRP": "xrp", + "LTC": "litecoin", + "BCH": "bitcoin-cash", + "XMR": "monero", + "DOGE": "dogecoin" + } + + return currencies[currency] + +def Gecko(currs): + #prices = '' + prices = {} + + for i in currs: + curr = match(i) + + source = requests.get(f'https://api.coingecko.com/api/v3/coins/{curr}/').text + + data = json.loads(source) + + price = str(data['market_data']['current_price']['usd']) + + try: + if len(price[:price.index('.')]) > 3: + price = price[:2] + ',' + price[2:] + + except: + price = price[:2] + ',' + price[2:] + + price = '$' + price + + price = {i: price} + + prices.update(price) + + with open('/tmp/crprices.json', 'w') as f: + f.write(str(prices).replace("'", '"')) + +def main(): + global crpos + home = os.path.expanduser('~') + currs = [] + priced = '' + + try: + crpos += 1 + + except: + crpos = 0 + + try: + with open('/tmp/crprices.json', 'r') as f: + prices_str = f.read() + prices = json.loads(prices_str) + + for i in prices: + currs += i + + for i in prices: + if currs[len(currs) - 1] == i: + price = f'{i}: {prices[i]} |' + + else: + price = f'{i}: {prices[i]} | ' + + priced += price + + leng = len(priced) + + #print(crpos >= leng) + if crpos >= leng: + crpos = 0 + + crprices = f"{priced[crpos:]} {priced[:crpos]}" + + #print(priced) + #print(crpos) + #print(leng) + #print(crprices) + #print(crprices[:15], '\n') + return crprices[:15] + + except Exception as e: + with open(f'{home}/.local/share/ticker_gecko/ticker_gecko.log', 'w') as f: + f.write(e) + + return f'ERROR! Check "{home}/.local/share/ticker_gecko/ticker_gecko.log".' + +if __name__ == '__main__': + if sys.argv[1] == '--help' or sys.argv[1] == '-help' or sys.argv[1] == '--h' or sys.argv[1] == '-h': + print('Usage:\n\tStart server by running command: "/path/to/ticker_gecko.py".\n\tPut abbreviations of crypto in arguments: "/path/to/ticker_gecko.py BTC LTC" (will get price for bitcoin and litecoin)\n\tAdd main function to GenPollText widget in config.py: "\n\t\timport ticker_gecko\n\t\twidget.GenPollText(\n\t\t\tfunc=ticker_gecko.main,\n\t\t\tupdate_interval= 0.5),"') + sys.exit(0) + + currs = [] + argc = len(sys.argv) + for i in range(argc): + if i == 0: + pass + + else: + currs.append(sys.argv[i]) + + while True: + Gecko(currs) + + with open('/tmp/crprices.json', 'r') as f: + leng = len(f.read()) + + repeat_time = leng - ((len(currs) - 1) * 5) + + time.sleep(repeat_time) + -- cgit v1.2.1