wewe-rss 完全指南:如何让微信公众号 RSS 订阅彻底告别重复文章
wewe-rss 完全指南如何让微信公众号 RSS 订阅彻底告别重复文章【免费下载链接】wewe-rss更优雅的微信公众号订阅方式支持私有化部署、微信公众号RSS生成基于微信读书项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss你再打开阅读器发现同一篇公众号文章被推送了三次同一条内容在列表里躺了好几天——wewe-rss 用条码 分拣线 暂存架三道防线把微信公众号 RSS 的重复内容自动拦掉订阅列表一次清爽。三步跑起来从零到第一个公众号订阅第一步拿到代码起服务git clone https://gitcode.com/GitHub_Trending/we/wewe-rss cd wewe-rss docker compose up -d就这三行。默认的 docker-compose.yml 会一起拉起 MySQL 8.3 数据库和应用容器服务监听 4000 端口。第二步改掉两个关键配置打开 docker-compose.yml至少改两处MYSQL_ROOT_PASSWORD以及DATABASE_URL里对应的密码默认值太裸奔AUTH_CODE管理后台的访问口令不设置的话后台直接裸露如果部署到公网记得把SERVER_ORIGIN_URL填成你的公网域名或 IP否则生成的 feed 地址会指向 localhost阅读器根本拉不到。第三步启动并验证浏览器打开http://localhost:4000输入 AUTH_CODE 进入后台。在账号管理里扫码登录一个读书账号它负责帮你读数据再切到公众号页点添加粘贴任意一篇公众号文章的分享链接确定。几秒后列表里出现首批文章点击该行右侧的 RSS 按钮复制链接贴进你的阅读器——订阅完成。图 1粘贴一篇公众号文章分享链接即可生成该账号的 RSS 订阅源它是怎么做到的拦重复文章的三道防线你可能会好奇重复到底是怎么来的答案很简单——定时任务反复抓取同一个公众号的最新文章列表如果每轮都原样入库同一篇就会在库里越积越多推送时反复出现。wewe-rss 的处理方式很像一家运转有序的快递分拣中心每个包裹文章都要过三道关卡。第一道关卡数据库里的唯一条码每个入站包裹都会被印上一个唯一条码。在这里文章表的id就是主键定义见apps/server/prisma/schema.prisma它取自公众号永久链接mp.weixin.qq.com/s/xxx里的 id而不是你复制的分享 URL——所以无论哪一轮抓取同一篇文章的条码永远一致。FUNCTION saveArticles(articles): IF 数据库 mysql: createMany(articles, skipDuplicates true) // 重复条码直接丢弃 ELSE: // sqlite FOR article IN articles: upsert(id) // 新包裹入库已有条码只刷新信息MySQL 分支遇到重复条码整批跳过SQLite 分支用 upsert 处理老包裹只更新、不产生第二条记录。 小贴士按 id 判断比按 URL 判断靠谱得多。分享链接带上不同参数时其实还是同一篇文章id 却始终不变。第二道关卡定时分拣线先扫条码再上架分拣线就是 Cron 定时任务。默认表达式35 5,17 * * *意思是每天北京时间 05:35 和 17:35 各巡一遍依次抓取每个启用状态公众号的最新文章并入库——入库时第一道关卡自动完成去重。历史文章的回填靠hasHistory标记驱动每页默认 20 篇抓完为止。CRON 35 5,17 * * *: FOR feed IN 启用的公众号: articles 抓取最新文章(feed) saveArticles(articles) // 条码层去重在此发生 IF feed.hasHistory 1: 继续翻页抓更早的文章上限 1000 轮 SLEEP(UPDATE_DELAY_TIME 秒) // 控制节奏别打爆每抓完一个公众号就歇 UPDATE_DELAY_TIME 秒默认 60再处理下一个这是防止读书账号被限流的限速带。 小贴士被限流的账号会被标记进当日的小黑屋当天不再参与调度所以 UPDATE_DELAY_TIME 千万别设得太激进。第三道关卡全文内容的暂存架开启全文模式后每篇文章正文都要实时去公众号页面拉取这是全流程里最贵的动作。wewe-rss 在入口放了一个暂存架LRU 缓存上限 5000 条同一篇文章的正文只要被抓过后续请求直接从架子上拿不再发起网络请求。CACHE LRU(max 5000) FUNCTION getFullText(articleId): IF CACHE.has(articleId): RETURN CACHE.get(articleId) // 直接取暂存架 html 请求文章页面(articleId) CACHE.put(articleId, html) RETURN html架子容量固定、先进先出高频阅读的热门文章始终在架上冷门账号的文章首次请求走一次网络之后全是命中。 小贴士暂存架缓存的是已抓到的正文它不替代数据库去重三道关卡各管一段缺一不可。站长附加规则关键词过滤如果你只想保留某个主题可以给 feed 地址加查询参数title_include周报|源码只留标题含周报或源码的条目title_exclude广告则把它们过滤掉多个关键词用|分隔。这是输出侧过滤而非去重但让列表更聚焦非常好用。按公众号类型挑组合公众号类型推荐组合原因技术深读内置 id 去重 title_include主题词标题风格稳定按词保留效果好新闻快讯内置 id 去重 加密 CRON 轮次时效强同一事件多版本按 id 区分营销偏多title_exclude屏蔽广告词在输出端挡掉噪音长文为主FEED_MODEfulltext 暂存架正文只抓一次重复阅读全命中缓存wewe-rss 关键参数速查哪些值得调变量默认值作用调优建议CRON_EXPRESSION35 5,17 * * *定时抓取时间点想更新勤一点就加轮次两轮间隔留 1 小时以上UPDATE_DELAY_TIME60秒相邻公众号之间的请求间隔账号少可保持默认曾被限流就调大MAX_REQUEST_PER_MINUTE60接口每分钟限流公网部署保持默认防后台被刷AUTH_CODE空后台访问口令必须设置别用易猜的值SERVER_ORIGIN_URL空对外访问地址外网部署必填公网域名/IPFEED_MODE空设为 fulltext 开启全文默认留空阅读器需要正文再开DATABASE_TYPEmysql数据库类型单机轻部署可切 sqliteENABLE_CLEAN_HTMLfalse清洗正文 HTML 噪音开启后全文排版更干净另有两个内置常量暂存架容量 5000、历史分页每页 20 篇apps/server/src/constants.ts一般不用动。效果实证一周少收到多少重复推送举个典型场景订阅了 8 个技术公众号。用 wewe-rss 之前你靠第三方聚合源它每次同步都会把同一批旧文再推一遍——每周 120 条推送里约 40 条是重复抓取造成的占比 33%。换成自托管 wewe-rss 一周后指标去重前去重后每周推送条数12080其中重复推送约 40 条33%0 条日均有效新文约 17 条约 11 条完全重复同文章 id被数据库主键 100% 拦截40 条重复一条没漏进列表有效阅读量下降三分之一省下的时间不用再手动跳过重复条目。图 2去重后的公众号文章列表按发布时间排列没有重复条目部署 wewe-rss 前最容易踩的四个坑拿分享 URL 当唯一标识去重同一篇文章每次分享的链接都不同照此判断必然漏判。纠正以永久链接mp.weixin.qq.com/s/xxx里的 id 为准这正是数据库主键的做法。定时轮次设太密一小时一次甚至十分钟一次读书账号请求频率超限直接进当日小黑屋当天再也没法用。纠正轮次间隔至少 1 小时UPDATE_DELAY_TIME 保持 60 以上。默认就开全文模式fulltext 会让每篇文章都实时拉正文请求量翻倍而你可能根本不读全文。纠正FEED_MODE 默认留空只对确定要读全文的长文号开启。把关键词过滤当去重title_exclude 是输出端过滤随手塞几个宽泛词半壁文章直接消失。纠正先加一两个明显广告词观察几天再逐步追加。图 3账号管理页可看到各读书账号状态被限流的当天自动停用让你的订阅列表不再重复条码、分拣线、暂存架三道关卡配合把微信公众号变成一份干净分好类的 RSS 源新文按时到旧文不再重发。现在就可以拉代码、改密码、跑docker compose up -d十分钟后订阅你的第一个公众号。【免费下载链接】wewe-rss更优雅的微信公众号订阅方式支持私有化部署、微信公众号RSS生成基于微信读书项目地址: https://gitcode.com/GitHub_Trending/we/wewe-rss创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →