用 Shortcuts 导出 Safari 网页
<img src="https://imgproxy.citrusreader.com/VrmWU3eAZUMRl79Ocvb2qlpwICW0FLZW0aml6qsQHWY/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvaW1hZ2VzL0FydGJvYXJkX0NvcHlfMi5qcGVn" referrerpolicy="no-referrer"><br><p><font color="#008000">Claim:本文仅适用于 iOS 和 iPadOS,暂时不能用在桌面端,因为 macOS 13 Ventura 中的 Shortcuts 暂无本文所需模块。不过,我四年前已经为 macOS 提供了解决方案,你可以在文中相应的位置找到链接。</font></p> <p>导出 Safari 网页——无论书签、阅读列表还是当前打开的标签页——算得上一个古老的话题。整理书签,可顺手导出一份 Markdown 文档当备份;开了一堆标签页没读完,可导出待读清单,放诸备忘录;朋友问一个技术问题,可甩他一串参考网页,令其自助解决……然而,Safari 导出方式的阙如,和需求的存在一样古老。</p> <p>早在四年前,我就在两篇文章中介绍过一些思路,可惜数据来源是系统文件,需要使用 Python 脚本才能解析,算不上多么方便(你可以在 <a href="https://github.com/BlackwinMin/Automator-gallery/">这里</a> 下载到“Export Safari”开头的几个自动化动作);几年后,MacStories <a href="https://www.macstories.net/mac/exporting-links-from-safari-reading-list-via-shortcuts-for-mac/">写了</a> 一个基于 Shortcuts 的方案,结果和我的一样依赖系统文件,只是解析工具换成了 Shortcuts(快捷指令)。@Platy 君也写过一个基于 Safari 标签组的方案,比与系统文件鏖战好一点,但限制重重,还得先用标签组不可——起码我是不用这玩意儿的[^1]。</p> <p>简单说,MacStories 的方法跨 iOS(包括 iPadOS)和 macOS 两大平台,而我的旧方案限于 macOS,但我们都支持书签、标签页和阅读列表,功能齐全;而围绕 Safari 标签页的路子,虽然不限于某个平台,却只能导出眼前的标签页,力道不足。惟本文的方案可贯通 Apple 的各个平台,通吃书签、标签页和阅读列表三大数据来源,同时原理简单鲁棒、导出方式多变,颇具自定义空间。</p> <figure> <img src="https://imgproxy.citrusreader.com/qcf-UmCmRJv-mOwDN8cJyl1gkuSPwGke3SEz3uhulnE/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDQ0NTgwNS0xMDgweDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>导出阅读列表为 Markdown</figcaption> </figure> <h2>导出书签、标签页或阅读列表</h2> <p>在 2022 年秋季的 Shortcuts 以前,iOS 上鲜有获取 Safari 数据的途径,而 macOS 也需要对付系统文件,并且还是一场车轮赛,需逐个解决书签、标签页和阅读列表,完全是一场苦差事。不过,书签、标签页或阅读列表,以后都可以在 Shortcuts 中统一处理,此事新加入的“查找”相关模块居功厥伟。以下凡例从简,以导出 Safari 数据为 Markdown 格式为例,输出的数据直接拷贝到剪贴板。</p> <ul> <li><a href="https://www.icloud.com/shortcuts/ba947e70bc5a4828892539509a8423a6">Shortcuts 动作下载:导出书签为 Markdown</a></li> <li><a href="https://www.icloud.com/shortcuts/9ccc948a9a40432680228509b447e5c1">Shortcuts 动作下载:导出标签页为 Markdown</a></li> <li><a href="https://www.icloud.com/shortcuts/fee68d16159c4676abdda8c1c6a3014a">Shortcuts 动作下载:导出阅读列表为 Markdown</a></li> <li><a href="https://github.com/BlackwinMin/Shortcuts-Actions-gallery/tree/master/Export%20Safari">GitHub</a></li> </ul> <p>三个动作,除去数据来源,其他均一致,熟悉 Shortcuts 菜单模块的读者也可以将三者做到一个动作里面。以导出当前打开的标签页作为切入:</p> <ol> <li>直接运行 Shortcuts动作,选择需要的标签页——默认是选中全部网页,免得逐个点选。</li> <li>如标签页数量较多,也可以在运行后输入关键词,做一道过滤。查资料时常常打开一场串的标签页,其中可能只有几个确有必要导出,则可以一开始就用关键词将其滤出。</li> <li>稍等一两秒,Shortcuts 会将选中的网页转换为 Markdown 格式,即 <code>[标题](链接)</code> 形式,并送到剪贴板。</li> </ol> <figure> <img src="https://imgproxy.citrusreader.com/P3LqkQrIZiXB5IO_67dqJCUnB0LrwFm7ZC3OC7LTKeg/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDM0Mjk2MC0xMDgweDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>导出标签页为 Markdown</figcaption> </figure> <p>动作所涉步骤如下,不过是查找数据、手动选择与整理输出。下图动作最后导出的是 Markdown 格式,如果你需要更简单的纯文本,可将图中的 <code>- [标题](URL)</code> 改为 <code>- 标题 URL</code>,即删去两对括号。</p> <figure> <img src="https://imgproxy.citrusreader.com/Oz6O9jrNgaydA90CCHi_K1VYj1YFzZwVcAHii424o3U/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDQyNDM2OS05Nzh4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>导出标签页的步骤</figcaption> </figure> <p>比起用到的 Shortcuts 模块本身,可能两个元认知(metacognition)更重要:第一,要有过滤思维,即通过一系列预设条件获取数据,而不是守株待兔,等着别人做好现成动作;第二,则是要关注新版本 Shortcuts 中的模块,其自身也许不起眼,但很可能成为更大拼图的一部分。</p> <p>其实还有第三,那就是理解现成动作的边界何在,我就一直对以前的书签导出动作耿耿于怀,不满意其数据来源;唯有如此,在 Shortcuts 支持获取 Safari 数据后,一个探索在前缘的玩家才能就意识到——东风已至,万事俱备。</p> <h2>导出标签页到阅读列表</h2> <p>一旦理解了查找数据的模块,之后的事情不过就是修正数据格式,然后导入各种软件。直接拷贝到剪贴板系最简单的处置方式,此外还可以追加待读文章到备忘录、Obsidian 或 Logseq,或者通过 API 连通 Notion(只是举例,这些软件我几乎都不用,恕不能效劳)。除了将网页数据导出,其实也可以在 Safari 内部自产自销,比如把当前打开的标签页添加到阅读列表,留待稍后阅读。</p> <figure> <img src="https://imgproxy.citrusreader.com/_cE3XL6iUNxKjezo54v7QauSpf5ZcMBK-YJrKKNc-T8/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDUyMTkyNi0xMDgweDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>添加标签页到阅读列表</figcaption> </figure> <p align="center"><a href="https://www.icloud.com/shortcuts/4b3e4f2fbe7749e9b94754d7a1d89ce0">>> Shortcuts 动作下载:将标签页添加到阅读列表 <<</a></p> <p>这个 Shortcuts 纯属帮 iOS 版 Safari 修桥补路。不少人把阅读列表作为文章暂存区,按理说,一时半会儿读不完的网页,确实应当添加到阅读列表才是。桌面端的 Safari 就提供了批量保存选项,但在 iOS 上却只能把标签页保存为书签,而不是添加到阅读列表。</p> <figure> <img src="https://imgproxy.citrusreader.com/rlGny1Vh517CgMel5WdFaKHvq6UycEtRI4LUgi131Nk/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDMyODk0MS5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>macOS 上的 Safari 倒是可以批量添加标签页到阅读列表</figcaption> </figure> <p>用 Shortcuts 将标签页导入阅读列表的步骤相对简单,一开始也是用查找模块获取标签页,然后从中选取想稍后阅读的——难免打开得太多,要挑挑拣拣一番——加入阅读列表。在添加阅读列表项目时,Safari(或 Shortcuts)似乎会尝试缓存网页数据,每个页面都需要几秒钟时间,这点与提取 Markdown 格式的网页链接不同。</p> <figure> <img src="https://imgproxy.citrusreader.com/BIH8inun4luKBVj_0BIYKuBHH_0M6d5VHTjqhJtUzYw/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDYwMjM5MS01MDd4NzIwLmpwZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>添加标签页到阅读列表的步骤</figcaption> </figure> <p>当然,你可能有自己稍后读工具,或者更喜欢导出待读文章到备忘录或任务清单,这些都无妨本节动作充当一个示例,展示 iOS 16 中的 Shortcuts 如何与 Safari 交互。文章能直接为你充饥解渴当然很要紧,但钓鱼的工具,恐怕更重要。</p> <h2>小结</h2> <p>自 Workflow 被收购并更名 Shortcuts 以降,便不再推出强大的模块,诸如正则表达式、网页调试、SSH 等大名鼎鼎的工具,也均为上个世代的遗物。不过,这不意味着 Shortcuts 再无新意;在最近一版系统(iOS 16)中,新增的一系列查找模块打通了 Shortcuts 和系统软件之间的桥梁。Shortcuts 玩家不仅可以获取系统软件的数据,更可以添加过滤智能条件,macOS 上的骄傲——智能文件夹——被广泛运用于文件、照片、备忘录、提醒事项以及 Safari 浏览器,等等。</p> <p>Workflow 和 Shortcuts 过去的战场其实在于数据处理,不过经过几年的强度关山,相关问题几乎已经被玩家们消灭殆尽;现在的问题,其实在于数据的输入输出,即如何获取更多的系统软件数据,以及和更多的第三方软件连通。</p> <p>[^1]: 因为 Safari 的标签组功能远比其他浏览器粗躁,比如,如果你看了一眼标签组B,那么标签组A中的网页就会全部重新加载。这种设计,是远古 iOS 时代墓碑式后台机制的遗风,我无法认同。</p>