【实用工具】使用Python语言制作RSS阅读器,代码如下:
import xml.etree.ElementTree as ET
import urllib.request
from html import unescape
import sysdef fetch_rss(url):"""从指定 URL 获取 RSS 内容(XML 字符串)"""try:with urllib.request.urlopen(url, timeout=10) as response:return response.read()except Exception as e:print(f"❌ 无法获取 RSS 源: {e}")sys.exit(1)def parse_rss(xml_data):"""解析 RSS XML 数据,返回文章列表"""try:root = ET.fromstring(xml_data)except ET.ParseError as e:print(f"❌ XML 解析失败: {e}")sys.exit(1)channel = root.find('channel')if channel is None:print("❌ 未找到 <channel> 节点")sys.exit(1)title = channel.find('title')blog_title = unescape(title.text.strip()) if title is not None and title.text else "未知博客"items = []for item in channel.findall('item'):title_elem = item.find('title')link_elem = item.find('link')pub_date = item.find('pubDate')description = item.find('description')title_text = unescape(title_elem.text.strip()) if title_elem is not None and title_elem.text else "无标题"link_text = (link_elem.text.strip() if link_elem is not None and link_elem.text else "") or "无链接"pub_date_text = pub_date.text.strip() if pub_date is not None and pub_date.text else "未知时间"desc_text = unescape(description.text.strip()) if description is not None and description.text else ""desc_text = ' '.join(desc_text.split())[:100] + ('...' if len(desc_text) > 100 else '')items.append({'title': title_text,'link': link_text,'pubDate': pub_date_text,'description': desc_text})return blog_title, itemsdef display_articles(blog_title, articles):"""在终端中格式化输出文章列表"""print(f"\n📰 博客名称: {blog_title}")print("=" * 80)for i, art in enumerate(articles, 1):print(f"\n[{i}] {art['title']}")print(f"🕒 发布时间: {art['pubDate']}")print(f"🔗 链接: {art['link']}")if art['description']:print(f"📝 摘要: {art['description']}")print("\n" + "=" * 80)print(f"共 {len(articles)} 篇文章")def main():rss_url = "RSS_Address"print("🔍 正在获取 RSS 数据...")xml_data = fetch_rss(rss_url)print("✅ RSS 数据获取成功!")blog_title, articles = parse_rss(xml_data)display_articles(blog_title, articles)if __name__ == "__main__":main()