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
:
- 获取纽时的摘要RSS
- 去依次访问其中每个URL,抓取全文
- 把抓取的全文,再包装回RSS,输出订阅地址
这三个Agent,Huginn都已经提供了模板,只需要往里面填地址、写属性就行了,很简单。
3.1. 获取原始摘要RSS
比如第一步,获取纽约时报摘要RSS的Agent。Huginn里获取RSS的Agent,叫做RSSAgent,因此我们创建一个RSSAgent,填写入纽时的RSS地址:
{
"expected_update_period_in_days": "14",
"clean": "false",
"url": "http://cn.nytimes.com/rss.html"
}
上面各项参数的含义,在创建Agent的页面上就有帮助说明。例如expected_update_period_in_days
表示估计这个RSS源更新的频率。
创建成功后,Agent就有了一个专属页面:
单个Agent页面
当该Agent运行后,就去抓取RSS源,获取到许多Feed Entry。每一条取到的Feed就等于是一条中间物料/板材/Event
,例如其中一个Event
如下:
{
"id": "http://cn.nytimes.com/health/20151110/c10pressure/",
"date_published": "2015-11-10 10:12:35 +0800",
"last_updated": "Tue, 10 Nov 2015 10:12:35 +0800",
"url": "https://d3qlz4p8smvoli.cloudfront.net/health/20151110/c10pressure/",
"urls": [
"https://d3qlz4p8smvoli.cloudfront.net/health/20151110/c10pressure/"
],
"description": "传统的收缩压标准将140毫米汞柱上下为正常,但美国研究人员最新发现,收缩压如果保持在120毫米汞柱以下,可以使发生心血管疾病或中风的风险降低25%。<p>![布莱根妇女医院心脏病学家、哈佛大学医学教授马克·阿兰·费弗尔博士表示,这项研究结果出来后,他会觉得自己现在有义务帮助病人进一步降低自己的血压。 Charlie Mahoney for The New York Times](http://upload-images.jianshu.io/upload_images/206186-3efd2089eb6b1781.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<\/p> <p style='text-align: right; color: gray; font-size: 11px!important; line-height: 10px;'>Charlie Mahoney for The New York Times<\/p> <p style='text-align: left; color: gray; font-size: 11px!important; line-height: 10px;'>布莱根妇女医院心脏病学家、哈佛大学医学教授马克·阿兰·费弗尔博士表示,这项研究结果出来后,他会觉得自己现在有义务帮助病人进一步降低自己的血压。<\/p> ",
"content": "传统的收缩压标准将140毫米汞柱上下为正常,但美国研究人员最新发现,收缩压如果保持在120毫米汞柱以下,可以使发生心血管疾病或中风的风险降低25%。<p>![布莱根妇女医院心脏病学家、哈佛大学医学教授马克·阿兰·费弗尔博士表示,这项研究结果出来后,他会觉得自己现在有义务帮助病人进一步降低自己的血压。 Charlie Mahoney for The New York Times](http://upload-images.jianshu.io/upload_images/206186-3efd2089eb6b1781.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<\/p> <p style='text-align: right; color: gray; font-size: 11px!important; line-height: 10px;'>Charlie Mahoney for The New York Times<\/p> <p style='text-align: left; color: gray; font-size: 11px!important; line-height: 10px;'>布莱根妇女医院心脏病学家、哈佛大学医学教授马克·阿兰·费弗尔博士表示,这项研究结果出来后,他会觉得自己现在有义务帮助病人进一步降低自己的血压。<\/p> ",
"title": "“正常”的血压值或许并不利于预防心脏病",
"authors": [
"GINA KOLATA"
],
"categories": [
"健康"
]
}
这些Event/中间物料/板材/
都会吐给下一个Agent
,它要访问其中url
指向的网页,抽取全文内容。
3.2. 抓取全文
访问某个URL,去抓取全文,这类工作在Huginn中由WebsiteAgent完成,因此我们新建一个WebsiteAgent:
{
"expected_update_period_in_days": "14",
"url": "{{url}}",
"type": "html",
"mode": "merge",
"extract": {
"description_full": {
"css": ".content_list",
"value": "."
}
}
}
同样,里面各字段的含义,新建Agent时页面上都有帮助说明。通过extract字段指定的css和xpath(需要有相关基础知识),这一步Agent/车间
就抓到了全文内容,并生成如下event:
{
"id": "http://cn.nytimes.com/health/20151110/c10pressure/",
"date_published": "2015-11-10 10:12:35 +0800",
"last_updated": "Tue, 10 Nov 2015 10:12:35 +0800",
"url": "https://d3qlz4p8smvoli.cloudfront.net/health/20151110/c10pressure/",
"urls": [
"https://d3qlz4p8smvoli.cloudfront.net/health/20151110/c10pressure/"
],
"description": "传统的收缩压标准将140毫米汞柱上下为正常,但美国研究人员最新发现,收缩压如果保持在120毫米汞柱以下,可以使发生心血管疾病或中风的风险降低25%。<p>![布莱根妇女医院心脏病学家、哈佛大学医学教授马克·阿兰·费弗尔博士表示,这项研究结果出来后,他会觉得自己现在有义务帮助病人进一步降低自己的血压。 Charlie Mahoney for The New York Times](http://upload-images.jianshu.io/upload_images/206186-3efd2089eb6b1781.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<\/p> <p style='text-align: right; color: gray; font-size: 11px!important; line-height: 10px;'>Charlie Mahoney for The New York Times<\/p> <p style='text-align: left; color: gray; font-size: 11px!important; line-height: 10px;'>布莱根妇女医院心脏病学家、哈佛大学医学教授马克·阿兰·费弗尔博士表示,这项研究结果出来后,他会觉得自己现在有义务帮助病人进一步降低自己的血压。<\/p> ",
"content": "传统的收缩压标准将140毫米汞柱上下为正常,但美国研究人员最新发现,收缩压如果保持在120毫米汞柱以下,可以使发生心血管疾病或中风的风险降低25%。<p>![布莱根妇女医院心脏病学家、哈佛大学医学教授马克·阿兰·费弗尔博士表示,这项研究结果出来后,他会觉得自己现在有义务帮助病人进一步降低自己的血压。 Charlie Mahoney for The New York Times](http://upload-images.jianshu.io/upload_images/206186-3efd2089eb6b1781.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<\/p> <p style='text-align: right; color: gray; font-size: 11px!important; line-height: 10px;'>Charlie Mahoney for The New York Times<\/p> <p style='text-align: left; color: gray; font-size: 11px!important; line-height: 10px;'>布莱根妇女医院心脏病学家、哈佛大学医学教授马克·阿兰·费弗尔博士表示,这项研究结果出来后,他会觉得自己现在有义务帮助病人进一步降低自己的血压。<\/p> ",
"title": "“正常”的血压值或许并不利于预防心脏病",
"authors": [
"GINA KOLATA"
],
"categories": [
"健康"
],
"description_full": "<div class=\"content_list\">\n \n \n \n <figure class=\"img_row\">\n <div class=\"img_box\">\n <img href=\"http://static01.nyt.com/images/2015/11/10/science/10Pressure2/10Pressure2-popup.jpg\" src=\"http://static01.nyt.com/images/2015/11/10/science/10Pressure2/10Pressure2-articleInline.jpg\" alt=\"77岁的威廉·多尔蒂有家族心脏病史。经过药物治疗,他的血压基本控制在140之下。\">\n <\/div>\n <figcaption>\n <p class=\"img_text caption\">77岁的威廉·多尔蒂有家族心脏病史。经过药物治疗,他的血压基本控制在140之下。<\/p>\n <small class=\"credit\">Charlie Mahoney for The New York Times<\/small>\n <\/figcaption>\n <\/figure> \n \n \n \n \n <p class=\"\">今年9月,联邦政府宣布,因研究结果太过惊人,它突然叫停了一个大型血压研究,医生们因此陷入了进退维谷的境地。<\/p>\n \n \n \n \n \n <p class=\"\">声明称,研究人员发现,将收缩压控制在远低于目前建议的水平——低于120,而非140或150毫米汞柱——可以挽救生命,以及预防心脏病和中风。但他们拒绝透露挽救了多少生命,预防了多少心梗,以及其他关键的量度数据。<\/p>\n \n \n \n \n \n <p class=\"\">“不进一步了解他们的发现,怎么敢在血压控制上做任何不同的尝试?”耶鲁心脏病学家哈伦·克鲁姆霍尔茨(Harlan Krumholz)博士说,这也是其他专家的顾虑所在。<\/p>\n \n \n \n \n \n <p class=\"\">周一,这项研究的调查人员在于佛罗里达州奥兰多市举行的美国心脏协会(American Heart Association)会议上做了报告,同时在《新英格兰医学期刊》(New England Journal of Medicine)发表了一篇文章,揭开了这项研究的面纱。该研究对9361名病人进行了为期平均3.2年的跟踪,结果发现,和将收缩压控制在目前的140的病人相比,控制在120以下的病人,死亡率低27%(155人对210人),出现心力衰竭的几率低38%(62人对100人)。<\/p>\n \n \n \n \n \n <p class=\"\">收缩压是两项血压指标中更高的那一个,代表心脏收缩时的血压状况。<\/p>\n \n \n \n \n \n <p class=\"\">这项研究的主要研究员之一保罗·K·惠尔顿(Paul K. Whelton)表示,总体而言,发生心梗、心脏衰竭或死于心脏病的比率可以降低25%(243人对319人)。<\/p>\n \n \n \n \n \n <p class=\"\">年长的参与者跟年轻的情况一样好。<\/p>\n \n \n \n \n \n <p class=\"\">没有参与该研究的哈佛大学教授马克·阿兰·费弗尔(Marc Alan Pfeffer)博士表示,这些研究结果会对美国数百万高血压患者产生颠覆性影响。<\/p>\n \n \n \n \n \n <p class=\"\">费弗尔表示,这项研究出现之前,遇到年纪超过50岁、收缩压136、并对胆固醇等对心脏病重要风险因素有很好控制的病人,他会拍拍对方的肩膀然后说,“做得不错。”而现在,他会觉得自己有义务给病人开更多高血压药物。否则,他说,“我将错失挽救另一个生命的机会。”<\/p>\n \n \n \n \n \n <div class=\"nytcn_article_ad\" id=\"div-gpt-ad-bigad\">\n <script type=\"text/javascript\">\n googletag.cmd.push(function() { googletag.display('div-gpt-ad-bigad'); });\n <\/script>\n <\/div>\n \n <p class=\"\">据没有参与这项研究的阿拉巴马大学流行病学家保罗·芒特纳(Paul Muntner)测算,至少有1700万美国人马上就会受到这些发现的影响。<\/p>\n \n \n \n \n \n <p class=\"\">这项名为Sprint的研究招募年龄50岁及更高的高血压病人参与。这些病人至少还有一项罹患心脏病的其他风险因素,比如吸烟、高胆固醇,患有肾脏疾病或只是年龄大于75岁。其中一半被要求将血压控制在140以下,与现行做法一致。另一半则被要求将血压控制在120以下。这项研究原计划持续到2017年,但今年夏天突然终止,当时研究人员宣布他们发现了有“有可能挽救生命”的研究结果。<\/p>\n \n \n \n \n \n <p class=\"\">长期以来,医生们一直纠结于该把血压控制在什么水平。如果血压太低,可能导致眩晕、昏厥等并发症,对年纪大的人来说尤其如此。周一发布的结果显示,将血压控制在120的参与者中,有5%——即220人——在研究进行期间出现了严重的并发症——血压过低,导致严重眩晕或昏厥症状,或对肾脏产生不可逆的损伤。在将血压控制在140的参与者中,有118人出现了严重的并发症。<\/p>\n \n \n \n \n \n <p class=\"\">研究人员担心血压指标为120或更低的人在起身时出现血压骤降的并发症状,而实际上,这种情况在血压控制目标更高的人身上更容易出现。<\/p>\n \n \n \n \n \n <p class=\"\">“把这些并发症放在可以降低27%的死亡率的大背景下看,似乎益处大于风险,”韦克森林浸会医疗中心(Wake Forest Baptist Medical Center )生物统计学家维·M·勒布桑(David M. Reboussin)说,他是该研究的首席研究员。<\/p>\n \n \n \n \n \n <p class=\"\">还有一个问题是,血压究竟应该低到什么程度。在这项新研究中,一些病人将收缩压控制在低于110的水准,而对大多数人而言,保持在120就已经不易。克利夫兰大学医院凯斯医疗中心(University Hospitals Case Medical Center)高血压项目主任、本研究的研究员小杰克逊·J·赖特(Jackson T. Wright Jr.)博士表示,很难想象再进行一个大型研究来对比110和120的血压状况。“这个区隔非常窄,”他说,得到的研究结果的差别会很小,这意味着研究规模要非常大,时间要很长。<\/p>\n \n \n \n \n \n <p class=\"\">芒特纳表示,医生和病人只能面对一些不确定性。“临床试验再多也不够,”他说。<\/p>\n \n \n \n \n \n <p class=\"\">一些高血压专家劝诫大家要小心谨慎。纽约艾伯特·爱因斯坦医学院(Albert Einstein College of Medicine)的血压专家迈克尔·奥尔德曼(Michael Alderman)估计,这些研究结果意味着,每年在1000人中有6个人可以避免出现心梗、中风或心脏衰竭。他表示,这会让医生不知如何给病人个体提供建议。“如果它没有危害,或像安全的一次性疫苗接种一样危害很小,医生们就很容易做决定。但如果它意味着健康的人需要连续几十年服用药物,就没那么容易了。”<\/p>\n \n \n \n \n \n <p class=\"\">耶鲁大学的克鲁姆霍尔茨表示,尽管研究结果让人兴奋,但不应该将更低的血压定为要求。他说,血压那样低,“是有风险的。”医生们必须先和病人就侧重点和目标进行沟通。<\/p>\n \n\n\n\n \n <div class=\"nytcn_authorinfo\">\n <p>翻译:常青<\/p>\n <\/div>\n \n <\/div>"
}
可以看到,description_full
字段已经是文章全文。说明抓取成功了。
3.3 输出全文RSS地址
最后一步,就剩下把抓到的全文Event,以RSS的格式输出。这里使用Data Output Agent:
{
"secrets": [
"newyork"
],
"expected_receive_period_in_days": "7",
"template": {
"title": "纽约时报中文网 国际纵览",
"description": "纽约时报中文网 国际纵览",
"item": {
"title": "{{title}}",
"description": "{{description_full}}",
"link": "{{id}}",
"pubDate": "{{last_updated}}",
"guid": "{{id}}"
}
}
}
大功告成。
最后在第三步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
(完)