Add RSS feed support to BalanceBoard

- Implement RSS/Atom feed parser using feedparser library
- Add RSS platform configuration with sample feeds (HN RSS, Lobsters RSS, Reddit RSS)
- Support both RSS 2.0 and Atom formats with automatic detection
- Extract and normalize: title, author, link, content, tags, timestamps
- HTML entity unescaping and tag stripping for clean content
- Fallback handling for missing fields
- Users can add any RSS feed URL as a collection source

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-11 17:20:52 -05:00
parent e821a26b48
commit 47cca9d45e
3 changed files with 384 additions and 0 deletions

262
platform_config.json Normal file
View File

@@ -0,0 +1,262 @@
{
"platforms": {
"reddit": {
"name": "Reddit",
"icon": "🔺",
"color": "#ff4500",
"prefix": "r/",
"supports_communities": true,
"communities": [
{
"id": "programming",
"name": "Programming",
"display_name": "r/programming",
"icon": "💻",
"description": "General programming discussions"
},
{
"id": "python",
"name": "Python",
"display_name": "r/python",
"icon": "🐍",
"description": "Python programming language"
},
{
"id": "javascript",
"name": "JavaScript",
"display_name": "r/javascript",
"icon": "🟨",
"description": "JavaScript programming"
},
{
"id": "webdev",
"name": "Web Development",
"display_name": "r/webdev",
"icon": "🌐",
"description": "Web development discussions"
},
{
"id": "technology",
"name": "Technology",
"display_name": "r/technology",
"icon": "⚡",
"description": "Technology news and discussions"
}
]
},
"hackernews": {
"name": "Hacker News",
"icon": "🧮",
"color": "#ff6600",
"prefix": "",
"supports_communities": false,
"communities": [
{
"id": "front_page",
"name": "Front Page",
"display_name": "Hacker News",
"icon": "🧮",
"description": "Top stories from Hacker News"
},
{
"id": "new",
"name": "New Stories",
"display_name": "HN New",
"icon": "🆕",
"description": "Latest submissions"
},
{
"id": "ask",
"name": "Ask HN",
"display_name": "Ask HN",
"icon": "❓",
"description": "Questions for the community"
},
{
"id": "show",
"name": "Show HN",
"display_name": "Show HN",
"icon": "🎯",
"description": "User projects and demos"
}
]
},
"lobsters": {
"name": "Lobsters",
"icon": "🦞",
"color": "#800020",
"prefix": "",
"supports_communities": false,
"communities": [
{
"id": "all",
"name": "All Stories",
"display_name": "Lobsters",
"icon": "🦞",
"description": "All lobsters stories"
}
]
},
"github": {
"name": "GitHub",
"icon": "🐙",
"color": "#24292e",
"prefix": "",
"supports_communities": false,
"communities": [
{
"id": "trending",
"name": "Trending",
"display_name": "GitHub Trending",
"icon": "📈",
"description": "Trending repositories"
},
{
"id": "releases",
"name": "Releases",
"display_name": "New Releases",
"icon": "🎉",
"description": "Latest software releases"
}
]
},
"devto": {
"name": "Dev.to",
"icon": "📝",
"color": "#0a0a0a",
"prefix": "",
"supports_communities": false,
"communities": [
{
"id": "top",
"name": "Top Posts",
"display_name": "Dev.to Top",
"icon": "⭐",
"description": "Most popular dev posts"
},
{
"id": "latest",
"name": "Latest",
"display_name": "Dev.to Latest",
"icon": "🆕",
"description": "Recently published articles"
}
]
},
"stackoverflow": {
"name": "Stack Overflow",
"icon": "📚",
"color": "#f48024",
"prefix": "",
"supports_communities": false,
"communities": [
{
"id": "featured",
"name": "Featured",
"display_name": "SO Featured",
"icon": "⭐",
"description": "Featured questions"
},
{
"id": "newest",
"name": "Newest",
"display_name": "SO Newest",
"icon": "🆕",
"description": "Recent questions"
}
]
},
"rss": {
"name": "RSS Feeds",
"icon": "📡",
"color": "#ee802f",
"prefix": "",
"supports_communities": true,
"communities": [
{
"id": "https://hnrss.org/frontpage",
"name": "HN RSS",
"display_name": "HN RSS Feed",
"icon": "🧮",
"description": "Hacker News front page via RSS"
},
{
"id": "https://lobste.rs/rss",
"name": "Lobsters RSS",
"display_name": "Lobsters RSS Feed",
"icon": "🦞",
"description": "Lobsters community via RSS"
},
{
"id": "https://www.reddit.com/r/programming/.rss",
"name": "r/programming RSS",
"display_name": "r/programming RSS",
"icon": "💻",
"description": "Reddit programming subreddit via RSS"
}
]
}
},
"collection_targets": [
{
"platform": "reddit",
"community": "programming",
"max_posts": 75,
"priority": "high"
},
{
"platform": "reddit",
"community": "python",
"max_posts": 75,
"priority": "high"
},
{
"platform": "reddit",
"community": "javascript",
"max_posts": 50,
"priority": "medium"
},
{
"platform": "reddit",
"community": "webdev",
"max_posts": 50,
"priority": "medium"
},
{
"platform": "reddit",
"community": "technology",
"max_posts": 50,
"priority": "medium"
},
{
"platform": "hackernews",
"community": "front_page",
"max_posts": 100,
"priority": "high"
},
{
"platform": "hackernews",
"community": "ask",
"max_posts": 25,
"priority": "medium"
},
{
"platform": "hackernews",
"community": "show",
"max_posts": 25,
"priority": "medium"
},
{
"platform": "lobsters",
"community": "all",
"max_posts": 30,
"priority": "medium"
},
{
"platform": "rss",
"community": "https://hnrss.org/frontpage",
"max_posts": 50,
"priority": "low"
}
]
}