基於Notion 的筆記寫作和部落格分享自動化方案
個人認為,筆記(Note)、寫作(Writing)和分享(Share)是筆記是知識元素,寫作是知識匯總,分享是知識昇華。固然每個人具體實踐的方式會盡不相同,不過大家應該都或多或少能對體會其中存在的一些割裂感:
其一,筆記存在多端同步編輯的剛需。不過隨著雲筆記解決方案越來越成熟後,這問題現在已經有許多解決方案。其二,筆記草稿和寫作正文之間的同步存在許多機械的地方:同一篇文章經常需要在草稿和正文(終稿)之間來回修訂,而大部分情況下這兩者的同步是通過複製粘貼和人工比對來完成的,這個過場是寫作體驗主要的割裂感之一。其三,寫作正文完成之後的文章分享(Publish)也是一個麻煩的流程,儘管現在許多靜態部落格可以通過自動化技術完成部署,不過文章正文內容和部署用的MarkDown 源文件之間的數據同步也是個非常頭疼的事情:如果正文和MD 文件分開處理,兩者之間只能手動同步;如果直接用MD 文件來寫正文,又不得不面臨現在多數雲筆記糟糕的MD 文件編輯體驗(而且MD 文件能否導出還是個未知數);如果乾脆使用gitbook 之類的方案來編輯MD 文件,那基於git 的筆記云同步方案體驗也不會好到哪。
自從改用靜態部落格代替WordPress 來發表自己的文章、文檔後,我不得已採用”雲筆記寫草稿,MD 文件保存文章正文,手動在草稿和正文之間同步“這樣的
幾番苦尋更好的雲筆記體驗方案,未果。直到ta 的出現:
Notion
Notion基於巧妙和獨特的文本元素關係設計,Notion 可以將你的Notes、Project Tasks / Plans、Doc / Wikis 等統統整合起來(還提供許多優秀的Template 以滿足不同的文檔需要),在ta 身上我看到了知識管理和項目管理的“大一統”的希望。
簡單來說,Notion 拋棄了傳統以段落(paragraph)為原子單位的做法,而是將所有的一切都當做Block(是Everything is Block)。一段文本是一個TextBlock,一張圖片也是一個ImageBlock,Block 之間可以隨意移動和嵌套。同時Notion Block 被巧妙地設計成組合模式:一個Block 可以是單一的Block 也可以是BlockGroup。這使得Notion 可以滿足幾乎所有的文本關係,一片文章本身就是一個PageBlock,PageBlock 即可以包含各種類型Block 也可以包含BlockGroup(用來存放Table、Columns 等文本組),甚至文章本身就是一個BlockGroup(類似於Folder,用於存放一組子文章)。此外,Notion 的強大之處還在於ta 提供了CollectionBlock(可以認為是一個簡化的Excel),配合相關的Notion APIs 我們甚至可以把其當做一個數據庫來使用。
鑑於Notion 優秀的多端同步服務和靈活的文本存儲功能,我從開始接觸到ta 的時候就產生了“基於Notion 優化一下自己的知識管理方案”的想法。不過眼下有兩個問題還需進一步觀察:其一, Notion 一開始是收費的(而且不便宜),我擔心收益出現邊際效應,成本不可控;其二,Notion 並沒有Official APIs,這會影響基於Notion 的二次開發的穩定性,而穩定性又是自動化實踐裡非常重要的考量。
隨著Notion 開放免費的個人賬號(Personal Plan)和官方APIs 計劃的展開,這些顧慮都再也不是問題。
Solution & Workflows
如何優化自己現有的知識管理方案呢,我的基本設想是這樣的:
- 基於Notion 寫作,所有的文本材料和源數據都統一放在Notion 上面同步,避免“冗餘寫作”。
- 使用自動化手段(DevOps)從Notion 中導出指定筆記的MD 文件,解決筆記和寫作正文之間的割裂感:源文件依然可以保留各種草稿、標註和評論等內容,導出的MD 文件則根據配置只生成指定的正文內容。
- 同樣使用自動化手段導出需要分享的Notion 文章,自動部署到Hexo 等靜態部落格。
如果有需要,作為兜底策略可以定期導出Notion 全部筆記數據並做好保存和版本控制,從而彌補Notion 付費才能使用的歷史記錄功能和為需要從Notion 遷移數據這種狀況做準備(嘗試過雲筆記數據遷移的朋友應該知道這是什麼考量)。
工作流程示意圖如下:
NotionDown Project
基於CAP 編程原則,能複制的代碼絕不自己寫,一開始我抱著僥倖的心態去GitHub 上面搜索,還真讓我找到了類似的工程不過項目還處於WIP 狀態,等了快一年作者還沒有什麼動作,Demo 也是處於無法運行的狀態,所以我索性自己動手好了。
自己寫一個3rd-party 的Notion APIs 不太現實,好在同樣的GitHub 上面已經有先驅做了類似的項目
基於notion-py 我寫了一個用來支撐自己知識管理的Notion 筆記導出項目
NotionDown 的主要功能如下:
- 統一在Notion 平台上編輯筆記(集大成)。
- 基於Notion 筆記+ 相應的編譯配置,解析所需的MD 文件(必須支持圖片配置)。
- 根據配置將需要Publish 的文章自動部署指定的靜態部落格(Hexo)。
- 相關配套的集成功能:圖床配置,自定義短代碼(如生成的文章內容按渠道配置動態調整),中英混排優化(pangu),拼寫檢查(雙拼用戶剛需)。
如此一來,以後豈不是可以專心寫作了? (鬼咧,正經Bloger 誰寫文章啊,不都是在折騰部落格主題嗎。)
Substitute
如果只是需要自動把Notion 上面的筆記部署到靜態部落格,我這發現一個更簡單的解決方案:
其基本思路是通過Netlify 作為Trigger 觸發GatsbyJs 插件服務讀取Notion 筆記數據,並存放到Gatsby 平台,最終通過Gatsby 提供的部落格服務展示部落格內容。有興趣可以了解一下