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