前言

通过 RSS 方式订阅关注的文章和博客大约是 2012年的时候,那时我刚上大二。记得我最先使用的是 innoreader 和 feedly 两款软件。那时我并不是知道,通过这两款软件可以订阅自己想要关注的博客,因为我订阅的内容大多是国外的新闻,只需要在 app 中检索即可。这几年 innoreader 和 feedly 一直安装在我的手机中,但我却很少打开。近三年来,我愈发的对信息的管理感到焦虑,尤其是对碎片化的信息管理感到头疼。我生活中碎片信息源,很大一部分被微信公众号占据了。在前些年里,在我不怎么使用微信时,我是常常关注新闻的,然而近些年来,我发现自己对新闻的关注度下降了,虽然以前我也经常关注国外媒体的报道,比如经济学人、纽约时报等,但近些年却不太关注了。我很清楚,对于国内新闻的不关心是自己刻意为之的,但也有很大的被动因素,即我的注意力很大部分被微信占据了。我也曾尝试过借助爬虫将某人的微信公众号文章全部整理成 pdf,以便自己阅读,但是除去有一定的技术要求外,这也不是长久之计。

这两年,我也开始偶尔在自己的博客上写文章,开始关注别人搭建的博客上的文章,于是,很自然我就想到了 RSS 订阅器。在尝试了多种工具之后,我还是觉得 innoreader 更合自己胃口。就这样,innoreader 也开始成为我时常关注的重要渠道了。不过,这两个月,我发现自己越来越的难以忍受多平台的关注信息了,我想要的是将博客或公众号文章之类的信息整合到统一的平台当中,于是,我开始思考,如何才能将微信公众号的博客推送到 innoreader 上,而且能够实时更新。由于微信封闭的系统环境,只能借助于第三方的服务平台来构建 RSS 订阅的渠道。目前,网上常见微信公众号文章平台有搜狗微信搜索狗耳朵传送门 – 微信公众账号和文章的导航及推荐等。我开始逐一关注这几个平台,发现搜狗微信搜索反爬虫机制时常更新,网上关于搜狗微信搜索的 RSS 订阅机制时常失效,所以必须自己构建服务器来实时抓取,且要很好的避开爬虫。狗耳朵则只有文字没有图片,且是收费平台,不太喜欢。剩下就是传送门了,传送门虽然不那么稳定,但能够方便的抓取文章。

我在 github 和 知乎上查找别人尝试的各种实现微信订阅的方式中明白到,必须构建自己的服务器,否则很容易被封禁。许多人都提到了 Huginn,我开始对它产生了兴趣。拖延再三,一日,我找到网上的相关帖子,终于实现了单个微信公众号的订阅。不过,离我预想的还是差距挺远,因为并不是很方便。本文主要简要的介绍了搭建 huginn 服务的方法。

什么是 Huginn?

Huginn 一词的来源

在北欧神话中,爱瑟神族(Aesir)的主神奥丁(Odin)拥有两只乌鸦。奥丁是胜利、诗歌、智慧和死亡之神。他双肩上栖息着两只乌鸦,一只叫尤金(Huginn),另一只则为曼尼(Muninn),分别代表着“思维”和“记忆”, 它们是奥丁的眼线,会将每日所见向主人报告。当别的神在饮宴时,奥丁便思索“思维”和“记忆”告诉他的话。

Huginn 工具简介

Huginn 是一个用于构建在线执行自动化任务的系统,它可以监控网页变化、聚合第三方应用并且根据设定的触发条件执行自动化操作,你可以将它看作是一个可以运行在自己服务器上的 Yahoo!Pipes + IFTTT。该工具的作者为Andrew Cantino,Github 上的项目地址为 https://github.com/cantino/huginn/, 已经有上万的 star,而且该项目活跃度非常高,一直都有人在更新代码。

其实说到底,Huginn 提供的就是一个能够实现烧制 RSS 的在线爬虫架构。

Huginn 的配置

根据官方博客http://www.huginn.cn/blog/huginn/初学者向导 上给出的安装方式,在windows下需要通过虚拟机在 linux环境下配置。不过,为了免于在本地配置 huginn 安装环境的种种麻烦,我们可以借助第三方的服务器,在线搭建 huginn 服务,而无需在本地构建。详情,可根据官方教程利用 Huginn 打造一站式信息阅读平台。在这里,我将服务器部署到了 heroku ,每个月有四百多小时的免费使用时间。其它的,比如使用 vps 作为服务器就更佳了,不过我并未购买 vps 服务器。

在这里,主要借助以下平台部署 Huginn:

具体的配置,请阅读利用 Huginn 打造一站式信息阅读平台

Huginn 的使用

刚配置好 Huginn 环境后,如果不清楚如何使用,则可以下载官方提供的 scenarios 脚本库http://huginnio.herokuapp.com/scenarios下载使用。

在这里,我借助官方提供的微信公众号脚本库http://huginnio.herokuapp.com/scenarios/17,下载后,导入到自己搭建的服务器 Scenarios 中。

由于该模板是以搜狗微信搜索为抓取对象,在我实际使用时,发现无法正常使用,搜狗微信搜索已经做了反爬虫处理,所以我调整为从传送门爬取,下面我以 开智学堂公众号 为 RSS 制作对象,调整如下:

  1. 微信公众号 #1 搜索账号 (WebsiteAgent) Schedule every_1d Keep events for 86400 Propagate immediately false Disabled false
    {
      "expected_update_period_in_days": "4",
      "_comment": [
     "开智学堂"
      ],
      "url": [
     "http://chuansong.me/search?q=开智学堂"
      ],
      "type": "html",
      "mode": "on_change",
      "extract": {
     "url": {
       "xpath": "//*[@id=\"ld_pb7M6s_32122\"]/div[1]/div[1]/div/div/div[2]/div[1]/a",
       "value": "@href"
     }
      }
    }
    

2.微信公众号 #2 获取文章列表 (WebsiteAgent) Schedule Every 1d Keep events for 7776000 Propagate immediately true Disabled false

{
  "expected_update_period_in_days": "20",
  "url": [
    "http://chuansong.me/account/openmindclub"
  ],
  "type": "html",
  "mode": "on_change",
  "extract": {
    "url": {
      "css": "/html/body/div[2]/div[2]/div/div/div/div/div[3]/div[1]/div/div/div[2]/div/div[1]/div/div/div/div/div/div/h2/span/a",
      "value": "@href"
    },
    "title": {
      "css": "/html/body/div[2]/div[2]/div/div/div/div/div[3]/div[1]/div/div/div[2]/div/div[1]/div/div/div/div/div/div/h2/span/a",
      "value": "normalize-space(.)"
    }
  },
  "events_order": [
    [
      "",
      "number",
      "true"
    ]
  ],
  "template": {
    "url": ""
  }
}

3.微信公众号 #3 去除重复 (DeDuplicationAgent) Keep events for 15552000 Propagate immediately true Disabled false

{
  expected_update_period_in_days"20"
  lookback"0"
  property""
}

4.微信公众号 #4 获取单篇文章全文 (WebsiteAgent) Schedule Every 1d Keep events for 604800 Propagate immediately true Disabled false

{
  "expected_update_period_in_days": "20",
  "url_from_event": "",
  "type": "html",
  "mode": "merge",
  "extract": {
    "desciption": {
      "css": "#js_content",
      "value": "./node()"
    },
    "title": {
      "css": "#activity-name",
      "value": "string(.)"
    }
  }
}

5.微信公众号 #5 输出RSS(DataOutputAgent) Propagate immediately true Disabled false

{
  "secrets": [
    "kaizhi_public"
  ],
  "expected_receive_period_in_days": "20",
  "template": {
    "title": "开智学堂",
    "description": "开智学堂",
    "item": {
      "title": "",
      "description": "",
      "link": ""
    },
    "link": "http://chuansong.me",
    "icon": "https://res.wx.qq.com/mmbizwap/zh_CN/htmledition/images/icon/common/favicon22c41b.ico"
  },
  "ns_media": "true",
  "events_to_show": "300"
}

20180609-weixin-result

使用体验

Huginn 的使用需要一定的技术门槛,不过上述介绍的方法难度并不高。在接触 Huginn 的一段时间里,还是能够看到许多不足的地方,尤其是在所有的配置正确的情况下,需要不断重启刷新才能够启动 Agent ,也许是 heroku 不够稳定的原因。

此外Heroku部署Huginn 会出现 Heroku 无法打开,且免费服务还不能运行24小时的情况,使用 Heroku 部署 Huginn 并非长久之计,所以,有必要的话,可以购买VPS主机部署,感兴趣的话,可以参考VPS主机排行榜单

Huginn 的其他玩法

Huginn + IFTTT

参考

CHANGELOG

  • 20180609