Huginn: 烧录RSS的神器

转自简书

http://www.jianshu.com/p/4a47e452abc9

作者 笠三叶

Huginn Logo

RSS重度用户,应该都会关注三件事:

  • 摘要RSS 转为 全文RSS
  • 为不提供RSS的网站,制作全文RSS
  • 根据关键词等条件,过滤RSS

在以前,Yahoo Pipes可以做这三件事儿。但Yahoo Pipes关闭以后呢?

这篇小文介绍一个很棒的替代品,Github上有一万多收藏的明星项目:Huginn(链接)。


提示
使用Huginn需具备最起码的折腾能力,和这些前提知识:

  • Linux基本操作
  • CSS基本使用
  • Xpath基本使用
  • RSS最基本知识
  • JSON最基本知识

1. 什么是Huginn

Huginn是将信息流组装、拼接和变形的一个工具。如果你听说过IFTTT(链接),Huginn约等于加强版的IFTTT。它能:

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

官方WIKI(链接)内有更多例子。但为了不跑题,这篇短文只围绕RSS方面的应用来说。


2. Huginn怎样工作

Huginn中的关键概念Agent,就类似于IFTTT中的Recipe。如果你不了解IFTTT,那我们从头说起:

要给不提供RSS的网站制作全文RSS,这件事儿可以被比喻成,要把原木材制作成一套高脚桌椅。那么就需要一个“家具厂”来做。Huginn就像是这一座RSS的“家具厂”:

木材是原材料,被运进工厂,1号车间木材加工成板材,2号车间把板材组装成原木桌椅,3号车间将原木桌椅喷涂外漆和装箱,最终出厂的是商品:高脚桌椅

Huginn就像这一条流水线:

  • 出厂的高脚桌椅,即最终产物,比喻烧制成功的、我们需要的全文RSS
  • 原材料木材,即待处理的素材,比喻不提供RSS的网站,或等待被加工的原始RSS源

Agent Event Flow流水线

那么显然,这里的关键问题是,怎样把平淡无奇的木材(不提供RSS的网站),逐步加工成有价值的高脚桌椅(全文RSS)呢?

当然门道都在车间上!

使用几台车间?用什么类型的车间?所需的这几种类型车间有现成的吗?这都是要考虑的问题。而使用Huginn也完全一样的。


在Huginn中,这三组干活儿的车间,就被称作Agent

用Huginn 90%的时间,都是在操作Agent:用几个车间/Agent?什么类型的车间/Agent?我需要的车间/Agent,Huginn有提供吗?

例如,这是我创建的一部分Agent:

Agent页面

车间/Agent之间传递的,前一个车间/Agent传递给下一个车间/Agent板材/原木桌椅/中间物料,被Huginn称作Event


所以,整套过程是:

最初的素材A(或者是等待烧制RSS的网站,或者是摘要RSS),进入Huginn/工厂,通过一个又一个的Agent/车间流水线,在工厂内存在形态是Event,最终变成了我们想要的成品B(全文RSS)。

那么显然,Huginn能做什么,不能做什么,关键看它提供了哪些Agent。而我们用Huginn烧制RSS,关键就是选择它提供的一个个Agent,填入地址和必要的参数,等着输出全文RSS就行了。


下面就以具体例子演示,当想把一个摘要RSS转换成全文RSS时,创建几个Agent、哪些类型的Agent。


3. 举例:摘要RSS 转 全文RSS

比如我要把纽约时报的摘要RSS(链接),转换成全文RSS呢?也就是说,摘要RSS相当于木材,我想制作的全文RSS相当于高脚桌椅。那么,我要创建哪些Agent/车间,来完成这活儿呢?

如同把大象放进冰箱一样,只需把这活儿拆解成三步,即三个Agent

  1. 获取纽时的摘要RSS
  2. 去依次访问其中每个URL,抓取全文
  3. 把抓取的全文,再包装回RSS,输出订阅地址

这三个Agent,Huginn都已经提供了模板,只需要往里面填地址、写属性就行了,很简单。

3.1. 获取原始摘要RSS

比如第一步,获取纽约时报摘要RSS的Agent。Huginn里获取RSS的Agent,叫做RSSAgent,因此我们创建一个RSSAgent,填写入纽时的RSS地址:

上面各项参数的含义,在创建Agent的页面上就有帮助说明。例如expected_update_period_in_days表示估计这个RSS源更新的频率。

创建成功后,Agent就有了一个专属页面:

单个Agent页面

当该Agent运行后,就去抓取RSS源,获取到许多Feed Entry。每一条取到的Feed就等于是一条中间物料/板材/Event,例如其中一个Event如下:

这些Event/中间物料/板材/都会吐给下一个Agent,它要访问其中url指向的网页,抽取全文内容。

3.2. 抓取全文

访问某个URL,去抓取全文,这类工作在Huginn中由WebsiteAgent完成,因此我们新建一个WebsiteAgent:

同样,里面各字段的含义,新建Agent时页面上都有帮助说明。通过extract字段指定的css和xpath(需要有相关基础知识),这一步Agent/车间就抓到了全文内容,并生成如下event:

可以看到,description_full字段已经是文章全文。说明抓取成功了。

3.3 输出全文RSS地址

最后一步,就剩下把抓到的全文Event,以RSS的格式输出。这里使用Data Output Agent:

大功告成。

最后在第三步Agent的页面,会给出新的全文RSS的订阅地址,如图:

输出RSS地址

生成的全文RSS地址,可以通过FeedBurner(链接)烧录后,分享到网上供更多人使用。例如通过以上三步Agent,生成的纽时全文RSS订阅在这里


结语

本来,几乎没必要写Huginn的使用介绍,因为官方帮助文档(链接)已经详细到令人发指的地步。可惜如此神器,国内使用的人却很少,讨论的也少,故写文安利下。

篇幅原因,没有介绍如何安装Huginn。目前被采纳最多的三种部署方式是:

  • Docker部署:适合本地练手用
  • 部署在Heroku:优点是免费,缺点是限制多
  • 部署在Linux:优缺点与上相反

如果你看完本文起了使用的心,超级详细的安装手册可以查阅官方文档(链接)。

另,除了这里介绍的摘要RSS转全文RSS以外,由不提供RSS的网站直接生成全文RSS的例子见这里(链接),根据关键词等条件过滤RSS的例子见这里(链接)。官方文档内有更多五花八门的应用范例。

首发于:http://walden.farbox.com/post/huginn-a-rss-master-piece
(完)

 

发表评论

联系我们

联系我们

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

微信扫一扫关注我们

关注微博
返回顶部