结合 huginn 实现自动推送猫眼电影上线提醒

安装 huginn

网上关于如何安装 huginn 的文章太多了, 这里不做介绍, 我自己使用的是 huginn 的 docker 安装方式, docker-compose.yml 如下

启动后, 配置 nginx 使用 ssl 时发现, 每次登录总是跳转到首页, 变为未登录状态, 解决方式是参考 nginx-ssl, 添加必要的 proxy_set_header:

安装完成后, 通过默认用户名密码 admin / password 即可登录.

配置 huginn

huginn 中的几个关键术语解释一下:

  • Agent

代理, 简单理解就是一个操作, 比如发送消息, 解析网页等等.

  • Scenarios

场景, 场景由多个 agent 组成, 通过 agent 构建一个有向图.

  • Event

事件, 即 agent 的执行的中间结果, 前一步的 agent 将处理后的信息以 event 的形式抛出去, 由下一步的 agent 去接着处理. 这里就涉及到 agent 中的两个概念, sources 和 receivers, 分别定义的是当前 agent 的前置和后置 agent.

以当前我们的任务为例. 我们要收集信息的页面为 https://maoyan.com/films:

可以看到, 我们能从这个页面获取到最新电影的 中文名称/缩略图/分数, 我们第一步就是要解析这个页面, 获取最基本的信息, 第二步去每部电影的详情页去获取电影的详细信息(介绍, 时间等等), 第三步将获取的信息格式化为 slack message 进行发送.

这里, 我们先创建一个名为 movie 的 Scenarios.

step 1

通过查看页面元素, 我们不难去定位每一个字段

我们新建一个 agent, 类型为 Website Agent, 这个 agent 用于处理页面元素.

通过点击 Dry Run 可以进行测试. 我们看到可以拉取到的数据如下:

这个数组中的每个 {} 都将是一个 event 向外发布.

step 2

这里我们再创建一个 agent, url 使用上一步给出的 url 进行拼接.

另外还有一个细节是, 这里的 mode 为 merge, 意思是, 将上一步的 event 带过了的字段和当前 event 进行合并, 往下一步传.

点击 Dry Run, 在 Event to Send 中填入一个上一步的 event. 如:

可以看到我们获取到了更详细的影片信息

step 3

先要为 slack 创建一个 app, 用于接受消息. Create New App.

为这个 app 创建一个 incoming_webhook. 格式应该是

https://hooks.slack.com/services/XXXXXXXXXX/xxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxx

关于发送 slack, 虽然 huginn 提供了一个 slack agent, 但使用起来仅仅发送最简单的 message 可以使用, 无法构建复杂的格式. 我们改用 post agent.

显示效果如下:

关于 slack 的消息格式, 不是本文的重点, 具体可以参考这里 An introduction to messages.

原文链接:https://www.shanhh.com/huginn_for_maoyan_movie/

发表评论

联系我们

联系我们

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部