本文首发于少数派,转载于个人博客
前言
时至 2021 年中,相信「信息过载」这一说法已经成为共识,而「信息焦虑」、「信息茧房」这样词汇的出现及其背后的缘由往往加深了我们的焦虑和迷茫。但我要说,作为第一代「数字公民」(不远的未来可能还将进化为「赛博公民」),我们确实面临着信息爆炸的现实,可是并非对此束手无策,也并非没有处理海量信息的能力。
我们要做的,应当是在不断的实践中摸索出一套完善且可持续的解决方案。多年以前,我就认为,每一个当代「数字公民」都需要一个「副脑」,这一构想与 ForteLabs 的作者 Tiago Forte 提出的「第二大脑」概念不谋而合。在我的构想中,「副脑」的定位是「个人信息处理助手」,其初级形态应当是一套自动化辅助系统,也就是文章将要探讨的,至于高级形态,囿于自身眼界与时代局限,目前我仅能设想为一个搭载基于自动化的或更高级形态的 AI 的个人终端设备。
注:本文写于 2021 年,是结合当下背景、已有信息及笔者自身知识水平的创作,旨在分享经验、抛砖引玉。本文不存在任何推广行为,提及的一切服务均为笔者自用,如有其他想法请根据文章叙述寻找替代品。
主动与被动之争
尝试回忆一下,十几年前,互联网的信息检索途径是什么样的?
而十几年后,互联网的信息检索途径又发生了什么改变?
很明显,算法改变了这条途径,并取代了原本人工干预的筛选过程。技术的革新使得巨头们能够通过网页上植入的跟踪代码基于用户在互联网上的留痕生成「用户画像」。它是一系列标签的集合,算法利用这些标签,精准投放信息给目标用户。算法是如此强大,甚至比你更懂你自己,用户不再需要自己筛选信息,只需要接受推送就可以了。但在获取这种便利的同时,用户付出的代价就是将信息获取的主动权拱手交给平台1。
那么,有没有方法能在充斥算法的互联网环境中重新掌握主动呢?有,答案是 RSS。
RSS 原意为资源描述框架站点摘要(RDF Site Summary),后演变为简易信息聚合(Really Simple Syndication),是一种消息来源格式规范,用以聚合网站内容更新。RSS 作为早期互联网的产物,随着互联网巨头的快速崛起、信息壁垒的建立,并以 2013 年 7 月 15 日 Google Reader 的服务终止为节点,作为一种「过时」技术濒临消亡。但幸运的是,RSS 在互联网浪潮的冲击下,虽然经历了式微的低谷,依然有一批信仰互联网精神的用户坚守到迎来复兴。
它和算法的本质区别在于:RSS 是信息消费者主导的「主动信息聚合」,算法是信息生产者主导的「被动信息聚合」。 而这,正是选择之争。
构建整体框架
如果你和我一样,选择了自己掌握信息获取的主动权。RSS 应该是无法绕过的一个技术,可能也是综合考量后的唯一选择。那么事情就很明朗了 —— 围绕 RSS 构建整体框架。
首先要明确的是,「信息体系」之所以被称作「体系」,是因为这是一个由各个部分相互关联形成的整体,一个不依赖于外部环境运作的系统。在使用过程中,用户应尽可能少地对框架本身进行操作,而将更多的精力用于信息内容本身,其余无需操心。因此,我将这套体系主要分为三个部分:「输入模块」、「处理模块」和「输出模块」,如下图所示:
构建输入模块
在讨论输入模块的构建之前,先简单列举一下可能输入的常见信息类型:
- 传统媒体 / 新媒体(纸媒官网、公众号等)
- 博客 / 论坛(公司或团队博客、个人博客、贴吧、V2EX 等)
- 社交媒体(Twitter、Instagram、微博、知乎、即刻等)
- 流媒体(YouTube、Bilibili、Spotify、Netflix 等)
- 其他来源(邮件通讯等)
信息类型不少,同时传统媒体、博客的 RSS 支持度较好,而其他类型则往往不提供 RSS 支持。
信息转化
如何将不同信息类型转化为统一的 RSS 格式支持?
这个任务我交给了 RSSHub 来完成,当然,你也可以使用 Huginn 作为其替代。RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容。
RSSHub 的搭建并不复杂,文档提供了多达 7 种部署方式。如果你有一定的技术背景,「Docker 部署」或「Docker Compose 部署」能更好地适应你的需求;如果你是小白,「一键部署至 Heroku」或 「一键部署至 Vercel」也会是简单易用的方案;即使你对代码完全不感冒,官方也提供了一套可用服务供用户选择2。
下面是几个实例:
- 你想关注 Benedict Evans 的博客更新,但发现其并不支持 RSS:
可以通过 RSSHub 提供的路由来抓取 rsshub.app/benedictevans - 你想关注陈睿在 Bilibili 的追番列表:
可以通过 RSSHub 提供的路由来监控 rsshub.app/bilibili/user/bangumi/208259 - 你想关注 V2EX 上的热帖:
可以通过 RSSHub 提供的路由来查看 rsshub.app/v2ex/topics/latest
信息聚合与展示
RSSHub 搭建好了,也收集了不少关注内容的链接,那么要在哪里将其聚合并展示呢?
RSS 订阅服务会是一个好选择。我的最佳实践是 Inoreader,当然你也可以使用 Feedbin 等服务作为替代。
Inoreader 支持三种信息订阅方式:
- RSS
基础的 RSS 链接订阅 - 邮件通讯
Inoreader 支持设置以incoming-
开头的邮箱作为你的邮件通讯收件箱,你只需要将其填写在你想订阅的邮件通讯的输入框中,即可在 Inoreader 收到邮件通讯。不但信息聚合在了一处,还保持了个人邮箱的整洁。 - 社交媒体
Inoreader 引入了社交订阅源的概念,支持绑定 Facebook、Twitter、VK、YouTube 账户,并导入你关注的内容作为信息源。
下面只需进行三步:
- 将 RSSHub 抓取的 RSS 内容链接添加为订阅源
- 在想订阅的邮件通讯中填写 Inoreader 提供的
incoming-
邮箱 - 绑定社交媒体账户,导入订阅源
于是,前文列举的常见信息类型均可聚合到 Inoreader 进行展示并阅读,信息体系的输入模块就构建完成。
构建输出模块
等等,不是还有处理模块没谈吗?是的,但是「处理模块」相较于「输入模块」和「输出模块」具有更强的主观性,是一套依据个人因素形成的信息筛选原则,而非通过各类外物构建的框架。如果诸位有兴趣,我今后会谈谈关于这套原则的一些经验,本文就不再展开了。
经过信息输入、处理的过程,我们已经完成了对经过筛选的有价值的信息内容的阅读,但完成阅读并不是信息体系的终点,还需要对这些信息进行归档、整理,乃至分享、创作。
根据构想,这项任务主要由自动化服务来完成。自动化服务是一系列基于触发条件自动执行的任务的整合方案,不同的服务提供商提供了不同的任务组织方式、用户可控精度以及自动化执行频率等等。Inoreader 支持简单的基于规则的工作流,但并不能满足更多样化的需求,仅适合作为模块主体的前置。而市面上的自动化整合服务很多,IFTTT、Zapier、Automate.io 等都是知名产品,但我的选择是 Integromat。它功能丰富且稳定性好,是 Zapier 的强大且更实惠的替代品,也是较 IFTTT 更优质服务的提供者。本文将会以一个实例 —— Inoreader 标星文章发送到 Telegram 频道 —— 介绍如何通过 Integromat 实现信息输出模块。
首先,在 Inoreader 的规则设置中新增一个「标星文章」的工作流如下图所示:
可以看到,此工作流在触发「新的标星文章」条件后完成了以下几个任务:
- 发送至 email
这里填写的是滴答清单的专属邮箱,发送到该邮箱的内容会自动在滴答清单收集箱中创建任务(OmniFocus、2Do 等也有类似功能)。
- 触发 Webhook
这里填写的是 Integromat 的 Webhook 链接,触发后将自动发送数据到 Integromat 供下一步操作调用。 - 广播、推送通知
在 Integromat 中,我们新建一个 Scenario,初始步骤搜索 Inoreader 并选择 Watch Webhook Triggers。如果你之前已关联过 Inoreader 账户并创建了 Webhook,可以在 Webhook 栏内选择对应选项;如果没有可选项,点击 Add 按钮,在右侧 Add a hook 对话框 Connection 栏绑定 Inoreader 账户并填写名称完成 Webhook 创建:
创建完成后,在左侧 Webook 栏选中此项,下方 https://hook.integromat.com/...
链接即为 Webhook 地址,点击 Copy address to clipboard
复制,并将其填入 Inoreader 规则的对应输入框中即可完成对接。
Inoreader 触发 Integromat 的 Webhook 链接后,其数据将以预设格式发送至 Integromat。接下来,如法炮制,添加一个 Telegram - Send a Text Message or a Reply 模块,并创建一个 Telegram Webhook
其中 Token 需要在 Telegram 中使用 @BotFather 创建一个机器人来获取。接着,将此机器人作为管理员添加到你的公开群组或公开频道,并将群组或频道的 username 填入 Chat ID 栏中。
然后在下方的 Text 栏中,填入如下内容,并将 Parse Mode 选项设置为 HTML。当然,你也可以根据你的喜好设置为 Markdown 或更改内容样式。设置完成后,点击界面左下角的 Run Once 按钮:
由于 Inoreader - Watch Webhook Trigger 模块默认是基于事件立即触发的,不存在轮询间隔,Integromat 此时会挂起等待,直到触发一次事件并执行。
此时,前往 Inoreader 对文章进行标星操作,并检查 Integromat 是否按预期执行操作,如有警告或报错,根据提示进行修正即可。
这样,一个 Inoreader 标星文章发送到 Telegram 频道的「输出组件」就完成了。将你所能设想到的输出需求,以「输出组件」的方式像乐高积木一样构建出「输出模块」。自此,「信息体系」的整体框架就构建完成。
实例展示
向诸位展示我的「信息体系」框架蓝图,以供参考:
如果你愿意查看更多展示,可以:
- 访问我的 Telegram 频道
- 访问我的 Inoreader 广播
最后,非常感谢您的阅读。原计划本文会作为多篇发布,但思虑再三还是整合到一篇完成,对冗长的行文感到抱歉。如果我的文章对您有所帮助,还请不吝评论收藏转发,这是对我最好的支持和鼓励。