61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
import logging
|
|
import re
|
|
|
|
import yfinance as yf
|
|
from aprsd import plugin
|
|
|
|
import aprsd_stock_plugin
|
|
|
|
|
|
LOG = logging.getLogger("APRSD")
|
|
|
|
|
|
class YahooStockQuote(plugin.APRSDRegexCommandPluginBase):
|
|
|
|
version = aprsd_stock_plugin.__version__
|
|
|
|
# Look for any command that starts with s or S
|
|
command_regex = "^[sS]"
|
|
|
|
# the command is for ?
|
|
command_name = "stock"
|
|
|
|
enabled = False
|
|
|
|
def setup(self):
|
|
# Do some checks here?
|
|
self.enabled = True
|
|
|
|
def process(self, packet):
|
|
LOG.info(self.__class__.__name__)
|
|
|
|
# fromcall = packet.get("from")
|
|
message = packet.get("message_text", None)
|
|
# ack = packet.get("msgNo", "0")
|
|
|
|
a = re.search(r"^.*\s+(.*)", message)
|
|
if a is not None:
|
|
searchcall = a.group(1)
|
|
stock_symbol = searchcall.upper()
|
|
else:
|
|
reply = "No stock symbol"
|
|
return reply
|
|
|
|
LOG.info(f"Fetch stock quote for '{stock_symbol}'")
|
|
|
|
try:
|
|
stock = yf.Ticker(stock_symbol)
|
|
reply = "{} - ask: {} high: {} low: {}".format(
|
|
stock_symbol,
|
|
stock.info["ask"],
|
|
stock.info["dayHigh"],
|
|
stock.info["dayLow"],
|
|
)
|
|
except Exception as e:
|
|
LOG.error(
|
|
f"Failed to fetch stock '{stock_symbol}' from yahoo '{e}'",
|
|
)
|
|
reply = f"Failed to fetch stock '{stock_symbol}'"
|
|
|
|
return reply.rstrip()
|