在 《在线阅读处理流程:从需求、到方法、再到工具》 里我列了一个与大多数人不太合拍的、相对更严格的需求——如果需要可以在最短时间内找到我需要的文章。这个需求最初只是为了满足在和别人聊天或写文章引用时可以很快地追到出处,尽量准确地说明文章内容。但在今天又出了一个新的情境,并随之衍生出了新的有趣的用法。
一开始是有人问我 TextExpander 这款软件的用法。本来我打算一点一点细说,但觉得实在浪费时间,考虑到对方学习能力也不差,我就在想怎么把自己 Pocket 里读 / 攒的 30 篇关于 TextExpander 导出来一并发给他。
基础解决方法
第一个想到的工具自然是 Workflow,因为我记得 Workflow 里个动作是从 Pocket 中获取项目:
找到这个项目以后惊喜地发现它可以选择未读的文章或是归档过的文章,也可以选择标签。那这样就齐活了,因为关于 TextExpander 的文章我早就全部放在了同一个标签之下。
下一步要考虑的是如何把这些文章批量导出。熟悉 Workflow 的朋友肯定已经有了思路。在这个 Workflow 里有一个在从前教程里我没有系统提过的,却又很重要的动作——Repeat with Each 正好放在一起来说。
当我们通过 Workflow 获取所有满足预设要求的 Pocket 文章时,获取的结果是一种“集合”的形式,每一篇文章都是其中的一项。所以你跑完动作获取的结果里,会看到「1 of 30」这样的字样。而我们的目的是最后把这些链接,以下面这种形式保存到我们想保存的地方:
那么,我们要做的事被分成了这些步骤:
- 获取每篇文章的标题
- 获取每篇文章的链接
- 在每篇文章前加上序号
- 把上面三项按照每行
序号. [标题](链接)
的形式放到一个文档内 - 把这个文档上传到任何地方
这里最难的是前四项,但其实只要很短的动作就能解决:
首先看这些要求里,有好多「每」字。一般一个 Workflow 里只要涉及这个「每」字,一般都会用到 Repeat with Each
这个动作:
这个动作就是对上一个集合中的每一项都做同样的处理,而处理的方式由 Repeat with Each
和 End Repeat
之间的动作决定。
第一个要求是获取每篇文章标题,我们可以直接用 Get Name
来获取。一般来说,Get Name
这个动作之前要接的是链接或者文件,也就是说它上一个动作里的东西,应该有个 Name,它才能 Get name。但是这里你会发现我是直接接的 Repeat with Each
。这里能这样做的原因是,从 Get Items from Pocket
这个动作里拿到的本身就是链接而且只有链接,所以我们可以接 Get Name
来获取链接内文章的标题。
第二步要获取每篇文章的链接,这个我们其实已经做了,我们这个 Repeat 的动作里,每一次都从上一个动作里接收了一个链接。也就是说,被 Repeat 的内容本身就是链接,所以我们在这里可以用到一个取巧的方式——直接用 Repeat Item
来做变量。这样一来,文章链接也获取完毕了。
第三步是获取序号。在涉及到重复的动作里,除了上面提到的 Repeat Item
以外,还有一个自带的变量是 Repeat Index
,它的意思是被重复的次数那个次数的数字,比如某一项是第 5 次被重复,那它的 Index 就是 5。所以说在这里,序号问题也解决了,就是 Repeat Index
。
第四步要把这些内容按照一定的格式放到一个文档内。首先格式很简单了,我们接一个文本框,把该放进去的东西放进去就好。不过下一步很多新手会出错,因为新手很容易忘记我们现在是针对 Pocket 导出的文章中每一篇文章做同样的操作,它进来的时候是多个文本的合集,出来之后还会是多个文本的合集。所以我们现在要把多个文本,合并到一个文本文档里,这就需要使用 Combine Text(合并文本)
这个动作,这个动作经常在这种情境下与 Repeat with Each
配合。
第五步我们要把文件上传了。这个就很随意了,如果你要把文本上传到 Dropbox,就可以接 Dropbox 的动作;要传到 iCloud 就可以接 Save File…
没主意也可以接 Share
到时候再选。
优化分享结果
不过这里我想介绍一个相对更容易分享给他人的办法——上传到 Cloudapp。毕竟导出多篇文章,还搞得格式挺好看,就是为了给别人看嘛。
我们在前面已经严格按照 Markdown 的格式生成了这个文本文档,现在想让它好看,链接可点,我们要做的是把这个 Markdown 变成能点击的富文本,再给它个标题,上传到 Cloudapp,再把链接复制到剪切板。
把 Markdown 变成富文本的动作是 Make Rich Text from Markdown
,给任何文件新加标题的动作是 Set Name
,上传到 Cloudapp 的动作是 Upload to Clipboad
,在下面再接一个 Copy to Clipboard
就能把生成的分享链接复制到剪切板了。也就是说,你先把文章的数量选好,再跑一下这个 Workflow 的动作。所有的文章就会按照你的要求放在一个文本文档里,然后你只需要打开你的通讯应用粘贴一下,就可以把它分享给任何一个人。(下载这个 Workflow)
最后附上导出的文章的效果图:
图里的空白部分是文章的标题没被抓到,但链接是存在的。如果需要的话,通过 Workflow 也可以把没有抓到标题的链接的标题部分取消,单独只显示链接部分。我在以往写过的教程里提到的内容足够让你做到这一点,有兴趣可以看一看试着解决一下。
为什么不能用 Instapaper 完全实现这个动作
你可能会问,Instapaper 能不能做到这一点。能做到倒也能做到,但解决方法不算理想。Instapaper 的分享动作除了获取书签数以外只有一个选择就是文件夹:
这个问题还不是那么好解决,这算是 Instapaper 的结构问题。在 Instapaper 里,Archive 实质上也是个文件夹,你不管把文章放在了哪个文件夹,只要把文章归档(Archive)了,这个文章就会丧失它原有的文件夹属性,从原文件夹移动到归档文件夹。所以如果想做到批量导出文章,你只有把读过的文章放在文件夹里不要归档它。