#434 App: RSS Digest Emailer (rss_digest)
Description
Edit## Overview
Aggregate multiple RSS feeds, filter by keywords/date, and send daily/weekly email digests.
## App Metadata
- **App Name:** rss_digest
- **Publisher:** platform
- **Version:** 1.0.0
- **Priority:** Medium
- **Complexity:** Low
- **Phase:** 2 (Core business value)
## Actions
### 1. fetch_feeds
**Description:** Parse and fetch items from multiple RSS/Atom feeds
**Parameters:**
- feed_urls (list, required): List of RSS feed URLs
- max_items_per_feed (int, default=20): Maximum items to fetch per feed
- since_hours (int, optional): Only items from last N hours
- timeout_seconds (int, default=30): Request timeout per feed
**Returns:**
{
"feeds_processed": 5,
"total_items": 85,
"items": [
{
"title": "...",
"link": "...",
"published": "2025-01-01T00:00:00Z",
"summary": "...",
"feed_title": "Source Name",
"feed_url": "..."
}
],
"errors": [{"feed_url": "...", "error": "..."}]
}
### 2. filter_items
**Description:** Filter feed items by keywords, date, or custom rules
**Parameters:**
- items (list, required): Items from fetch_feeds
- keywords (list, optional): Include items matching any keyword
- exclude_keywords (list, optional): Exclude items matching these
- min_date (str, optional): Only items after this date
- max_items (int, default=50): Maximum items to return
- deduplicate (bool, default=True): Remove duplicate URLs
**Returns:**
{
"filtered_count": 25,
"original_count": 85,
"items": [...],
"keywords_matched": {"python": 10, "ai": 8}
}
### 3. generate_digest
**Description:** Format filtered items into HTML digest email
**Parameters:**
- items (list, required): Filtered items
- digest_title (str, default='Your Daily Digest'): Email title
- group_by (str, default='feed'): Grouping (feed|date|none)
- include_summaries (bool, default=True): Include item summaries
- max_summary_length (int, default=200): Truncate summaries
- template (str, default='default'): Digest template name
**Returns:**
{
"html": "...",
"text": "...",
"item_count": 25,
"sections": [{"title": "TechCrunch", "count": 5}, ...]
}
### 4. send_digest
**Description:** Email the generated digest
**Parameters:**
- digest_html (str, required): HTML content from generate_digest
- digest_text (str, required): Plain text fallback
- recipient_email (str, required): Recipient
- subject (str, default='Your Daily Digest - {{date}}'): Email subject
- from_name (str, default='Highway Digest'): Sender name
**Returns:** {"sent": true, "recipient": "...", "item_count": 25}
## Example Workflow - Daily Tech News Digest
builder = WorkflowBuilder(name='daily_tech_digest', version='1.0.0')
builder.task(
task_id='fetch',
function='apps.platform.rss_digest.fetch_feeds',
kwargs={
'feed_urls': [
'https://news.ycombinator.com/rss',
'https://feeds.arstechnica.com/arstechnica/technology-lab',
'https://www.theverge.com/rss/index.xml'
],
'since_hours': 24
},
result_key='raw_items'
)
builder.task(
task_id='filter',
function='apps.platform.rss_digest.filter_items',
kwargs={
'items': '{{raw_items.items}}',
'keywords': ['python', 'ai', 'startup'],
'max_items': 30
},
result_key='filtered'
)
builder.task(
task_id='format',
function='apps.platform.rss_digest.generate_digest',
kwargs={
'items': '{{filtered.items}}',
'digest_title': 'Tech News Digest',
'group_by': 'feed'
},
result_key='digest'
)
builder.task(
task_id='send',
function='apps.platform.rss_digest.send_digest',
kwargs={
'digest_html': '{{digest.html}}',
'digest_text': '{{digest.text}}',
'recipient_email': 'user@example.com'
}
)
## Supported Feed Formats
- RSS 2.0
- RSS 1.0
- Atom
## Implementation Notes
- Use feedparser library (robust RSS/Atom parsing)
- Handle various date formats gracefully
- Cache feed responses to avoid re-fetching
- Implement parallel fetching for multiple feeds
- Create responsive HTML email template
- Support OPML import for feed lists (future)
## HTML Digest Template Features
- Responsive design for mobile
- Dark mode support via media queries
- Grouped sections with collapsible headers
- Read more links
- Unsubscribe link placeholder
## Configuration Schema
{
"default_feeds": [],
"fetch_timeout": 30,
"max_items_per_digest": 100,
"cache_ttl_minutes": 60,
"default_template": "default"
}
## Secrets Config
None required
## Dependencies
- feedparser for RSS/Atom parsing
- httpx for feed fetching
- Jinja2 for email templates
- Email sending (SMTP)
- dateutil for date parsing
Comments
Loading comments...
Context
Loading context...
Audit History
View AllLoading audit history...