——寫在文外:按本文內容操作需要壹定動手能力,且準備工作稍復雜,但最終實現效果很便利,可以先看預覽效果感受下。
自從去年重拾日語 (我相信讀者都是理性的,我們只談文化不談政治) ,基本每天都會在微信公眾號 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 查詢鏈接為 /jp/jc/ 中國 ,利用 Get Contents of URL 獲取網頁內容,假名ちゅうごく,音調①、詞性和釋義都在了。
經過多次測試對比,假名和詞性都用“”包含,而音調都在羅馬字發音 (圖中為chuugoku)後面,釋義最好獲取 詳細釋義 後面的第 1、2 條(因為有些詞語詞性後面沒有釋義)。
利用 正則表達式 分別提取需要的內容,表達式具體寫法見 Workflow 動作,不再贅述。需要說明的是:
(1)當網頁中“”壹組也沒有時表示未查找到詞語信息,需要壹個 If 來判斷。
(2)最近更新的 魔法變量(Magic Variable) 雖然能簡化流程,但本動作需要提取多個信息,且需多次用到,如果全部用魔法變量反倒不方便不直觀。
(3)動作中設置了 Show Notification ,便於確認查到的信息,畢竟不是官方 API 支持,有些不常見的生詞無法用正則表達式獲取到正確的信息。
利用 Get Contents of URL POST 詞匯信息到 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,即抽認卡 。