From a226f0486f0c49397300ae3e854961c24402fcc9 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 9 Nov 2021 14:43:31 -0500 Subject: [PATCH] Working plugin pulled from aprsd itself. This is the initial commit of the working yahoo finance stock quotes plugin. This was removed from APRSD itself to help with the APRSD requirements. --- AUTHORS | 1 + ChangeLog | 7 +++ aprsd_stock_plugin/aprsd_stock_plugin.py | 56 ---------------------- aprsd_stock_plugin/stock.py | 61 ++++++++++++++++++++++++ requirements.txt | 3 +- 5 files changed, 71 insertions(+), 57 deletions(-) create mode 100644 AUTHORS create mode 100644 ChangeLog delete mode 100644 aprsd_stock_plugin/aprsd_stock_plugin.py create mode 100644 aprsd_stock_plugin/stock.py diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..cc71ac7 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Hemna diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..5875cf8 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,7 @@ +CHANGES +======= + +v0.1.0 +------ + +* Initial commit diff --git a/aprsd_stock_plugin/aprsd_stock_plugin.py b/aprsd_stock_plugin/aprsd_stock_plugin.py deleted file mode 100644 index c755da8..0000000 --- a/aprsd_stock_plugin/aprsd_stock_plugin.py +++ /dev/null @@ -1,56 +0,0 @@ -import logging - -from aprsd import messaging, plugin, trace - -import aprsd_stock_plugin - - -LOG = logging.getLogger("APRSD") - - -class YahooStockQuote(plugin.APRSDRegexCommandPluginBase): - - version = aprsd_stock_plugin.__version__ - # Look for any command that starts with w or W - command_regex = "^[wW]" - # the command is for ? - command_name = "weather" - - enabled = False - - def setup(self): - # Do some checks here? - self.enabled = True - - def create_threads(self): - """This allows you to create and return a custom APRSDThread object. - - Create a child of the aprsd.threads.APRSDThread object and return it - It will automatically get started. - - You can see an example of one here: - https://github.com/craigerl/aprsd/blob/master/aprsd/threads.py#L141 - """ - if self.enabled: - # You can create a background APRSDThread object here - # Just return it for example: - # https://github.com/hemna/aprsd-weewx-plugin/blob/master/aprsd_weewx_plugin/aprsd_weewx_plugin.py#L42-L50 - # - return [] - - @trace.trace - def process(self, packet): - - """This is called when a received packet matches self.command_regex.""" - - LOG.info("YahooStockQuote Plugin") - - packet.get("from") - packet.get("message_text", None) - - if self.enabled: - # Now we can process - return "some reply message" - else: - LOG.warning("YahooStockQuote is disabled.") - return messaging.NULL_MESSAGE diff --git a/aprsd_stock_plugin/stock.py b/aprsd_stock_plugin/stock.py new file mode 100644 index 0000000..bd08402 --- /dev/null +++ b/aprsd_stock_plugin/stock.py @@ -0,0 +1,61 @@ +import logging +import re + +import yfinance as yf +from aprsd import plugin, trace + +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 + + @trace.trace + 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() diff --git a/requirements.txt b/requirements.txt index 3c8784e..c9285a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pbr -aprsd>=2.2.0 +aprsd>=2.4.0 +yfinance