ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

用Huginn搭建个人情报监控自动化:从抓取到通知的完整落地实战

用Huginn搭建个人情报监控自动化:从抓取到通知的完整落地实战 用Huginn搭建个人情报监控自动化从抓取到通知的完整落地实战【免费下载链接】huginnCreate agents that monitor and act on your behalf. Your agents are standing by!项目地址: https://gitcode.com/gh_mirrors/hu/huginn每天醒来第一件事你是不是先刷十几个网站新闻、竞品、技术社区、二手市场……怕错过某条消息又不想被海量信息淹没如果有个程序能替你 24 小时盯梢只在真正值得注意的东西出现时喊你一声你会省下多少时间Huginn 就是干这个的。它是一个开源自动化平台用一套叫Agent代理的可编程组件帮你监控网页、接收推送、处理数据再按你设定的规则自动执行动作。打个比方别人用 IFTTT 是租一间保安室Huginn 是给你一整队可以随意调教的数字哨兵驻扎在你自己的服务器上数据全归你。本文就带你从零跑通一个新品情报监控自动化工作流边做边把部署、配置、排错全学会。为什么你需要一队数字哨兵自己跑一套自动化系统收益是实打实的数据主权所有抓取到的信息都存在你自己的服务器不经过任何第三方中转隐私不裸奔。无限可扩展内置 50 种 Agent还能写自定义 JavaScript 逻辑Webhook、RSS、IMAP、Twitter、邮件、MQTT 等协议开箱即用。复杂流程随意编排Agent 之间通过事件Event形成有向图一个监控源可以同时喂给多个处理节点支持条件分支、去重、延迟、聚合。一次搭建长期受益规则一旦配好除了偶尔维护它真的会替你跑上几年。上图就是 Huginn 官方示例里的Agent 事件流左侧 Twitter 新闻源、天气源各自采集中间的 Peak Detector、Trigger 等 Agent 判断条件最终汇总进早晚两份 Digest 邮件。你要做的就是像搭积木一样把节点串起来。第一步把第一台 Huginn 跑起来先别急着配复杂逻辑把环境跑通最重要。Huginn 提供两条主流路线按你的场景二选一。路线 ADocker 一键体验本地有 Docker 的话这是最快路径两条命令搞定# 拉取官方镜像并启动映射 3000 端口 docker run -it -p 3000:3000 ghcr.io/huginn/huginn浏览器打开http://localhost:3000用默认账号admin/password登录。第一次登录后马上去改密码。这条路线适合先跑起来体验容器使用环境变量传参完成配置更多细节见官方文档 doc/docker/install.md。路线 B源码生产级部署想要长期稳定运行、自己掌控数据库和进程就按源码方式装。完整手册见 doc/manual/installation.md核心步骤浓缩如下# 1. 克隆仓库 git clone https://gitcode.com/gh_mirrors/hu/huginn cd huginn # 2. 复制环境配置并编辑关键改 APP_SECRET_TOKEN cp .env.example .env # 用编辑器打开 .env至少修改 APP_SECRET_TOKEN、DOMAIN # 并填好 DATABASE_USERNAME / DATABASE_PASSWORD 等数据库连接信息 # 3. 安装依赖生产环境跳过 development/test 组 bundle install --deployment --without development test # 4. 初始化数据库建库→迁移→灌入示例代理和管理员账号 bundle exec rake db:create db:migrate db:seed开发环境想直接试玩装完依赖后跑bundle exec foreman start访问http://localhost:3000同样用admin/password登录。生产环境则建议配合 Nginx 反向代理参考 deployment/nginx/huginn 这份现成配置。两种部署方式怎么选对比维度Docker 路线源码生产部署上手速度一条命令分钟级需要装 Ruby、数据库半小时以上适合场景试用、验证、小规模自用长期运行、多用户、需要自定义进程配置方式环境变量.env文件 Procfile更新方式拉新镜像重建容器git pull后跑迁移推荐文档doc/docker/install.mddoc/manual/installation.md主线实战搭建新品情报监控工作流现在进入正题。假设你的目标是监控某几个技术博客的 RSS当出现与自动化/AI相关的文章时把摘要格式化后发到你的邮箱。四个节点就能搞定每个节点都是一个 Agent。第 1 个节点RssAgent 抓取信息源新建 Agent 时Type 下拉框选RssAgent。它用 Feedjira 解析 RSS/Atom 源只在新内容出现时产出事件Event自带去重记忆。Options 填成 JSON{ url: https://example.com/blog/feed.xml, clean: true, expected_update_period_in_days: 2, max_events_per_run: 10 }字段说明urlRSS 地址也可以传数组一次监控多个源clean设为true会把描述里的危险 HTML 清理掉安全第一expected_update_period_in_days超过这个时长没更新Agent 会把自己标记为不健康方便你发现问题max_events_per_run单轮最多产出多少事件防止信息洪峰。Schedule 先选Every 1h让这个 Agent 每小时去检查一次。保存后点Run按钮手动跑一轮你会在 Events 页看到抓回来的文章数据。第 2 个节点EventFormattingAgent 格式化与过滤RssAgent 吐出的原始事件字段很多title、url、date_published、content……直接发给邮件会很乱。中间加一个EventFormattingAgent用 Liquid 模板把关心的字段重排甚至做条件判断。Options 配置{ mode: merge, instructions: { subject: 【情报】{{title}}, message: 标题{{title}}\n链接{{url}}\n发布时间{{date_published}}\n\n摘要{{content | strip_html | truncate: 200}} } }这里的关键点mode设为merge表示保留原始字段、只追加新字段设为clean则只输出 instructions 里的字段模板里{{title}}、{{url}}这类变量来自上游事件|后面是过滤器truncate: 200把超长正文截断到 200 字想按关键词过滤在matchers里用正则匹配{{title}}比如只放行标题含自动化或AI的文章其余丢弃。你可以在界面上点Dry Run试运行填入一条测试事件预览格式化结果不用等真实数据就能验证模板对不对。这个功能几乎每个 Agent 都有强烈建议养成先 Dry Run 再上线的习惯。第 3 个节点EmailAgent 发送通知最后接一个EmailAgent把格式化好的事件变成邮件。配置很简单{ subject: {{subject}}, body: {{message}}, recipients: youexample.com }subject/body都支持 Liquid 模板这里直接引用上游传过来的字段不写recipients时默认发到你的注册邮箱生产环境要真正发信记得在.env里配好 SMTP 和EMAIL_FROM_ADDRESS开发环境默认邮件被拦截可在http://localhost:3000/letter_opener查看。串联起来Sources 与事件传播回到三个 Agent 的编辑页第 2 个节点的Sources选第 1 个 RssAgent第 3 个节点的 Sources 选第 2 个 EventFormattingAgent。这样事件就沿着抓取 → 格式化 → 发送的单向链路流动起来。新建 Agent 的界面大致如上图左边是类型、名称、调度、来源、Options 表单右边是当前 Agent 的功能说明。等你攒了几个节点回到 Agents 页点View diagram就能看到整条链路的可视化视图。让定时更灵活SchedulerAgent如果不想让每个 Agent 各自设 Schedule也可以用SchedulerAgent做统一调度它按 cron 表达式周期性地去 run 指定的目标 Agent。比如周一到周五每晚 22 点执行0 22 * * 1-5还支持时区后缀0 22 * * 1-5 Asia/Shanghai以及L月末、Sun#1每月第一个周日这类扩展写法。具体语法在源码里有完整说明见 app/models/agents/scheduler_agent.rb。这条链路上用到的 Agent 速查Agent职责关键 Options典型场景RssAgent订阅并解析 RSS/Atomurl、clean、max_events_per_run博客、播客更新监控WebsiteAgent抓取网页并提取字段url、mode、extract商品降价、页面变化监控EventFormattingAgentLiquid 格式化/过滤事件instructions、mode、matchers字段重排、关键词筛选EmailAgent邮件发送subject、recipients、body结果通知、每日汇总SchedulerAgentcron 统一调度schedule、action、targets定时批量运行JavaScriptAgent自定义 JS 处理code复杂数据转换工程化实践上线前的安全加固与性能调优工作流跑通只是开始让它稳定安全地跑下去这几件事别省。安全三件套收紧注册在.env里设置INVITATION_CODE你的邀请码并把SKIP_INVITATION_CODE保持为false陌生人就没法随意注册你的实例。强制 HTTPS.env里把FORCE_SSLtrueNginx 改用 deployment/nginx/huginn-ssl 这份配置填好你的域名和证书路径。定期备份数据全在数据库里用mysqldump或pg_dump做定时备份别等出事再后悔。性能调优事件保留策略每个 Agent 都能设置keep_events_for比如keep_events_for: 7表示只保留 7 天的事件防止数据库无限膨胀。高频源尤其要设。进程数生产环境.env里用WEB_CONCURRENCY控制 Puma worker 数2 个 worker 对大多数场景足够内存小于 2GB 的机器建议降到 1详见 doc/manual/requirements.md。减少重复请求多个 Agent 抓同一个网站时中间加个缓存/去重节点避免把人家网站打爆也省自己的资源。扩展生态官方 Agent 不够用时可以用ADDITIONAL_GEMS环境变量挂载社区写的第三方 Agent比如ADDITIONAL_GEMShuginn_github_agent。想在核心仓库里加新 Agent直接参考现有实现写一个即可仓库里每个 Agent 都带完整的 spec 测试照着 app/models/agents/ 下的文件仿写就行。常见问题与踩坑Q1Agent 配好了但一直不执行先看两处一是该 Agent 的 Schedule 是否设成了never二是 Workers 是否在跑。源码部署用bundle exec rake production:check做自检production:status看进程状态Docker 部署确认容器没挂。之后再翻log/production.log找异常堆栈。Q2网站抓回来一堆乱码多半是网页编码声明缺失或错误。给 WebsiteAgent/RssAgent 加force_encoding选项指定编码比如force_encoding: UTF-8同时确认请求时带了正确的user_agent不少站点会针对爬虫返回不同内容。Q3邮件发不出去开发环境默认拦截邮件是正常现象去/letter_opener看。生产环境检查.env里的 SMTP 配置和EMAIL_FROM_ADDRESS还要确认发件域名有 SPF 记录否则很容易进垃圾箱。Q4Liquid 模板写错导致事件处理失败先用Dry Run测模板注意字段名要跟上游事件实际输出一致去 Events 页看真实 payload。变量不存在不会报错而是渲染为空所以模板没报错但内容少了多半是字段名拼错了。Q5MySQL 8 上迁移报 Out of sort memory如果你在.env里开启了NATIVE_JSON_COLUMNStrue需要把数据库的sort_buffer_size调大到 4M 以上否则对 JSON 列排序会超限。不改的话保持该配置关闭即可。Q6想监控的页面没有 RSS 怎么办用 WebsiteAgent 直接抓 HTMLextract里用 CSS 选择器提字段mode设为on_change只在新变化时触发。再配合 EventFormattingAgent 做阈值判断比如价格低于某个值才发通知就是一套完整的价格监控器。下一步让你的自动化升级到这里你已经掌握了一个完整工作流的搭建方法。进阶方向有四个看官方文档部署细节看 doc/manual/installation.md更新流程看 doc/manual/update.md挖源码50 种 Agent 的实现都在 app/models/agents/每个文件的 description 都自带完整配置说明是最好的学习材料玩 Dry Run把每个 Agent 都 Dry Run 一遍理解事件字段的来龙去脉组合出复杂业务把 Webhook 接进来让外部系统也能往你的工作流里喂事件试试跨 Agent 的联动逻辑。监控着监控着你会发现自己很少再手动刷网页了——因为该看的你的数字哨兵已经替你看到并汇总好了。现在就去打开你的 Huginn新建第一个 Agent让程序替你值班吧。【免费下载链接】huginnCreate agents that monitor and act on your behalf. Your agents are standing by!项目地址: https://gitcode.com/gh_mirrors/hu/huginn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表