article_image

Claim:本文仅适用于 iOS 和 iPadOS,暂时不能用在桌面端,因为 macOS 13 Ventura 中的 Shortcuts 暂无本文所需模块。不过,我四年前已经为 macOS 提供了解决方案,你可以在文中相应的位置找到链接。

导出 Safari 网页——无论书签、阅读列表还是当前打开的标签页——算得上一个古老的话题。整理书签,可顺手导出一份 Markdown 文档当备份;开了一堆标签页没读完,可导出待读清单,放诸备忘录;朋友问一个技术问题,可甩他一串参考网页,令其自助解决……然而,Safari 导出方式的阙如,和需求的存在一样古老。

早在四年前,我就在两篇文章中介绍过一些思路,可惜数据来源是系统文件,需要使用 Python 脚本才能解析,算不上多么方便(你可以在 这里 下载到“Export Safari”开头的几个自动化动作);几年后,MacStories 写了 一个基于 Shortcuts 的方案,结果和我的一样依赖系统文件,只是解析工具换成了 Shortcuts(快捷指令)。@Platy 君也写过一个基于 Safari 标签组的方案,比与系统文件鏖战好一点,但限制重重,还得先用标签组不可——起码我是不用这玩意儿的1

简单说,MacStories 的方法跨 iOS(包括 iPadOS)和 macOS 两大平台,而我的旧方案限于 macOS,但我们都支持书签、标签页和阅读列表,功能齐全;而围绕 Safari 标签页的路子,虽然不限于某个平台,却只能导出眼前的标签页,力道不足。惟本文的方案可贯通 Apple 的各个平台,通吃书签、标签页和阅读列表三大数据来源,同时原理简单鲁棒、导出方式多变,颇具自定义空间。

Alt text
导出阅读列表为 Markdown

导出书签、标签页或阅读列表

在 2022 年秋季的 Shortcuts 以前,iOS 上鲜有获取 Safari 数据的途径,而 macOS 也需要对付系统文件,并且还是一场车轮赛,需逐个解决书签、标签页和阅读列表,完全是一场苦差事。不过,书签、标签页或阅读列表,以后都可以在 Shortcuts 中统一处理,此事新加入的“查找”相关模块居功厥伟。以下凡例从简,以导出 Safari 数据为 Markdown 格式为例,输出的数据直接拷贝到剪贴板。

三个动作,除去数据来源,其他均一致,熟悉 Shortcuts 菜单模块的读者也可以将三者做到一个动作里面。以导出当前打开的标签页作为切入:

  1. 直接运行 Shortcuts动作,选择需要的标签页——默认是选中全部网页,免得逐个点选。
  2. 如标签页数量较多,也可以在运行后输入关键词,做一道过滤。查资料时常常打开一场串的标签页,其中可能只有几个确有必要导出,则可以一开始就用关键词将其滤出。
  3. 稍等一两秒,Shortcuts 会将选中的网页转换为 Markdown 格式,即 [标题](链接) 形式,并送到剪贴板。
Alt text
导出标签页为 Markdown

动作所涉步骤如下,不过是查找数据、手动选择与整理输出。下图动作最后导出的是 Markdown 格式,如果你需要更简单的纯文本,可将图中的 - [标题](URL) 改为 - 标题 URL,即删去两对括号。

Alt text
导出标签页的步骤

比起用到的 Shortcuts 模块本身,可能两个元认知(metacognition)更重要:第一,要有过滤思维,即通过一系列预设条件获取数据,而不是守株待兔,等着别人做好现成动作;第二,则是要关注新版本 Shortcuts 中的模块,其自身也许不起眼,但很可能成为更大拼图的一部分。

其实还有第三,那就是理解现成动作的边界何在,我就一直对以前的书签导出动作耿耿于怀,不满意其数据来源;唯有如此,在 Shortcuts 支持获取 Safari 数据后,一个探索在前缘的玩家才能就意识到——东风已至,万事俱备。

导出标签页到阅读列表

一旦理解了查找数据的模块,之后的事情不过就是修正数据格式,然后导入各种软件。直接拷贝到剪贴板系最简单的处置方式,此外还可以追加待读文章到备忘录、Obsidian 或 Logseq,或者通过 API 连通 Notion(只是举例,这些软件我几乎都不用,恕不能效劳)。除了将网页数据导出,其实也可以在 Safari 内部自产自销,比如把当前打开的标签页添加到阅读列表,留待稍后阅读。

Alt text
添加标签页到阅读列表

>> Shortcuts 动作下载:将标签页添加到阅读列表 <<

这个 Shortcuts 纯属帮 iOS 版 Safari 修桥补路。不少人把阅读列表作为文章暂存区,按理说,一时半会儿读不完的网页,确实应当添加到阅读列表才是。桌面端的 Safari 就提供了批量保存选项,但在 iOS 上却只能把标签页保存为书签,而不是添加到阅读列表。

Alt text
macOS 上的 Safari 倒是可以批量添加标签页到阅读列表

用 Shortcuts 将标签页导入阅读列表的步骤相对简单,一开始也是用查找模块获取标签页,然后从中选取想稍后阅读的——难免打开得太多,要挑挑拣拣一番——加入阅读列表。在添加阅读列表项目时,Safari(或 Shortcuts)似乎会尝试缓存网页数据,每个页面都需要几秒钟时间,这点与提取 Markdown 格式的网页链接不同。

Alt text
添加标签页到阅读列表的步骤

当然,你可能有自己稍后读工具,或者更喜欢导出待读文章到备忘录或任务清单,这些都无妨本节动作充当一个示例,展示 iOS 16 中的 Shortcuts 如何与 Safari 交互。文章能直接为你充饥解渴当然很要紧,但钓鱼的工具,恐怕更重要。

小结

自 Workflow 被收购并更名 Shortcuts 以降,便不再推出强大的模块,诸如正则表达式、网页调试、SSH 等大名鼎鼎的工具,也均为上个世代的遗物。不过,这不意味着 Shortcuts 再无新意;在最近一版系统(iOS 16)中,新增的一系列查找模块打通了 Shortcuts 和系统软件之间的桥梁。Shortcuts 玩家不仅可以获取系统软件的数据,更可以添加过滤智能条件,macOS 上的骄傲——智能文件夹——被广泛运用于文件、照片、备忘录、提醒事项以及 Safari 浏览器,等等。

Workflow 和 Shortcuts 过去的战场其实在于数据处理,不过经过几年的强度关山,相关问题几乎已经被玩家们消灭殆尽;现在的问题,其实在于数据的输入输出,即如何获取更多的系统软件数据,以及和更多的第三方软件连通。


  1. 因为 Safari 的标签组功能远比其他浏览器粗躁,比如,如果你看了一眼标签组B,那么标签组A中的网页就会全部重新加载。这种设计,是远古 iOS 时代墓碑式后台机制的遗风,我无法认同。

author_avatar

Lawyer, macOS/iOS Automation Amateur