使用Huginn+RSS构建个人信息中心

前言

Huginn是一个神器,见到它有一种相见恨晚的感觉,我们都知道IFTTT是一个信息的触发器,可以用来建立自动的工作流。而Huginn是IFTTT的加强版,几乎可以将所有的信息进行重组、变形、输出,真正做信息的主人。

因为最初找到Huginn的时候是寻找一款能够将不支持feed的网站生成feed的方式,因此本文着重从这个角度介绍。

方案选择

Huginn的安装有多种方式:

  1. Docker的方式安装在本地
  2. 安装在Linux Server
  3. 安装在Heroku

Docker的方式是最无痛的,Docker相当于是一个沙盒环境,在沙盒中配置好服务,开放个端口给外部,就可以调用服务了。不过Docker方式安装在本地,生成的rss文件也是一个本地路径,并不能放到RSS阅读器中。因此这种方式适合先熟悉下Huginn的配置。具体的安装方法可以Google搜“Huginn Docker安装”获得。

安装在Linux Server的方式最理想,不过技术复杂度也最高,官方有很完善的安装说明:Installation from source,不过尝试的过程中困难重重,遇到了很多问题。其中最重要的一个问题是VPS内存不足,本身VPS内存512M,Huginn要求至少有0.5G的内存和0.5G的swap空间,好不容易安装上去运行起来也经常报错。

安装在Heroku的方法最推荐,熟练的话十几分钟就能配置完毕。Heroku是一个支持Ruby的云平台,因为Huginn本身是基于Ruby的,因此使用Heroku来部署会省去很多环境准备的步骤。

搭建Huginn环境

准备工作

  1. 注册Heroku平台账号
  2. 准备编译环境,如果本地机器是一台Mac/Linux的话,可以使用该环境;如果本地是Windows的话,可以安装Linux虚拟机。不过更推荐的方式是使用云端环境,例如Could9,免费的方案足够了,下面以Cloud9来说明。
  3. 进入C9,创建一个新的private空间,template选择ruby。
  1. 一段时间的配置后会看到控制界面,右下方的bash中可以输入命令,然后安装Heroku Toolbelt

安装Huginn

  1. 登录Heroku: heroku login,输入账号密码
  2. 创建huginn app: heroku create huginn-sample(可以自己命名)
  3. Clone app到C9:heroku git:clone --app huginn-sample
  4. Clone Huginn的主程序到C9:git clone https://github.com/cantino/huginn.git
  5. 将Clone来的Huginn文件夹内的内容复制到huginn-sample文件夹中,注意隐藏文件也需要复制。复制隐藏文件小窍门:cp dir1/. dir2 -rf
  6. cd到huginn-sample文件夹内:cd huginn-myifttt,随后输入cp .env.example .env,完成后再输入bundle,这一步会花费比较长的时间.
  7. 提交代码变更:git add .git commit -am 'commit code'
  8. 最后,执行脚本:bin/setup_heroku,运行过程中会有几处提示,请按照提示输入,这一步运行时间也比较长,请耐心等待。
  9. 部署完成,尽情享用吧!更多安装细节请参考:部署到 Heroku

小技巧:Heroku设置时区使Huginn任务运行更准时:heroku config:add TZ="Asia/Shanghai"

使用Huginn生成输出全文的RSS

Huginn最大的能力是对信息的重组,从繁多冗杂的信息中提取出需要的信息。对于网站来说,我们把它看做信息源,那么这个信息源何时更新、更新了什么、是不是我们关系的内容,就是一个很重要的信息。Huginn能够替我们做的就是将需要的信息提取出来,组织成RSS Feed的形式,定时推送给我们。

这个过程有三个主要步骤,在Huginn中是通过agent来完成的,可以将agent理解为一个个车间,每个车间有它自己的作用,那么我们需要的三个车间是:

  1. 下载原始信息,将url、标题等信息抓取下来
  2. 根据url下载相应页面的全文(关于RSS全文输出的优势可以看这篇博客
  3. 输出成规范的RSS格式

下面分两种情况进行说明。

网站内容生成RSS

解析原始页面

创建一个Website Agent,取一个名字,schedule代表该agent运行的频率,其他可以暂时不改,Options里面是主要的操作。

  • url填入需要解析的页面
  • type表示格式,可以有html, xml, json, text多种格式
  • mode表示信息的输出处理方式,“on_change”表示仅输出下面的内容,”merge”表示新内容和输入的agent内容合并。
  • extract是我们要提取的信息,这里需要xpath和css知识。一个简单地确定xpath路径的方式是使用chrome的Inspect功能,如下图。
  • 依次将标题、摘要、URL都抓取下来
  • 使用Dry Run看下效果,保存

小技巧:某些时候页面有防爬虫检测功能,这时候需要设置UA:user_agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

全文输出

这步的主要步骤是使用前一步生成的url抓取原始页面中的全文内容。新建一个Agent,在source中填入上一步的agent,意即使用上一个agent生成的events作为输入。

与上一个Agent不同的地方在于:mode选择“merge”,value填入“.”,即原样输出全文并合并原先的输出。

生成RSS

生成RSS的Agent叫Data Output Agent,Sources中填入第二步的Agent名称,配置如下:

save后,可以在Summary中看到RSS链接。

微信公众号内容生成RSS

微信公众号内容获取有一些不一样的地方,本身公众号并没有一个列表页供抓取。原先可以利用Sogou的微信搜索来间接实现,不过不知从何时起,搜狗中的账号列表页变成了js动态生成,目前可行的办法是通过第三方的聚合平台来实现,如:传送门,其他操作和上述网站操作方式一致。

使用FeedBurner发布Feed

FeedBurner是Google提供的一项服务,用于将任意feed地址转换成一个可全网发布的地址,这个服务有两方面的好处:

  1. 生成的Feed地址可能会发生变动,burn之后能保证最终生成的地址固定
  2. burn后的地址方便统计和推送

FeedBurner的地址:https://feedburner.google.com, 使用非常简单,基本就是填入地址一路next就行:


最终生成的Feed地址如:http://feeds.feedburner.com/herokuapp/ckBV

使用Inoreader阅读生成的地址

自从Google Reader死了之后,第三方的Rss阅读工具越来越少,Inoreader算是体验做得很不错的,将上面生成的地址填入订阅后就可以开始阅读啦。

根据自己的需求,添加更多的Feed,同时结合一些本身已经对外提供Rss的网站,就构建出了自己的私人信息中心,从此把自己从垃圾信息的海洋里解放出来吧!

至于如何构建一个合理的信息中心以及有哪些优质源推荐,后面会写个专题详细说。

更多Huginn的用法

其实Huginn还有很多高级用法,比如:

  • 监控天气预报,如果明天下雨,则给你发送提醒;
  • 监控某款商品的网页,一旦降价,通知你;
  • 监控游戏官网,一旦游戏有发售或新动态,通知你;
  • ……

官方网站上有很多应用实例,有时间来一一研究下。

参考资料

  1. 安装在Linux server的官方指南:Installation from source
  2. Heroku部署说明:部署到 Heroku
  3. Huginn安装教程—建立你自己的IFTTT
  4. Huginn中文指南:搭建自己的iFTTT
  5. 让所有网页变成RSS —— Huginn