拓冰建站拓冰建站
首页 / 资讯中心 / 正文

如何把 changedetection.io 的监控结果发布为带 token 的 RSS 变更订阅源

如何把 changedetection.io 的监控结果发布为带 token 的 RSS 变更订阅源【免费下载链接】changedetection.ioBest and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock alerts, and website defacement monitoring—all for free or enjoy our SaaS plan!项目地址: https://gitcode.com/GitHub_Trending/ch/changedetection.iochangedetection.io 在检测到被监控页面发生变化后除了发送邮件、Slack、Webhook 等通知还内置了一个 RSS 输出端点把每次变更的 diff 按标准 RSS 2.0 格式发布出去并且所有端点都要求请求中携带一个访问 tokentoken 不匹配时直接返回 403。完成本文操作后你得到的是一条形如http://127.0.0.1:5000/rss?token你的token的订阅地址可以直接导入任意支持 RSS 的阅读器。前提是已经有一个可访问的 changedetection.io 实例并且至少添加了一个 watch。以下以官方 README 给出的 pip 安装方式为例端口为 5000。先了解 token 机制自动生成、请求时校验RSS 访问 token 不需要你手动创建。全新安装初始化 datastore 时系统会自动生成一个secrets.token_hex(16)的 token 写入设置老版本 datastore 升级后若发现缺少 token也会在启动时补生成一个见 store/init.py 中init_fresh_install与启动检查逻辑。校验发生在每次请求时validate_rss_token 从请求的查询参数中取token与 datastore 中保存的rss_access_token做严格比对不一致就返回 HTTP 403响应体为Access denied, bad token。也就是说只要把 token 拼进 URL这条地址本身就可以当订阅链接用token 泄露时把它改掉或直接删除 datastore 中该字段让其重新生成即可让旧地址失效。启动实例并添加 watch如果还没有运行中的实例README 给出的安装方式是$ pip3 install changedetection.io $ changedetection.io -d /path/to/empty/data/dir -p 5000其中-d需要一个空数据目录把/path/to/empty/data/dir替换成你实际准备存放数据的目录路径。启动后访问http://127.0.0.1:5000进入界面添加你要监控的 URL。也可以用 Docker 运行docker compose up -d或单容器方式docker run -d --restart always -p 127.0.0.1:5000:5000 -v datastore-volume:/datastore --name changedetection.io dgtlmoon/changedetection.io。注意一个 watch 首次检查只产生 1 个历史快照此时它不会出现在 RSS 源里后文会说明原因需要等系统检测到第一次变化后才有条目。获取带 token 的订阅 URLRSS 蓝图注册在/rss前缀下见 flask_app.py共有三类端点。token 是查询参数UI 里所有 RSS 图标链接都已经拼好了 token可以直接复制使用1. 总订阅源所有 watch 的变更GET /rss?token你的token/rss/带尾部斜杠会 302 重定向到同一端点。获取 token 最直接的途径是界面上的 RSS 图标链接watchlist 列表页工具栏有一个 RSS 图标指向rss.feedhref 中已包含当前激活 tag 和 token见 watch-overview.html每个 watch 的编辑页也有一个该 watch 专属 RSS 源图标见 edit.html标签分组总览页里每个 tag 一行也有对应的 RSS 图标见 groups-overview.html。把鼠标悬停在图标上或右键复制链接地址即可拿到完整 URL界面同时会在 HTMLhead中输出link relalternate typeapplication/rssxml见 base.html部分阅读器可以自动发现。总订阅源还支持按 tag 过滤GET /rss?token你的tokentagtag标题或uuid。传 tag 标题时服务端会自动换算成内部 uuid见 main_feed.py。2. 单个 watch 的订阅源GET /rss/watch/uuid?token你的token为该 watch 输出多组相邻快照之间的 diff 条目最多输出条数由设置项rss_diff_length控制默认 5。uuid 也可以用字面值first代替表示取 datastore 中第一个 watch见 single_watch.py。该 watch 找不到时返回 404历史快照不足 2 个时返回 400 并提示does not have enough history snapshots to show changes (need at least 2)。3. 按 tag 的订阅源GET /rss/tag/tag_uuid?token你的token输出该 tag 下符合条件的所有 watch 的未读变更见 tag.py。tag uuid 不存在时返回 404。配置订阅源的内容格式进入 设置 → RSS 页签settings.html可调的字段有RSS Content formatrss_content_formatRSS 阅读器对 HTML 的支持情况不同在这里选择正文格式默认是text。可选项来自通知格式列表其中markdown已被明确剔除见 blueprint/rss/init.py。RSSdescriptionbody built fromrss_template_typesystem_default对所有条目用系统默认模板或notification_body复用你在通知里配置的 Jinja2 通知正文作为模板。RSS System default template overriderss_template_override直接覆盖默认模板支持 Jinja2占位符说明就展示在该输入框下方show_token_placeholders(..., suffix-rss)。不填时使用内置默认值见 blueprint/rss/init.py!-- text 格式默认模板 -- pre{{watch_label}} had a change. {{diff}} /pre!-- html 格式默认模板 -- htmlbody h4a href{{watch_open_url}}{{watch_label}}/a/h4 p{{diff}}/p /body/htmlNumber of changes to show in watch RSS feedrss_diff_length单个 watch 订阅源中最多包含多少条历史 diff默认 5。Hide muted watches from RSS feedrss_hide_muted_watches默认开启被静音notification muted的 watch 不出现在总订阅源和 tag 订阅源中。模板选择逻辑在 get_rss_template先按rss_template_type取系统默认或通知正文模板再优先使用 override。验证订阅源用浏览器或 curl 请求总订阅源把你的token替换成上一步复制到的真实 tokencurl -i http://127.0.0.1:5000/rss?token你的token可以核对的判断点均来自实现与测试代码状态码与响应头成功时返回 200响应头Content-Type: application/rssxml;charsetutf-8见 main_feed.py。正文是 RSS XML响应体以rss ... version2.0开头测试 test_rss.py 与 test_backend.py 都断言了brss in res.data。token 错误时返回 403正文为Access denied, bad token测试中用tokenbad token验证见 test_rss.py。条目细节每个条目的 GUID 为{watch的uuid}/{变更时间戳}见 generate_watch_guid保证同一 watch 的不同次变更是不同条目pubDate用该次变更的时间戳按 UTC 生成条目链接指向该 watch 的 diff 历史页面watch 所属的 tag 标题会作为category输出。条目出现条件与限制读 RSS 输出前先了解哪些 watch 会、哪些不会出现在总订阅源中这决定了为什么我的源是空的必须有至少 2 个历史快照代码里len(dates) 2的 watch 直接跳过注释写明means we never had a change detected见 main_feed.py。即至少要完成首次快照 一次变更检测源里才会有条目。只包含未读unviewed的 watch总订阅源和 tag 订阅源都检查watch.viewed在界面上标记为已读后对应条目就不会再出现。静音过滤rss_hide_muted_watches开启时被静音的 watch 被排除。正文清洗条目内容中的非法控制字符如\x00-\x08等会被检测并清除scan_invalid_chars_in_rss保证 XML 可被阅读器解析。单 watch 订阅源不受未读限制它按rss_diff_length输出最近 N 组相邻快照 diff最新一条排最前但同样要求该 watch 有至少 2 个快照否则返回 400 的提示文本。下一步源地址确认后把它填入阅读器即可。需要按项目分组订阅时优先使用 tag 维度的两个入口列表页?tag过滤或/rss/tag/tag_uuid配合界面上的分组功能维护 tag 归属需要控制某类 watch 是否出现在源里时用静音muted开关而不是删除 watch前提是保持rss_hide_muted_watches默认开启。【免费下载链接】changedetection.ioBest and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock alerts, and website defacement monitoring—all for free or enjoy our SaaS plan!项目地址: https://gitcode.com/GitHub_Trending/ch/changedetection.io创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门