Contents
  1. 1.
  2. 2.
  3. 3.

一切都从「即刻」正式发布3.0版本、推出的「自建提醒」的新功能开始..


话说这个新功能我好喜欢!即刻这个 app 我一直就很喜欢,因为内容分类得精细,推送的基本都是我想要看的,👍。我一直很好奇他们到底是怎么抓取信息的?新版本里头列举的追踪机器人类别其实已经暗示了实现方式了:

  • 微博用户发特定内容
  • 公众号文章更新
  • RSS订阅源有更新
  • 指定商品有优惠
  • 微博指定关键词新内容
  • 知乎专栏有更新
  • 闲鱼有特定新商品
  • B站UP主新视频
  • 淘宝店铺上新
  • 豆瓣某小组有特定新帖
  • 主流汽车论坛特定车型讨论
  • 知乎用户新回答
  • 分答用户新回答

我最关注的就是「RSS 订阅源更新」这个类别了(似乎是 02/13 才上线的😄)。几周前曾经因为没有第一时间看到推送而损失了一笔价值400刀+的潜在收益,还是很心痛的.. 于是第一时间就在即刻里加上了它!

另一个想到的是韩寒的「ONE·一个」app. 之前我会关注一个里的问题文章推送,在上学/班路上听一听。但是自从16年12月的某一天起,一个的 RSS feed 不能用了.. 我猜是官方停止支持了。我不想屈服于淫威、专门单独点开他们的 app, 就停止关注了很久。今天正好想起来,于是就打算自己制作一个问题专栏的 RSS.

首先,每一篇问题文章的 URL 都是 http://wufazhuce.com/question/1634 这样的格式,很好判断。于是我自然而然地想:RSS 能不能直接爬 “…/question/*” 这样的 URL 格式来爬文章。但是了解了一下,似乎 RSS 做不到这种。我或许可以自己写个爬虫周期地去爬最新的编号结尾的文章,不过好麻烦。RSS 的思路是从一个索引网页里去抽取信息,自动更新。正好,一个的首页上就有最新7个问题文章的索引!

反正我的初始目的是在即刻里建一个提醒,旧的那些历史就不要了,所以有这几个就足够了!


我在网上随手搜了下,http://feed43.com/ 能够快速制作 RSS Feed, 最终结果显示,确实可以,而且还挺容易!这里是官方的具体示例,具体步骤为:

  1. 标明索引信息网页的 URL, 对我来说就是 http://wufazhuce.com/

  2. 定义 extraction rules.

    1. 这些 rules 的基本书写原则就两条:

      1. { % } 表示要 extract 的信息;
      2. { * } 表示直接忽略的信息;
      3. 剩下的字符都是直接匹配。
    2. 要写的 rules 有两条:

      1. global search pattern, 这个是用来定义在哪里抽取信息的。如果不填就是 global. 对我来说,我只关心「问题专栏」,「文章专栏」就可以直接忽略了。因此看看网页源码就知道,只需要在出现了 <h4> ONE 问题 </h4> 之后搜索就可以了。这里头出现在句首的 {*} 仅仅是因为不这么写的话,会 somehow 匹配失败.. 我猜测是不同的 whitespace characters 造成的吧。

        1
        2
        3
        4
        5
        6
        7
        {*}<h4>{*}
        {*}ONE
        {*}问题
        {*}</h4>
        {%}
        <h4>App「一个」</h4>
        {*}
      2. item (repeatable) search pattern, 这个是 用来具体抽取信息的。索引列表里提供的仅仅只有标题+链接,我其实也只需要这俩就足够了。所以可以把 pattern 写成下边这样子。如果只看最新的那个的话,还可以根据其 CSS class name 来判断,会有一个 one-articulo-titulo 的 class. 不过反正多抽取几个也无所谓,RSS 工具应该会自动排序的(吧?)。

        1
        {*}<a href="{%}">{%}</a>{*}
    3. 这样就可以得到 这样的结果了。不同的 { % } 都已经编号好了,直接按自己的需求设置 RSS item 的 title / link 就可以了!

就这样了,生成一个第三方网站的 RSS 源是不是很简单!

对了,生成的 feed 在这里:「ONE · 一个」问题专栏最新更新。先看看实际运行效果怎么样吧。

另外,在看一个的网页源码格式的时候我发现,不知道为啥,他们的 CSS class name 用了西班牙语:

😂😂😂

Contents
  1. 1.
  2. 2.
  3. 3.
comments powered by Disqus