发布网友 发布时间:2022-10-11 14:59
共1个回答
热心网友 时间:2023-10-13 09:56
——写在文外:按本文内容操作需要一定动手能力,且准备工作稍复杂,但最终实现效果很便利,可以先看预览效果感受下。
自从去年重拾日语 (我相信读者都是理性的,我们只谈文化不谈*) ,基本每天都会在微信公众号 NewsWebEasy [^ NEWS WEB EASY]上看一篇日语新闻。文章内容虽然用的都是基础词汇,但仍会经常遇到生词。如何快速记录它们就成为一件棘手的事。更重要的是,记录不代表记住,如何复习也是个问题。
有读者应该已经想到,用 Workflow for iOS 这款效率App。嗯,我也确实这么做的,不过早期对 Workflow 功能浅尝辄止,自建的动作也比较低级,遇到生词复制后运行,跳出输入框,手动输入生词的假名、音调、词性和解释,同步到 Evernote。
至于复习,就是经常去翻看记录的生词。话虽如此,可是然并卵,首先是会忘记去看,其次随着记录的生词越来越多,打开后看见满满的生词也就不想看了ヾ(。 ̄□ ̄)ツ゜゜゜。
复制生词,通知中心运行 Workflow 动作,提取 沪江小D 上该词相关信息,通过 Quizlet [^ Quizlet] API 添加新的 Flashcard[^ Flashcard]。Flashcards App 根据记忆曲线提醒复习,每次只复习若干生词,再也不会被满屏生词 KO了。
首先预览下动作效果,给你看下去的动力。
先附上 Workflow 动作:动作一 Quizlet获取token ;动作二 日语生词添加Qz
Quizlet 官网注册普通帐号,打开 开发者网站 (需先认证注册邮箱) ,按注释填入表格申请 API Key。
申请完页面如下,后续用到 Client ID、 Redirect URI和 Secret Key。
Token Key 获取的详细流程和参数说明见 官方文档 。主要分为三个步骤:
【1】引导用户到授权服务器的授权入口。该步只需打开下面链接即可。其中 MY_CLIENT_ID就是前面获得的 Client ID;scope表示授权第三方的权利范围,分别为:read、write_set、write_group,这里需要可读写删除的 write_set权限;RANDOM_STRING是任意字符串,用于防止 CSRF 攻击 (我也不懂什么鬼) ,搞个随机数即可。
【2】打开上述链接后询问是否授权访问 Quizlet 账户,允许后会转到 Redirect URI 指定的链接并附上 code参数。复制该链接并用正则表达式提取 code。Workflow 动作一运行如下图,授权跳转页面后拷贝(原则上来说,还需要校验传回来的 state 参数是否和第一步传给服务器的一致,避免 CSRF 攻击 。)
【3】向服务器请求 Token 。POST信息按官方要求填入即可。其中 Authorization一栏内容为 Basic base64-encoded(Client ID:Secret Key),该值可自行转换,也可用官方转换好的,详见 该页面 Step 2中的表格最后一行。
动作一会把获取到的 Token复制到剪贴板,把该值粘帖到第二个 Workflow 对应项即可。
本文是针对日语单词,如果是其他语种词汇,尤其是针对英语,各类词典 API 还是很丰富的。英语词汇可考虑添加生词到扇贝服务器, 详见此文 。
目前沪江小D未开放查询 API,只能曲线救国,提取查询后的网页信息。沪江小D 查询链接为 http://dict.hjenglish.com/jp/jc/ 中国,利用 Get Contents of URL获取网页内容,假名ちゅうごく,音调①、词性和释义都在了。
经过多次测试对比,假名和词性都用“【】”包含,而音调都在罗马字发音 (图中为【chuugoku】)后面,释义最好获取详细释义后面的第 1、2 条(因为有些词语【词性】后面没有释义)。
利用正则表达式分别提取需要的内容,表达式具体写法见 Workflow 动作,不再赘述。需要说明的是:
(1)当网页中“【】”一组也没有时表示未查找到词语信息,需要一个 If来判断。
(2)最近更新的魔法变量(Magic Variable)虽然能简化流程,但本动作需要提取多个信息,且需多次用到,如果全部用魔法变量反倒不方便不直观。
(3)动作中设置了 Show Notification,便于确认查到的信息,毕竟不是官方 API 支持,有些不常见的生词无法用正则表达式获取到正确的信息。
利用 Get Contents of URLPOST 词汇信息到 Quizlet 服务器。其中,Authorization一栏填入动作一中复制的 Token。term和 definition可以理解为抽认卡的正反面。
图中 URL 链接如下,其中 187957966是要上传的 Flashcards 组 ID (不然服务器不知道你要把新的 Flashcards 添加到哪) 。
如何获取该 ID 呢,打开 API test 页面
直接点击蓝色按钮 Send API Request,
弹窗中可以找到 ID,其中 title 对应组名,双字节字符会重新编号,不易辨认。
Flashcard 上传成功后会有通知提示,其中仅供参考表示沪江小D对该词仅有基本解释,无发音等信息,一般多为专属词。仅供参考词语不会添加到 Flashcards。
需要说明的是,因为非官方 API 支持,所以查询结果有时会有小 BUG,如果出现烦请告知我。
可以看到,【中国】这个词语相关信息已经添加到 Quizlet 了。
可以选择官方的 Quizlet,好处是添加新的生词后刷新下就可以学习了。但我个人在用 Flashcards Deluxe,可设置的选项和主题比较丰富,缺点是需要手动更新 Flashcards,如图。第三张图片意思是:词语会被新的替代,但学习进度保留。
显示效果下图
获取了Quizlet 账户完整权限,其实可以作一个寄生于 Workflow 的小程序,除了添加、还可以删除、修改,甚至对 Flashcards 批量操作。更多操作请求方法见 官方示例 。
Workflow 是个了不起的应用,不断更新使得 iOS 能力有了更多可能性。
在编写本文 Workflow 动作时,也学到了很多新知识,比如正则表达式, OAuth 授权流程。因为不懂 HTTP 请求,在获取 Token 时走了很多弯路,当经过一番努力后突然明白了解决了,这种成就感和喜悦之情真是难以言表,简直太棒了。我想这就是人类不断探索进取的源动力之一。
本文 Workflow 动作适合在 iPhone 或 iPad 上阅读新闻使用,如何把电脑上浏览时的日语生词,快速 & 批量添加到 Quizlet 生成 Flashcards 呢。这个还是看大家对本文的反馈吧,人少就没必要发了。
[^ NEWS WEB EASY]: NEWS WEB EASY やさしい日本语のニュースです,类似 VOA 慢速英语,NWES WEB EASY 发布的新闻都是用简单词汇和基础语法,便于日语初学者和日本小学生阅读。
[^ Quizlet]: 在线 Flashcards 网站,提供 iOS 和 android 客户端。
[^ Flashcard]: Flashcard,即抽认卡 。