今年 6 月,我有幸成为中国 WWDC Scholarship Winner 中的一员,前往圣何塞参加 WWDC2019。在这次的开发者大会中,全新的 Reminder 随着 iOS13 一起亮相,全新设计的 Reminder 在 UI 上满足了我对一款 GTD 应用最基本的要求。
关于 Reminder 更新后的一些特色,可以阅读文刀漢三的回炉重造的提醒事项,能否成为我们的主力任务管理工具?| WWDC 特刊
其中,Reminder 在创建一个任务时,可以添加 URL,没有太留意在此之前是否可以,于是我便想到了是否可以借此打造一个自己的阅读管理。
前不久,出于某些考虑,准备购买 Power+,发现 2.0 已经更新了大概 170 多篇文章,想着把这些文章分配到每一天来看。自己又是一个程序员,于是准备用代码快速地将这些文章添加到待办事项中。
Step 1 获取全部文章
通过 Chrome 的检查可以看到这一段网页的 HTML 源码,我们将我们需要的这一段文章目录的 HTML 源码复制到代码编辑器中(这里强烈推荐 Visual Studio Code),并保存为sspai.html。


这里对于我们有用的代码就是不断重复出现的 <a></a>,这就是每一个超链接的表示方法,其中 href 是对应超链接的 URL 连接,即每篇文章的地址,标签之间的文字就是我们每篇文章的标题,这两个是我们需要的。
接下来,我们需要使用超厉害的 python 来提取这两个元素。这里我们用到的关键技术是正则表达式,这在文本查找匹配中是一个非常有用的技能,推荐大家去学习一下。
我们先来看一下如何使用正则表达式从这一个 <a></a> 标签中获取 url 链接和标题。

.* 表示匹配所有字符,用括号括起来可以作为一个整体,在之后的 python 脚本中可以直接通过分组的方式拿到这个值。
知道了正则表达式的表达,我们来看看怎么在 python 代码中表示:

接下来要考虑把所有的这样的标签都找到,原理是一样的。

于是,titles 和 urls 保存了所有的文章标题和文章链接。
Step 2 使用 AppleScript 创建待办事项
通过 AppleScript 可以批量创建任务,首先设置两个 list,分别为我们刚才得到的 `titles` 和 `urls`,需要注意的是,直接复制过来时,需要将中括号改成大括号:
set titleList to {“…”, “…”}
set urlList to {“…”, “…”}然后就是使用循环进行创建
repeat with i from 1 to length of titleList
set title to item i of titleList
set articleUrl to item i of urlList
tell application "Reminders"
set mylist to list "少数派"
tell mylist
make new reminder at end with properties {name:title, body:articleUrl}
end tell
end tell
end repeat
将所有的文章添加到 “少数派” 这个提醒事项列表中,执行脚本即可

缺陷
可惜的是,似乎 Apple 还没有开放待办事项中添加 URL 的接口,所以目前只能将链接放到备注中,希望苹果早日开放这个接口。
其他场景
还有其他的场景,比如你在使用 iOS 上 Safari 看文章,看到一篇不错的文章,但是现在没有时间,想安排到之后再来阅读,便可一下快速的添加到待办事项中:

如果你在 PC 电脑上看文章,Windows 没有 Reminder 怎么办?没关系,搭配 Chrome 的 The QR Code Extension 插件也是有很便捷的方法的:

其他一些想法
有时候,在阅读一本书的时候,想要将书按章节分配到任务,但是又不想自己一个一个添加,其实也是可以通过这种方式来创建,如果仅仅想添加那种第几章第几节这样的,通过上面这样循环的脚本可以实现,如果想包括章节名称,我的想法是通过 OCR 获取目录,然后处理以后进行批量添加。
一个小广告
我前段时间写了一个小应用,是一个番茄钟应用,通过对 Reminder 的扩展可以选择 Reminder 中的任务,为选中的任务创建番茄钟,记录每个任务专注的时间,更具体的介绍可以查看我的这篇文章,有兴趣的同学可以了解一下。
