Huginn 强大开源的自动化神器

简介:

    Huginn Github地址,Hugin到底是什么?官网上的解释是:Huginn 是一个用于构建在线自动化任务的系统,可以把它看成是一个可以部署在自己服务器上的Yahoo! Pipes + IFTTT。

    Yahoo!Pipes的服务已经被关闭,大家可能不知道,IFTTT是这几年才流行起来的服务,它的功能是如果一件事情被触发,则执行另一件设定好的事情,比如,如果明天下雨,则自动给你的手机发送提醒,如果在微博上发布一条状态,则自动保存到印象笔记。。。等等,它的功能非常多。

    Huginn是一个只属于自己的IFTTT,甚至比IFTTT更加强大,官网上介绍的功能就有很多,比如,跟踪天气变化、跟踪当前热点、监控商品价格(网页变化)、自动发送邮件、连接各种常用服务,等等。

    Huginn最最让人心动的功能莫过于,它可以将任意网站的内容变成RSS。在这个RSS日益被忽略、被放弃的年代,很多网站都已经不再提供RSS服务,但是,我认为恰恰相反,正因为是这个年代,这个信息大爆炸的年代,RSS才应该需要更加受到重视。可惜,尽管RSS能给用户带来最干净且完整的内容,但是它不能够给网站运营商带来广告或流量,也缺少互动,所以正在被很多网站运营商所抛弃。

部署Huginn:

    由于我有自己的NAS,所以我就直接用最简单的方式,docker方式运行 huginn.  直接搜索 huginn/huginn 映像搭建。

    这里还有一个huginn 的中文网站,里面也介绍到各种环境下的安装方式,这个大家自行查阅了: http://www.huginn.cn/, 除此百度也有搭建教程供大家参考。

学习huginn:

找到一篇很好的入门文章

原文链接:http://blog.mazhangjing.com/2017/01/14/huginn%E6%8C%87%E5%8D%97/    

备份链接:https://ixiqiao.cn:5001/ns/sharing/I38lz 

使用huginn:

通过阅读上面一篇文章,已经对huginn的运作有一定的理解,于是能想到对自己有用的就是订阅不提供RSS的网站或者博客,或者关注某件商品的价格变动,通过邮件提醒,同时微信可以绑定QQ邮箱邮件提醒功能,通过过滤提醒,可以实现微信提醒功能。

这个链接提供了一些 scenarios 实例供大家学习参考:http://huginnio.herokuapp.com/scenarios

下面尝试一下使用 agent 关注“什么值得买”网站指定商品价格变动提醒:

思路:本来打算使用 website agent 捕抓商品名称,商品链接,商品价格,然后通过trigger agent 比对价格变动,再通过 email agent 发送邮件到QQ邮箱,然后在微信绑定QQ邮箱提醒(设置过滤只关注特定邮件)来达到提醒功能。

但是,原来使用email agent 还要组件支持,我安装在 docker 的 huginn 就有点麻烦了,所以转变一下思路,改为输出 RSS,因为自己有使用 tiny tiny RSS 订阅文章的习惯,所以还是很方便的。

所以只要用到三个agent :website agent, trigger agent 和 Data Output Agent

《Huginn 强大开源的自动化神器》

website agent:

30分钟检查一次,事件保留一天

《Huginn 强大开源的自动化神器》

website agent支持 xpath 和 css 选择器,各有优势吧,之前我也不会 xpath,特意简单学习一下,感觉比 css 更强大。(学习地址

这里提取了三个信息:标题、价格、链接   至于 price2 是要比较的价格,mode:可选 on_change, all, merge ,也很容易理解了,这里选择 on_change 意思是每次抓取网页得到的数据有变动就传递给下一个agent处理。

{
  "expected_update_period_in_days": "4",
  "url": "http://www.smzdm.com/p/7891293/",
  "type": "html",
  "mode": "on_change",
  "extract": {
    "price": {
      "xpath": "//em[@itemprop='price']",
      "value": "string(.)"
    },
    "title": {
      "xpath": "//em[@itemprop='name']",
      "value": "normalize-space(.)"
    },
    "url": {
      "xpath": "//meta[@property='og:url']",
      "value": "@content"
    },
    "price2": {
      "xpath": "/",
      "value": "67"
    }
  }
}

trigger agent:

trigger agent 就负责比对 price 字段与 price2 的大小,复合 price < price2 就继续传递到下一个 agent。

{
  "expected_receive_period_in_days": "5",
  "keep_event": "true",
  "rules": [
    {
      "type": "field<value",
      "value": "{{price2}}",
      "path": "price"
    }
  ],
  "message": "{{title}} 最新价格:'{{price}}',原价:'{{price2}}',地址:<a href=\"{{url}}\">{{url}}</a>"
}

Data Output Agent:

负责输出 RSS 源

{
  "secrets": [
    "prices"
  ],
  "expected_receive_period_in_days": 2,
  "template": {
    "title": "商品价格监控",
    "description": "关注的商品降价了!",
    "item": {
      "title": "{{message}}",
      "description": "",
      "link": ""
    }
  },
  "ns_media": "true"
}

小结:

之后若要关注其他商品,只要 clone 第一个 agent,改变一下 url 参数,和 price2 就可以了,后面的流程不需要变。

这个例子比较简单,huginn 还能完成更多自动化功能就有待大家去发掘了。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注