should be done now

This commit is contained in:
2025-08-12 23:26:31 -05:00
commit a3d33f9354
3 changed files with 652 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
venv/**
config.toml

372
main.py Normal file
View File

@@ -0,0 +1,372 @@
#!/usr/bin/env python3
"""
RSS to MQTT Push Notification Script
Reads RSS feeds from config and sends new items as push notifications via MQTT
"""
import json
import hashlib
import time
import logging
import re
from typing import Set, Dict, Any, Optional
from pathlib import Path
from html import unescape
from html.parser import HTMLParser
import toml
import feedparser
import paho.mqtt.client as mqtt
class HTMLTextExtractor(HTMLParser):
"""Simple HTML parser to extract text content"""
def __init__(self):
super().__init__()
self.text_content = []
def handle_data(self, data):
self.text_content.append(data.strip())
def get_text(self):
return ' '.join(self.text_content).strip()
def clean_html_text(html_content: str) -> str:
"""Clean HTML content and extract plain text"""
if not html_content:
return ""
# First unescape HTML entities
text = unescape(html_content)
# Use HTML parser to extract text
parser = HTMLTextExtractor()
try:
parser.feed(text)
clean_text = parser.get_text()
except Exception:
# Fallback: use regex to strip HTML tags
clean_text = re.sub('<[^<]+?>', '', text)
# Clean up whitespace
clean_text = re.sub(r'\s+', ' ', clean_text).strip()
return clean_text
class RSSNotificationPusher:
def __init__(self, config_path: str = "config.toml"):
self.config_path = config_path
self.config = self.load_config()
self.seen_items: Dict[str, Set[str]] = {}
self.mqtt_client = None
self.setup_logging()
self.setup_mqtt()
def setup_logging(self):
"""Setup logging configuration"""
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('rss_notifier.log'),
logging.StreamHandler()
]
)
self.logger = logging.getLogger(__name__)
def load_config(self) -> Dict[str, Any]:
"""Load configuration from TOML file"""
try:
with open(self.config_path, 'r') as f:
config = toml.load(f)
return config
except FileNotFoundError:
self.create_sample_config()
raise FileNotFoundError(f"Config file {self.config_path} not found. Sample created.")
except Exception as e:
raise Exception(f"Error loading config: {e}")
def create_sample_config(self):
"""Create a sample config file"""
sample_config = {
"broker": {
"address": "proliant.lan",
"client_id": "notification-pusher-client",
"topic": "notification-pusher" # MQTT topic
},
"auth": {
"username": "mqttuser",
"password": "XXXXXXXXX"
},
"notifications": {
"topic": "rss-feeds", # ntfy.sh topic for notifications
"max_body_length": 150 # Maximum length for notification body
},
"rss": {
"feeds": [
"https://feeds.feedburner.com/TechCrunch",
"https://rss.cnn.com/rss/edition.rss",
"https://feeds.bbci.co.uk/news/rss.xml"
],
"check_interval": 300, # seconds
"max_items_per_feed": 5 # Only check top N items per feed
}
}
with open(self.config_path, 'w') as f:
toml.dump(sample_config, f)
print(f"Sample config created at {self.config_path}")
def setup_mqtt(self):
"""Setup MQTT client connection"""
try:
self.mqtt_client = mqtt.Client(client_id=self.config["broker"]["client_id"])
# Set credentials if provided
if "auth" in self.config:
self.mqtt_client.username_pw_set(
self.config["auth"]["username"],
self.config["auth"]["password"]
)
# Setup callbacks
self.mqtt_client.on_connect = self.on_mqtt_connect
self.mqtt_client.on_disconnect = self.on_mqtt_disconnect
self.mqtt_client.on_publish = self.on_mqtt_publish
# Connect to broker
self.mqtt_client.connect(self.config["broker"]["address"], 1883, 60)
self.mqtt_client.loop_start()
except Exception as e:
self.logger.error(f"MQTT setup error: {e}")
raise
def on_mqtt_connect(self, client, userdata, flags, rc):
"""MQTT connection callback"""
if rc == 0:
self.logger.info("Connected to MQTT broker")
else:
self.logger.error(f"Failed to connect to MQTT broker: {rc}")
def on_mqtt_disconnect(self, client, userdata, rc):
"""MQTT disconnection callback"""
self.logger.warning("Disconnected from MQTT broker")
def on_mqtt_publish(self, client, userdata, mid):
"""MQTT publish callback"""
self.logger.debug(f"Message published: {mid}")
def generate_item_id(self, feed_url: str, item: Dict[str, Any]) -> str:
"""Generate unique ID for RSS item"""
# Use link if available, otherwise use title + published date
identifier = item.get('link', '') + item.get('title', '') + item.get('published', '')
return hashlib.md5((feed_url + identifier).encode()).hexdigest()
def parse_rss_feed(self, feed_url: str) -> list:
"""Parse RSS feed and return new items (limited to most recent items)"""
try:
self.logger.info(f"Parsing feed: {feed_url}")
feed = feedparser.parse(feed_url)
if feed.bozo:
self.logger.warning(f"Feed parsing issues for {feed_url}: {feed.bozo_exception}")
# Initialize seen items set for this feed if not exists
if feed_url not in self.seen_items:
self.seen_items[feed_url] = set()
# Get max items to check from config (default 5)
max_items = self.config.get("rss", {}).get("max_items_per_feed", 5)
recent_entries = feed.entries[:max_items]
self.logger.debug(f"Processing top {len(recent_entries)} entries from {feed_url}")
new_items = []
for entry in recent_entries:
item_id = self.generate_item_id(feed_url, entry)
if item_id not in self.seen_items[feed_url]:
self.seen_items[feed_url].add(item_id)
new_items.append(entry)
self.logger.info(f"Found {len(new_items)} new items in {feed_url} (checked top {max_items})")
return new_items
except Exception as e:
self.logger.error(f"Error parsing feed {feed_url}: {e}")
return []
def extract_clean_description(self, entry: Dict[str, Any]) -> str:
"""Extract and clean description/summary from RSS entry"""
# Try different fields for content
content_candidates = [
entry.get('summary', ''),
entry.get('description', ''),
entry.get('content', [{}])[0].get('value', '') if entry.get('content') else '',
entry.get('subtitle', '')
]
# Find the first non-empty content
raw_content = ""
for candidate in content_candidates:
if candidate and candidate.strip():
raw_content = candidate
break
if not raw_content:
return "No description available"
# Clean HTML and extract text
clean_text = clean_html_text(raw_content)
# If still empty after cleaning, try original with basic cleanup
if not clean_text:
clean_text = re.sub(r'<[^>]+>', '', raw_content)
clean_text = re.sub(r'\s+', ' ', clean_text).strip()
return clean_text or "No description available"
def create_notification(self, entry: Dict[str, Any], feed_title: str = "") -> Dict[str, Any]:
"""Create notification object from RSS entry"""
# Extract and clean title
title = entry.get('title', 'No Title').strip()
title = clean_html_text(title) or title # Clean any HTML in title too
if feed_title:
title = f"[{feed_title}] {title}"
# Extract and clean description
body = self.extract_clean_description(entry)
# Truncate body if too long
max_length = self.config.get("notifications", {}).get("max_body_length", 150)
if len(body) > max_length:
body = body[:max_length-3] + "..."
# Get notification topic from config (for ntfy.sh)
notification_topic = self.config.get("notifications", {}).get("topic", "rss-feeds")
# Create notification object matching the Rust struct format
notification = {
"title": title,
"body": body,
"topic": notification_topic # This is the ntfy.sh topic
}
# Add link if available
if 'link' in entry and entry['link'].strip():
notification["link"] = entry['link'].strip()
return notification
def send_notification(self, notification: Dict[str, Any]):
"""Send notification via MQTT"""
try:
payload = json.dumps(notification, ensure_ascii=False)
result = self.mqtt_client.publish(
self.config["broker"]["topic"],
payload,
qos=1
)
if result.rc == mqtt.MQTT_ERR_SUCCESS:
self.logger.info(f"Notification sent: {notification['title'][:50]}...")
self.logger.debug(f"Full notification: {notification}")
else:
self.logger.error(f"Failed to send notification: {result.rc}")
except Exception as e:
self.logger.error(f"Error sending notification: {e}")
def process_feeds(self):
"""Process all RSS feeds and send notifications for new items"""
feeds = self.config.get("rss", {}).get("feeds", [])
if not feeds:
self.logger.warning("No RSS feeds configured")
return
for feed_url in feeds:
try:
# Parse feed
feed_data = feedparser.parse(feed_url)
feed_title = clean_html_text(feed_data.feed.get('title', '')) or 'RSS Feed'
# Get new items
new_items = self.parse_rss_feed(feed_url)
# Send notifications for new items
for item in new_items:
notification = self.create_notification(item, feed_title)
self.send_notification(notification)
# Small delay to avoid overwhelming
time.sleep(0.5)
except Exception as e:
self.logger.error(f"Error processing feed {feed_url}: {e}")
def run_once(self):
"""Run the notification process once"""
self.logger.info("Starting RSS notification check")
self.process_feeds()
self.logger.info("RSS notification check completed")
def run_continuously(self):
"""Run the notification process continuously"""
check_interval = self.config.get("rss", {}).get("check_interval", 300)
self.logger.info(f"Starting continuous RSS monitoring (interval: {check_interval}s)")
try:
while True:
self.run_once()
time.sleep(check_interval)
except KeyboardInterrupt:
self.logger.info("Shutting down...")
except Exception as e:
self.logger.error(f"Unexpected error: {e}")
finally:
self.cleanup()
def cleanup(self):
"""Cleanup resources"""
if self.mqtt_client:
self.mqtt_client.loop_stop()
self.mqtt_client.disconnect()
self.logger.info("Cleanup completed")
def main():
"""Main entry point"""
import argparse
parser = argparse.ArgumentParser(description='RSS to MQTT Push Notification Script')
parser.add_argument('--config', default='config.toml', help='Config file path')
parser.add_argument('--once', action='store_true', help='Run once and exit')
parser.add_argument('--debug', action='store_true', help='Enable debug logging')
args = parser.parse_args()
# Set debug level if requested
if args.debug:
logging.getLogger().setLevel(logging.DEBUG)
try:
pusher = RSSNotificationPusher(args.config)
if args.once:
pusher.run_once()
else:
pusher.run_continuously()
except Exception as e:
print(f"Error: {e}")
return 1
return 0
if __name__ == "__main__":
exit(main())

278
rss_notifier.log Normal file
View File

@@ -0,0 +1,278 @@
2025-08-12 22:59:08,751 - INFO - Starting continuous RSS monitoring (interval: 300s)
2025-08-12 22:59:08,751 - INFO - Starting RSS notification check
2025-08-12 22:59:08,752 - INFO - Connected to MQTT broker
2025-08-12 22:59:09,219 - INFO - Parsing feed: https://feeds.feedburner.com/TechCrunch
2025-08-12 22:59:09,609 - INFO - Found 20 new items in https://feeds.feedburner.com/TechCrunch
2025-08-12 22:59:09,609 - INFO - Notification sent: [Crunch Hype] Top 10 AI Tools That Will Transform Your Content Creation in 2025
2025-08-12 22:59:10,110 - INFO - Notification sent: [Crunch Hype] LimeWire AI Studio Review 2023: Details, Pricing & Features
2025-08-12 22:59:10,610 - INFO - Notification sent: [Crunch Hype] Top 10 AI Tools in 2023 That Will Make Your Life Easier
2025-08-12 22:59:11,110 - INFO - Notification sent: [Crunch Hype] Top 10 AI Content Generator & Writer Tools in 2022
2025-08-12 22:59:11,611 - INFO - Notification sent: [Crunch Hype] Beginner Guide to CJ Affiliate (Commission Junction) in 2022
2025-08-12 22:59:12,111 - INFO - Notification sent: [Crunch Hype] TOP 11 AI MARKETING TOOLS YOU SHOULD USE (Updated 2022)
2025-08-12 22:59:12,611 - INFO - Notification sent: [Crunch Hype] Most Frequently Asked Questions About Affiliate Marketing
2025-08-12 22:59:13,112 - INFO - Notification sent: [Crunch Hype] What is Blockchain: Everything You Need to Know (2022)
2025-08-12 22:59:13,612 - INFO - Notification sent: [Crunch Hype] ProWritingAid VS Grammarly: Which Grammar Checker is Better in (2022) ?
2025-08-12 22:59:14,112 - INFO - Notification sent: [Crunch Hype] Sellfy Review 2022: How Good Is This Ecommerce Platform?
2025-08-12 22:59:14,612 - INFO - Notification sent: [Crunch Hype] Ahrefs vs SEMrush: Which SEO Tool Should You Use?
2025-08-12 22:59:15,113 - INFO - Notification sent: [Crunch Hype] Top 10 Best PLR(Private Label Rights) Websites | Which One You Should Join in 2022?
2025-08-12 22:59:15,613 - INFO - Notification sent: [Crunch Hype] Canva Review 2022: Details, Pricing & Features
2025-08-12 22:59:16,113 - INFO - Notification sent: [Crunch Hype] Top 7 Best Wordpress Plugin Of All Time
2025-08-12 22:59:16,614 - INFO - Notification sent: [Crunch Hype] Ginger VS Grammarly: Which Grammar Checker is Better in (2022) ?
2025-08-12 22:59:17,114 - INFO - Notification sent: [Crunch Hype] Most Frequently Asked Questions About NFTs(Non-Fungible Tokens)
2025-08-12 22:59:17,614 - INFO - Notification sent: [Crunch Hype] 10 Best Chrome Extensions That Are Perfect for Everyone
2025-08-12 22:59:18,025 - INFO - Shutting down...
2025-08-12 22:59:18,616 - WARNING - Disconnected from MQTT broker
2025-08-12 22:59:18,616 - INFO - Cleanup completed
2025-08-12 23:00:32,764 - INFO - Starting continuous RSS monitoring (interval: 300s)
2025-08-12 23:00:32,765 - INFO - Starting RSS notification check
2025-08-12 23:00:32,765 - INFO - Connected to MQTT broker
2025-08-12 23:00:33,161 - INFO - Parsing feed: https://feeds.feedburner.com/TechCrunch
2025-08-12 23:00:33,531 - INFO - Found 20 new items in https://feeds.feedburner.com/TechCrunch
2025-08-12 23:00:33,531 - INFO - Notification sent: [Crunch Hype] Top 10 AI Tools That Will Transform Your Content Creation in 2025
2025-08-12 23:00:34,031 - INFO - Notification sent: [Crunch Hype] LimeWire AI Studio Review 2023: Details, Pricing & Features
2025-08-12 23:00:34,531 - INFO - Notification sent: [Crunch Hype] Top 10 AI Tools in 2023 That Will Make Your Life Easier
2025-08-12 23:00:35,032 - INFO - Notification sent: [Crunch Hype] Top 10 AI Content Generator & Writer Tools in 2022
2025-08-12 23:00:35,532 - INFO - Notification sent: [Crunch Hype] Beginner Guide to CJ Affiliate (Commission Junction) in 2022
2025-08-12 23:00:36,032 - INFO - Notification sent: [Crunch Hype] TOP 11 AI MARKETING TOOLS YOU SHOULD USE (Updated 2022)
2025-08-12 23:00:36,533 - INFO - Notification sent: [Crunch Hype] Most Frequently Asked Questions About Affiliate Marketing
2025-08-12 23:00:37,033 - INFO - Notification sent: [Crunch Hype] What is Blockchain: Everything You Need to Know (2022)
2025-08-12 23:00:37,533 - INFO - Notification sent: [Crunch Hype] ProWritingAid VS Grammarly: Which Grammar Checker is Better in (2022) ?
2025-08-12 23:00:38,034 - INFO - Notification sent: [Crunch Hype] Sellfy Review 2022: How Good Is This Ecommerce Platform?
2025-08-12 23:00:38,534 - INFO - Notification sent: [Crunch Hype] Ahrefs vs SEMrush: Which SEO Tool Should You Use?
2025-08-12 23:00:39,034 - INFO - Notification sent: [Crunch Hype] Top 10 Best PLR(Private Label Rights) Websites | Which One You Should Join in 2022?
2025-08-12 23:00:39,535 - INFO - Notification sent: [Crunch Hype] Canva Review 2022: Details, Pricing & Features
2025-08-12 23:00:40,035 - INFO - Notification sent: [Crunch Hype] Top 7 Best Wordpress Plugin Of All Time
2025-08-12 23:00:40,535 - INFO - Notification sent: [Crunch Hype] Ginger VS Grammarly: Which Grammar Checker is Better in (2022) ?
2025-08-12 23:00:41,036 - INFO - Notification sent: [Crunch Hype] Most Frequently Asked Questions About NFTs(Non-Fungible Tokens)
2025-08-12 23:00:41,536 - INFO - Notification sent: [Crunch Hype] 10 Best Chrome Extensions That Are Perfect for Everyone
2025-08-12 23:00:42,036 - INFO - Notification sent: [Crunch Hype] Most Frequently Asked Questions About Email Marketing
2025-08-12 23:00:42,537 - INFO - Notification sent: [Crunch Hype] 7 Free Websites Every Content Creator Needs to Know
2025-08-12 23:00:43,037 - INFO - Notification sent: [Crunch Hype] Top 9 Free AI Tools That Make Your Life Easier
2025-08-12 23:00:43,651 - INFO - Parsing feed: https://rss.cnn.com/rss/edition.rss
2025-08-12 23:00:43,701 - WARNING - Feed parsing issues for https://rss.cnn.com/rss/edition.rss: <urlopen error [SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1028)>
2025-08-12 23:00:43,701 - INFO - Found 0 new items in https://rss.cnn.com/rss/edition.rss
2025-08-12 23:00:43,701 - INFO - RSS notification check completed
2025-08-12 23:02:28,925 - INFO - Shutting down...
2025-08-12 23:02:29,142 - WARNING - Disconnected from MQTT broker
2025-08-12 23:02:29,142 - INFO - Cleanup completed
2025-08-12 23:02:56,060 - INFO - Starting continuous RSS monitoring (interval: 300s)
2025-08-12 23:02:56,060 - INFO - Starting RSS notification check
2025-08-12 23:02:56,060 - INFO - Connected to MQTT broker
2025-08-12 23:02:56,425 - INFO - Parsing feed: https://feeds.feedburner.com/TechCrunch
2025-08-12 23:02:56,780 - INFO - Found 20 new items in https://feeds.feedburner.com/TechCrunch
2025-08-12 23:02:56,781 - INFO - Notification sent: [Crunch Hype] Top 10 AI Tools That Will Transform ...
2025-08-12 23:02:57,283 - INFO - Notification sent: [Crunch Hype] LimeWire AI Studio Review 2023: Deta...
2025-08-12 23:02:57,785 - INFO - Notification sent: [Crunch Hype] Top 10 AI Tools in 2023 That Will Ma...
2025-08-12 23:02:58,289 - INFO - Notification sent: [Crunch Hype] Top 10 AI Content Generator & Writer...
2025-08-12 23:02:58,791 - INFO - Notification sent: [Crunch Hype] Beginner Guide to CJ Affiliate (Comm...
2025-08-12 23:02:59,292 - INFO - Notification sent: [Crunch Hype] TOP 11 AI MARKETING TOOLS YOU SHOULD...
2025-08-12 23:02:59,793 - INFO - Notification sent: [Crunch Hype] Most Frequently Asked Questions Abou...
2025-08-12 23:03:00,295 - INFO - Notification sent: [Crunch Hype] What is Blockchain: Everything You N...
2025-08-12 23:03:00,796 - INFO - Notification sent: [Crunch Hype] ProWritingAid VS Grammarly: Which Gr...
2025-08-12 23:03:01,298 - INFO - Notification sent: [Crunch Hype] Sellfy Review 2022: How Good Is This...
2025-08-12 23:03:01,800 - INFO - Notification sent: [Crunch Hype] Ahrefs vs SEMrush: Which SEO Tool Sh...
2025-08-12 23:03:02,302 - INFO - Notification sent: [Crunch Hype] Top 10 Best PLR(Private Label Rights...
2025-08-12 23:03:02,804 - INFO - Notification sent: [Crunch Hype] Canva Review 2022: Details, Pricing ...
2025-08-12 23:03:03,305 - INFO - Notification sent: [Crunch Hype] Top 7 Best Wordpress Plugin Of All T...
2025-08-12 23:03:03,807 - INFO - Notification sent: [Crunch Hype] Ginger VS Grammarly: Which Grammar C...
2025-08-12 23:03:04,308 - INFO - Notification sent: [Crunch Hype] Most Frequently Asked Questions Abou...
2025-08-12 23:03:04,809 - INFO - Notification sent: [Crunch Hype] 10 Best Chrome Extensions That Are P...
2025-08-12 23:03:05,310 - INFO - Notification sent: [Crunch Hype] Most Frequently Asked Questions Abou...
2025-08-12 23:03:05,812 - INFO - Notification sent: [Crunch Hype] 7 Free Websites Every Content Creato...
2025-08-12 23:03:06,314 - INFO - Notification sent: [Crunch Hype] Top 9 Free AI Tools That Make Your L...
2025-08-12 23:03:06,879 - INFO - Parsing feed: https://rss.cnn.com/rss/edition.rss
2025-08-12 23:03:06,928 - WARNING - Feed parsing issues for https://rss.cnn.com/rss/edition.rss: <urlopen error [SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1028)>
2025-08-12 23:03:06,928 - INFO - Found 0 new items in https://rss.cnn.com/rss/edition.rss
2025-08-12 23:03:06,928 - INFO - RSS notification check completed
2025-08-12 23:04:21,177 - INFO - Shutting down...
2025-08-12 23:04:21,387 - WARNING - Disconnected from MQTT broker
2025-08-12 23:04:21,387 - INFO - Cleanup completed
2025-08-12 23:14:06,934 - INFO - Starting continuous RSS monitoring (interval: 300s)
2025-08-12 23:14:06,934 - INFO - Starting RSS notification check
2025-08-12 23:14:06,935 - INFO - Connected to MQTT broker
2025-08-12 23:14:07,473 - INFO - Parsing feed: https://news.google.com/rss/search?q=Federal+Reserve+when:7d&hl=en-US&gl=US&ceid=US:en
2025-08-12 23:14:07,564 - INFO - Found 100 new items in https://news.google.com/rss/search?q=Federal+Reserve+when:7d&hl=en-US&gl=US&ceid=US:en
2025-08-12 23:14:07,565 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump ta...
2025-08-12 23:14:08,065 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump to...
2025-08-12 23:14:08,565 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Fed Offi...
2025-08-12 23:14:09,066 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] A top Fe...
2025-08-12 23:14:09,566 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump ma...
2025-08-12 23:14:10,066 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] The Fed ...
2025-08-12 23:14:10,567 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump cr...
2025-08-12 23:14:11,067 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump Ta...
2025-08-12 23:14:11,567 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump no...
2025-08-12 23:14:12,068 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trumps ...
2025-08-12 23:14:12,568 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump pi...
2025-08-12 23:14:13,068 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Meet Ste...
2025-08-12 23:14:13,569 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Donald T...
2025-08-12 23:14:14,069 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump Na...
2025-08-12 23:14:14,569 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump th...
2025-08-12 23:14:15,070 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] A Loyal...
2025-08-12 23:14:15,570 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump to...
2025-08-12 23:14:16,070 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump se...
2025-08-12 23:14:16,571 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Fed's Bo...
2025-08-12 23:14:17,071 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] J.P.Morg...
2025-08-12 23:14:17,571 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump fa...
2025-08-12 23:14:18,072 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump is...
2025-08-12 23:14:18,572 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump ma...
2025-08-12 23:14:19,073 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Who Does...
2025-08-12 23:14:19,573 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Why the ...
2025-08-12 23:14:20,073 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] US judge...
2025-08-12 23:14:20,574 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Judge va...
2025-08-12 23:14:21,074 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Inflatio...
2025-08-12 23:14:21,574 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Fed's Co...
2025-08-12 23:14:22,075 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Wilkinso...
2025-08-12 23:14:22,575 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] US Fed's...
2025-08-12 23:14:23,075 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump Wi...
2025-08-12 23:14:23,576 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Here Are...
2025-08-12 23:14:24,076 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump of...
2025-08-12 23:14:24,577 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Abolish ...
2025-08-12 23:14:25,077 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Bessent ...
2025-08-12 23:14:25,577 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump is...
2025-08-12 23:14:26,078 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] 3 things...
2025-08-12 23:14:26,578 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump Ap...
2025-08-12 23:14:27,078 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump an...
2025-08-12 23:14:27,579 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Opinion ...
2025-08-12 23:14:28,079 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump is...
2025-08-12 23:14:28,580 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Fed's po...
2025-08-12 23:14:29,080 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump th...
2025-08-12 23:14:29,580 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Fed will...
2025-08-12 23:14:30,081 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump ri...
2025-08-12 23:14:30,581 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Bets on ...
2025-08-12 23:14:31,081 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] The Fede...
2025-08-12 23:14:31,582 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Why Trum...
2025-08-12 23:14:32,082 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Fed gove...
2025-08-12 23:14:32,582 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump th...
2025-08-12 23:14:33,083 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump no...
2025-08-12 23:14:33,583 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Fed offi...
2025-08-12 23:14:34,084 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump wi...
2025-08-12 23:14:34,584 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Fed's Da...
2025-08-12 23:14:35,084 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Who is S...
2025-08-12 23:14:35,585 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] The Impo...
2025-08-12 23:14:36,085 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Is reval...
2025-08-12 23:14:36,586 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] A top Fe...
2025-08-12 23:14:36,655 - INFO - Shutting down...
2025-08-12 23:14:37,588 - WARNING - Disconnected from MQTT broker
2025-08-12 23:14:37,588 - INFO - Cleanup completed
2025-08-12 23:16:44,760 - INFO - Starting continuous RSS monitoring (interval: 300s)
2025-08-12 23:16:44,760 - INFO - Starting RSS notification check
2025-08-12 23:16:44,761 - INFO - Connected to MQTT broker
2025-08-12 23:16:45,384 - INFO - Parsing feed: https://news.google.com/rss/search?q=Federal+Reserve+when:7d&hl=en-US&gl=US&ceid=US:en
2025-08-12 23:16:45,497 - INFO - Found 5 new items in https://news.google.com/rss/search?q=Federal+Reserve+when:7d&hl=en-US&gl=US&ceid=US:en (checked top 5)
2025-08-12 23:16:45,497 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump ta...
2025-08-12 23:16:45,997 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump to...
2025-08-12 23:16:46,498 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Fed Offi...
2025-08-12 23:16:46,998 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] A top Fe...
2025-08-12 23:16:47,498 - INFO - Notification sent: ["Federal Reserve when:7d" - Google News] Trump ma...
2025-08-12 23:16:48,456 - INFO - Parsing feed: https://news.google.com/rss/search?q=business+news&hl=en-US&gl=US&ceid=US:en
2025-08-12 23:16:48,550 - INFO - Found 5 new items in https://news.google.com/rss/search?q=business+news&hl=en-US&gl=US&ceid=US:en (checked top 5)
2025-08-12 23:16:48,550 - INFO - Notification sent: ["business news" - Google News] Rare earths: Austr...
2025-08-12 23:16:49,050 - INFO - Notification sent: ["business news" - Google News] Trumps pick to le...
2025-08-12 23:16:49,551 - INFO - Notification sent: ["business news" - Google News] Spirit Airlines st...
2025-08-12 23:16:50,051 - INFO - Notification sent: ["business news" - Google News] Musk threatens 'im...
2025-08-12 23:16:50,551 - INFO - Notification sent: ["business news" - Google News] Cava stock plummet...
2025-08-12 23:16:51,326 - INFO - Parsing feed: https://www.federalreserve.gov/feeds/press_orders.xml
2025-08-12 23:16:51,436 - INFO - Found 5 new items in https://www.federalreserve.gov/feeds/press_orders.xml (checked top 5)
2025-08-12 23:16:51,436 - INFO - Notification sent: [FRB: Press Release - Banking Applications] Federa...
2025-08-12 23:16:51,936 - INFO - Notification sent: [FRB: Press Release - Banking Applications] Federa...
2025-08-12 23:16:52,436 - INFO - Notification sent: [FRB: Press Release - Banking Applications] Federa...
2025-08-12 23:16:52,936 - INFO - Notification sent: [FRB: Press Release - Banking Applications] Federa...
2025-08-12 23:16:53,437 - INFO - Notification sent: [FRB: Press Release - Banking Applications] Federa...
2025-08-12 23:16:54,086 - INFO - Parsing feed: https://www.federalreserve.gov/feeds/s_t_powell.xml
2025-08-12 23:16:54,209 - WARNING - Feed parsing issues for https://www.federalreserve.gov/feeds/s_t_powell.xml: document declared as us-ascii, but parsed as utf-8
2025-08-12 23:16:54,209 - INFO - Found 5 new items in https://www.federalreserve.gov/feeds/s_t_powell.xml (checked top 5)
2025-08-12 23:16:54,209 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:16:54,709 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:16:55,209 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:16:55,709 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:16:56,210 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:16:56,886 - INFO - Parsing feed: https://www.federalreserve.gov/feeds/g19.xml
2025-08-12 23:16:56,984 - WARNING - Feed parsing issues for https://www.federalreserve.gov/feeds/g19.xml: document declared as us-ascii, but parsed as utf-8
2025-08-12 23:16:56,984 - INFO - Found 5 new items in https://www.federalreserve.gov/feeds/g19.xml (checked top 5)
2025-08-12 23:16:56,984 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Data Downlo...
2025-08-12 23:16:57,485 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Upcoming ch...
2025-08-12 23:16:57,985 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Federal Res...
2025-08-12 23:16:58,485 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Data Downlo...
2025-08-12 23:16:58,986 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Upcoming ch...
2025-08-12 23:16:59,702 - INFO - Parsing feed: https://www.federalreserve.gov/feeds/prates.xml
2025-08-12 23:16:59,806 - WARNING - Feed parsing issues for https://www.federalreserve.gov/feeds/prates.xml: document declared as us-ascii, but parsed as utf-8
2025-08-12 23:16:59,806 - INFO - Found 5 new items in https://www.federalreserve.gov/feeds/prates.xml (checked top 5)
2025-08-12 23:16:59,806 - INFO - Notification sent: [The Fed: DDP: Policy Rates] Data Download Program...
2025-08-12 23:17:00,307 - INFO - Notification sent: [The Fed: DDP: Policy Rates] Federal Reserve Board...
2025-08-12 23:17:00,807 - INFO - Notification sent: [The Fed: DDP: Policy Rates] Data Download Program...
2025-08-12 23:17:01,307 - INFO - Notification sent: [The Fed: DDP: Policy Rates] Federal Reserve Board...
2025-08-12 23:17:01,807 - INFO - Notification sent: [The Fed: DDP: Policy Rates] Federal Reserve Board...
2025-08-12 23:17:02,639 - INFO - Parsing feed: https://www.bls.gov/feed/cpi.rss
2025-08-12 23:17:02,709 - WARNING - Feed parsing issues for https://www.bls.gov/feed/cpi.rss: <unknown>:19:27: not well-formed (invalid token)
2025-08-12 23:17:02,709 - INFO - Found 0 new items in https://www.bls.gov/feed/cpi.rss (checked top 5)
2025-08-12 23:17:02,772 - INFO - Parsing feed: https://www.bls.gov/feed/nlsoy.rss
2025-08-12 23:17:02,844 - WARNING - Feed parsing issues for https://www.bls.gov/feed/nlsoy.rss: <unknown>:19:27: not well-formed (invalid token)
2025-08-12 23:17:02,844 - INFO - Found 0 new items in https://www.bls.gov/feed/nlsoy.rss (checked top 5)
2025-08-12 23:17:02,844 - INFO - RSS notification check completed
2025-08-12 23:17:21,113 - INFO - Shutting down...
2025-08-12 23:17:21,828 - WARNING - Disconnected from MQTT broker
2025-08-12 23:17:21,828 - INFO - Cleanup completed
2025-08-12 23:19:59,901 - INFO - Starting continuous RSS monitoring (interval: 300s)
2025-08-12 23:19:59,901 - INFO - Starting RSS notification check
2025-08-12 23:19:59,901 - INFO - Connected to MQTT broker
2025-08-12 23:20:00,421 - INFO - Parsing feed: https://news.google.com/rss/search?q=business+news&hl=en-US&gl=US&ceid=US:en
2025-08-12 23:20:00,520 - INFO - Found 5 new items in https://news.google.com/rss/search?q=business+news&hl=en-US&gl=US&ceid=US:en (checked top 5)
2025-08-12 23:20:00,520 - INFO - Notification sent: ["business news" - Google News] Rare earths: Austr...
2025-08-12 23:20:01,020 - INFO - Notification sent: ["business news" - Google News] Trumps pick to le...
2025-08-12 23:20:01,521 - INFO - Notification sent: ["business news" - Google News] Spirit Airlines st...
2025-08-12 23:20:02,021 - INFO - Notification sent: ["business news" - Google News] Musk threatens 'im...
2025-08-12 23:20:02,521 - INFO - Notification sent: ["business news" - Google News] Cava stock plummet...
2025-08-12 23:20:03,191 - INFO - Parsing feed: https://www.federalreserve.gov/feeds/s_t_powell.xml
2025-08-12 23:20:03,320 - WARNING - Feed parsing issues for https://www.federalreserve.gov/feeds/s_t_powell.xml: document declared as us-ascii, but parsed as utf-8
2025-08-12 23:20:03,320 - INFO - Found 5 new items in https://www.federalreserve.gov/feeds/s_t_powell.xml (checked top 5)
2025-08-12 23:20:03,320 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:20:03,820 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:20:04,321 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:20:04,821 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:20:05,321 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:20:05,989 - INFO - Parsing feed: https://www.federalreserve.gov/feeds/g19.xml
2025-08-12 23:20:06,088 - WARNING - Feed parsing issues for https://www.federalreserve.gov/feeds/g19.xml: document declared as us-ascii, but parsed as utf-8
2025-08-12 23:20:06,088 - INFO - Found 5 new items in https://www.federalreserve.gov/feeds/g19.xml (checked top 5)
2025-08-12 23:20:06,088 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Data Downlo...
2025-08-12 23:20:06,588 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Upcoming ch...
2025-08-12 23:20:07,089 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Federal Res...
2025-08-12 23:20:07,589 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Data Downlo...
2025-08-12 23:20:08,089 - INFO - Notification sent: [The Fed: DDP: Consumer Credit (G.19)] Upcoming ch...
2025-08-12 23:20:08,688 - INFO - Parsing feed: https://www.bls.gov/feed/cpi.rss
2025-08-12 23:20:08,749 - WARNING - Feed parsing issues for https://www.bls.gov/feed/cpi.rss: <unknown>:19:27: not well-formed (invalid token)
2025-08-12 23:20:08,749 - INFO - Found 0 new items in https://www.bls.gov/feed/cpi.rss (checked top 5)
2025-08-12 23:20:08,813 - INFO - Parsing feed: https://www.bls.gov/feed/nlsoy.rss
2025-08-12 23:20:08,864 - WARNING - Feed parsing issues for https://www.bls.gov/feed/nlsoy.rss: <unknown>:19:27: not well-formed (invalid token)
2025-08-12 23:20:08,864 - INFO - Found 0 new items in https://www.bls.gov/feed/nlsoy.rss (checked top 5)
2025-08-12 23:20:08,864 - INFO - RSS notification check completed
2025-08-12 23:22:52,237 - INFO - Shutting down...
2025-08-12 23:22:52,246 - WARNING - Disconnected from MQTT broker
2025-08-12 23:22:52,246 - INFO - Cleanup completed
2025-08-12 23:23:10,184 - INFO - Starting continuous RSS monitoring (interval: 300s)
2025-08-12 23:23:10,184 - INFO - Starting RSS notification check
2025-08-12 23:23:10,184 - INFO - Connected to MQTT broker
2025-08-12 23:23:10,823 - INFO - Parsing feed: https://news.google.com/rss/search?q=business+news&hl=en-US&gl=US&ceid=US:en
2025-08-12 23:23:10,914 - INFO - Found 5 new items in https://news.google.com/rss/search?q=business+news&hl=en-US&gl=US&ceid=US:en (checked top 5)
2025-08-12 23:23:10,914 - INFO - Notification sent: ["business news" - Google News] Rare earths: Austr...
2025-08-12 23:23:11,415 - INFO - Notification sent: ["business news" - Google News] Trumps pick to le...
2025-08-12 23:23:11,915 - INFO - Notification sent: ["business news" - Google News] Spirit Airlines st...
2025-08-12 23:23:12,415 - INFO - Notification sent: ["business news" - Google News] Musk threatens 'im...
2025-08-12 23:23:12,916 - INFO - Notification sent: ["business news" - Google News] Cava stock plummet...
2025-08-12 23:23:13,646 - INFO - Parsing feed: https://www.federalreserve.gov/feeds/s_t_powell.xml
2025-08-12 23:23:13,742 - WARNING - Feed parsing issues for https://www.federalreserve.gov/feeds/s_t_powell.xml: document declared as us-ascii, but parsed as utf-8
2025-08-12 23:23:13,742 - INFO - Found 5 new items in https://www.federalreserve.gov/feeds/s_t_powell.xml (checked top 5)
2025-08-12 23:23:13,742 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:23:14,242 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:23:14,743 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:23:15,243 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:23:15,744 - INFO - Notification sent: [FRB: Chair Powell: Speeches and Testimony] Powell...
2025-08-12 23:23:16,551 - INFO - Parsing feed: https://www.bls.gov/feed/cpi.rss
2025-08-12 23:23:16,615 - WARNING - Feed parsing issues for https://www.bls.gov/feed/cpi.rss: <unknown>:19:27: not well-formed (invalid token)
2025-08-12 23:23:16,615 - INFO - Found 0 new items in https://www.bls.gov/feed/cpi.rss (checked top 5)
2025-08-12 23:23:16,673 - INFO - Parsing feed: https://www.bls.gov/feed/nlsoy.rss
2025-08-12 23:23:16,742 - WARNING - Feed parsing issues for https://www.bls.gov/feed/nlsoy.rss: <unknown>:19:27: not well-formed (invalid token)
2025-08-12 23:23:16,742 - INFO - Found 0 new items in https://www.bls.gov/feed/nlsoy.rss (checked top 5)
2025-08-12 23:23:16,742 - INFO - RSS notification check completed
2025-08-12 23:23:48,992 - INFO - Shutting down...
2025-08-12 23:23:49,779 - WARNING - Disconnected from MQTT broker
2025-08-12 23:23:49,779 - INFO - Cleanup completed