Skip to content

Conversation

@yblpoi
Copy link

@yblpoi yblpoi commented Dec 6, 2025

RSS部分

配置文件中的RSS设置

RSS源配置在config/config.yaml文件中,格式如下:

rss:
  feeds:
    # 示例RSS源配置
    # - url: "https://example.com/tech/rss.xml"
    #   name: "示例科技博客"
    # - url: "https://example.com/news/rss.xml"
    #   name: "示例新闻网站"

配置项说明:

  • url: RSS订阅源的URL地址(必填)
  • name: RSS订阅源的名称(可选,默认使用URL)

main.py中的RSS相关代码

main.py中关于RSS的代码主要分为两部分:

配置加载(第258-259行)

# RSS配置
"RSS": config_data.get("rss", {}),

这部分代码从配置文件中读取RSS配置信息,并将其存入CONFIG字典中。

RSS数据爬取与整合(第5278-5296行)

# 爬取RSS订阅源数据
from rss_module.rss_feed import fetch_all_rss_feeds, load_rss_config

# 加载RSS配置
rss_feeds_config = load_rss_config(CONFIG)
if rss_feeds_config:
    print(f"配置的RSS订阅源: {[feed.get('name', feed.get('url', 'Unknown')) for feed in rss_feeds_config]}")

# 获取RSS数据
rss_results, rss_id_to_name, rss_failed_ids = fetch_all_rss_feeds(rss_feeds_config, proxy_url)

# 合并RSS数据到原有结果中
results.update(rss_results)
id_to_name.update(rss_id_to_name)
failed_ids.extend(rss_failed_ids)

这部分代码的执行流程:

  • 导入RSS模块的核心函数
  • 加载RSS配置信息
  • 打印已配置的RSS订阅源列表
  • 爬取所有RSS订阅源的数据
  • 将RSS数据与其他平台的数据合并
  • 记录爬取失败的RSS源

RSS模块的实现细节

RSS功能的核心实现位于rss_module/rss_feed.py文件中,主要包含以下组件:

RSSFeed类

该类负责单个RSS源的处理,主要方法包括:

  • fetch_feed(): 获取并解析RSS订阅源
  • parse_feed(): 将RSS内容转换为项目所需的数据格式
  • clean_title(): 清理标题中的特殊字符
  • get_feed_data(): 获取并解析RSS订阅源,支持失败重试

核心函数

  • load_rss_config(): 加载RSS配置,支持多种配置方式
  • fetch_all_rss_feeds(): 批量获取所有RSS订阅源的数据

RSS数据处理流程

  • 配置加载:从config.yaml中读取RSS配置
  • 单源处理:对每个RSS源,执行以下操作:
  • 获取RSS内容(支持代理)
  • 解析RSS条目
  • 清理标题
  • 提取链接和排名信息
  • 数据整合:将所有RSS源的数据合并到主结果集中
  • 错误处理:记录爬取失败的RSS源,并在失败时进行重试

运行效果

正在加载配置...
配置文件加载成功: config/config.yaml
未配置任何通知渠道
TrendRadar v3.5.0 配置加载完成
监控平台数量: 13
本地环境,未启用代理
当前北京时间: 2025-12-06 20:21:21
未配置任何通知渠道,将只进行数据抓取,不发送通知
报告模式: daily
运行模式: 当日汇总模式(所有匹配新闻 + 新增新闻区域 + 按时推送)
配置的监控平台: ['华尔街见闻 最热', '华尔街见闻 快讯', '华尔街见闻 最新', '财联社热门', '格隆汇', '雪球', '金十数据', '快讯通', '参考消息', '卫星通讯社', '联合早报', 'MKT新闻', '靠谱新闻']
开始爬取数据,请求间隔 1000 毫秒
获取 wallstreetcn-hot 成功(最新数据)
获取 wallstreetcn-quick 成功(缓存数据)
请求 wallstreetcn-news 失败: HTTPSConnectionPool(host='newsnow.busiyi.world', port=443): Read timed out. (read timeout=10). 4.20秒后重试...
获取 wallstreetcn-news 成功(最新数据)
获取 cls-hot 成功(缓存数据)
获取 gelonghui 成功(缓存数据)
获取 xueqiu 成功(缓存数据)
获取 jin10 成功(缓存数据)
获取 fastbull 成功(缓存数据)
获取 cankaoxiaoxi 成功(最新数据)
获取 sputniknewscn 成功(缓存数据)
获取 zaobao 成功(最新数据)
获取 mktnews 成功(最新数据)
获取 kaopu 成功(最新数据)
成功: ['wallstreetcn-hot', 'wallstreetcn-quick', 'wallstreetcn-news', 'cls-hot', 'gelonghui', 'xueqiu', 'jin10', 'fastbull', 'cankaoxiaoxi', 'sputniknewscn', 'zaobao', 'mktnews', 'kaopu'], 失败: []
配置的RSS订阅源: ['Odaily 快讯', 'Odaily 文章', 'Cointelegraph 监管', 'Cointelegraph 所有RSS']
获取 Odaily 快讯 成功
获取 Odaily 文章 成功
获取 Cointelegraph 监管 成功
获取 Cointelegraph 所有RSS 成功
标题已保存到: output\2025年12月06日\txt\20时22分.txt
当日汇总模式:处理 342 条新闻,模式:频率词过滤
HTML报告已生成: output\2025年12月06日\html\20时22分.html
生成当日汇总报告...
当前监控平台: ['wallstreetcn-hot', 'wallstreetcn-quick', 'wallstreetcn-news', 'cls-hot', 'gelonghui', 'xueqiu', 'jin10', 'fastbull', 'cankaoxiaoxi', 'sputniknewscn', 'zaobao', 'mktnews', 'kaopu']
读取到 369 个标题(已按当前监控平台过滤)
当日汇总模式:处理 369 条新闻,模式:频率词过滤
当日汇总报告已生成: output\2025年12月06日\html\当日汇总.html
⚠️ 警告:通知功能已启用但未配置任何通知渠道,将跳过通知发送

.gitignore部分

因为可能有人根据自己的喜好修改了各种config,无意中git push到了自己的仓库,导致密钥泄露。所以建议使用这个文件限制。

- 新增RSS模块,支持从配置的RSS源获取新闻数据
- 更新config.yaml配置,添加财经类平台和RSS源配置
- 添加requirements.txt依赖feedparser
- 更新main.py集成RSS爬取功能
添加UV包管理器相关文件和本地配置文件frequency_words.txt到忽略列表
添加index.html到忽略列表,防止该文件被意外提交
在获取RSS订阅时添加1秒间隔防止请求过快,并增加成功/失败的日志输出
在获取RSS订阅源失败后等待5秒重试一次,提高数据获取的可靠性
- 将rss_module目录添加到Docker镜像中
- 默认启用Web服务器以便访问生成的报告
- 修改docker-compose.yml使用本地构建而非远程镜像
- 更新标题过滤逻辑以支持RSS源(以http开头的ID)
@yblpoi yblpoi closed this Dec 6, 2025
@yblpoi
Copy link
Author

yblpoi commented Dec 6, 2025

尝试修复了rss订阅源无法在整理结果中显示的问题,能力有限,应该算是解决了。
尝试了docker部署。

@yblpoi yblpoi reopened this Dec 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant