diff --git a/IEX_Symbol.py b/IEX_Symbol.py index fe8502d..60d6e14 100644 --- a/IEX_Symbol.py +++ b/IEX_Symbol.py @@ -10,7 +10,7 @@ import schedule from fuzzywuzzy import fuzz import os -from symbol_router import Stock +from Symbol import Stock class IEX_Symbol: diff --git a/Symbol.py b/Symbol.py index 03e4333..22bb11c 100644 --- a/Symbol.py +++ b/Symbol.py @@ -1,5 +1,4 @@ import requests as r -from cg_Crypto import cg_Crypto class Symbol: @@ -28,10 +27,11 @@ class Stock(Symbol): def __init__(self, symbol: str) -> None: self.symbol = symbol self.id = symbol + self.name = "$" + symbol.upper() -# This is so every Coin instance doesnt have to download entire list of coin symbols and id's -cg = cg_Crypto() +# Used by Coin to change symbols for ids +coins = r.get("https://api.coingecko.com/api/v3/coins/list").json() class Coin(Symbol): @@ -40,7 +40,9 @@ class Coin(Symbol): self.get_data() def get_data(self) -> None: - self.id = cg.symbol_id(self.symbol) + self.id = list(filter(lambda coin: coin["symbol"] == self.symbol, coins))[0][ + "id" + ] data = r.get("https://api.coingecko.com/api/v3/coins/" + self.id).json() self.data = data diff --git a/bot.py b/bot.py index 8b5a5fc..77e0f49 100644 --- a/bot.py +++ b/bot.py @@ -260,7 +260,7 @@ def intra(update: Update, context: CallbackContext): mpf.plot( df, type="renko", - title=f"\n${symbol.name}", + title=f"\n{symbol.name}", volume="volume" in df.keys(), style="yahoo", mav=20, @@ -270,7 +270,7 @@ def intra(update: Update, context: CallbackContext): update.message.reply_photo( photo=buf, - caption=f"\nIntraday chart for ${symbol.name} from {df.first_valid_index().strftime('%I:%M')} to" + caption=f"\nIntraday chart for {symbol.name} from {df.first_valid_index().strftime('%I:%M')} to" + f" {df.last_valid_index().strftime('%I:%M')} ET on" + f" {datetime.date.today().strftime('%d, %b %Y')}\n\n{s.price_reply([symbol])[0]}", parse_mode=telegram.ParseMode.MARKDOWN, @@ -298,7 +298,6 @@ def chart(update: Update, context: CallbackContext): parse_mode=telegram.ParseMode.MARKDOWN, ) return - context.bot.send_chat_action( chat_id=chat_id, action=telegram.ChatAction.UPLOAD_PHOTO ) @@ -307,7 +306,7 @@ def chart(update: Update, context: CallbackContext): mpf.plot( df, type="candle", - title=f"\n${symbol.name}", + title=f"\n{symbol.name}", volume="volume" in df.keys(), style="yahoo", savefig=dict(fname=buf, dpi=400, bbox_inches="tight"), @@ -316,7 +315,7 @@ def chart(update: Update, context: CallbackContext): update.message.reply_photo( photo=buf, - caption=f"\n1 Month chart for ${symbol.name} from {df.first_valid_index().strftime('%d, %b %Y')}" + caption=f"\n1 Month chart for {symbol.name} from {df.first_valid_index().strftime('%d, %b %Y')}" + f" to {df.last_valid_index().strftime('%d, %b %Y')}\n\n{s.price_reply([symbol])[0]}", parse_mode=telegram.ParseMode.MARKDOWN, ) @@ -406,8 +405,6 @@ def error(update: Update, context: CallbackContext): # Finally, send the message update.message.reply_text(text=message, parse_mode=telegram.ParseMode.HTML) update.message.reply_text(text="Please inform the bot admin of this issue.") - print("-" * 50) - print(tb_string) def main(): diff --git a/cg_Crypto.py b/cg_Crypto.py index 714b934..9a1bc0d 100644 --- a/cg_Crypto.py +++ b/cg_Crypto.py @@ -9,7 +9,7 @@ import requests as r import schedule from fuzzywuzzy import fuzz from markdownify import markdownify -from symbol_router import Coin +from Symbol import Coin class cg_Crypto: @@ -163,7 +163,7 @@ class cg_Crypto: Returns a timeseries dataframe with high, low, and volume data if its available. Otherwise returns empty pd.DataFrame. """ response = r.get( - "https://api.coingecko.com/api/v3/coins/{symbol}/ohlc?vs_currency=usd&days=1" + f"https://api.coingecko.com/api/v3/coins/{symbol.id}/ohlc?vs_currency=usd&days=1" ) if response.status_code == 200: df = pd.DataFrame( @@ -190,9 +190,9 @@ class cg_Crypto: Returns a timeseries dataframe with high, low, and volume data if its available. Otherwise returns empty pd.DataFrame. """ response = r.get( - "https://api.coingecko.com/api/v3/coins/{symbol}/ohlc?vs_currency=usd&days=30" + f"https://api.coingecko.com/api/v3/coins/{symbol.id}/ohlc?vs_currency=usd&days=30" ) - print(response.status_code) + if response.status_code == 200: df = pd.DataFrame( response.json(), columns=["Date", "Open", "High", "Low", "Close"] @@ -217,7 +217,7 @@ class cg_Crypto: Each symbol passed in is a key with its value being a human readable formatted string of the symbols statistics. """ response = r.get( - f"https://api.coingecko.com/api/v3/coins/{symbol}?localization=false" + f"https://api.coingecko.com/api/v3/coins/{symbol.id}?localization=false" ) if response.status_code == 200: data = response.json() @@ -249,12 +249,12 @@ class cg_Crypto: """ response = r.get( - f"https://api.coingecko.com/api/v3/coins/{symbol}?localization=false" + f"https://api.coingecko.com/api/v3/coins/{symbol.id}?localization=false" ) if response.status_code == 200: data = response.json() try: - return markdownify(data["description"]) + return markdownify(data["description"]["en"]) except KeyError: return f"{symbol} does not have a description available." diff --git a/symbol_router.py b/symbol_router.py index f673cca..e7c5de6 100644 --- a/symbol_router.py +++ b/symbol_router.py @@ -51,7 +51,7 @@ class Router: symbols.append(Coin(coin.lower())) else: print(f"{coin} is not in list of coins") - + print(symbols) return symbols def status(self) -> str: