一日一技 | 我開發的這款小工具,輕鬆助你將飛書文檔轉為 Markdown

語言: CN / TW / HK

隨着少數派逐漸 All in 飛書,我們少數派作者們也逐漸遷移到飛書文檔進行寫稿。飛書文檔提供了 Web 平台的富文本編輯器,配合「少數派助手」這個服務,可以將稿件一鍵發佈到少數派平台,着實是非常方便。

不少的少數派作者都有自己的博客平台,而大部分的博客平台都是使用 Markdown 作為輸入從而生成 HTML 發佈到網絡中的。但是,飛書只支持 Markdown 語法的編輯,卻不支持導出為 Markdown 文件下載,這打斷了我們一直以來已經完善的發佈博客流程。

本文就提供一種將飛書文檔轉換為 Markdown 文件的方法,來彌補這個 Gap。

關聯閲讀:

現有的方法痛點

飛書支持的導出格式為 Word 和 PDF 兩種格式。如需編輯,我們就只能選擇 Word 格式,然後使用文檔格式轉換的瑞士軍刀 pandoc 從 Word 文檔轉換為 Markdown 文件。參考命令: pandoc test.docx -o test.md 。但是,如今這種方法已經不可靠了,如果嘗試將本文轉換,則會得到下圖的格式。

從圖中的效果可以看出,文檔中多了很多宂餘的換行,列表格式消失不見,圖片丟失等問題。究其原因,是因為導出的 Word 文檔沒有使用 Word 內建的富文本樣式,而全部使用的自定義樣式。至於圖片問題,轉換後的 Markdown 文檔中的圖片格式是 ![Generated](media/image1.png){width="5.90625in"height="2.8020833333333335in"} 雖然可以通過將 Word 文檔的 docx 後綴改為 zip,然後從壓縮包中整體提取 word/media 文件夾來修復圖片的問題。但其它的格式問題,依然是一個頭疼的問題。

另一方面,在沒有 pandoc 轉換工具的情況下,如果要獲得 Markdown 文件,我理解的最便捷的方法如下:

  1. 全文複製飛書文檔的富文本內容
  2. 全文粘貼到本地的 markdown 編輯器中
  3. (可選)逐個下載文檔中的圖片並替換 markdown 文件中的圖片

當完成第 2 步的時候,其實文檔看起來已經完整了,但是仔細觀察會發現文檔中的圖片是飛書的臨時鏈接,且只有 24 小時的有效時間。因此,為了有效地保留圖片,需要進行第 3 步手動下載圖片替換。當一篇文檔中的圖片非常多的時候,手動下載替換是一個非常枯燥的事情。

如果是使用圖牀的作者,可以在第 2 步的文檔後直接使用圖牀上傳工具(如:PicGo)進行圖片上傳快速替換,甚至 Typora 編輯器中就自帶了這個功能。但是,由於圖片鏈接是臨時鏈接,沒有文件後綴(.jpg/.png/.gif),當上傳到圖牀後也丟失了這個信息,雖然不影響圖牀的回傳,但是後面如果需要替換圖牀將會是一個災難。

使用 Feishu2Md 工具

在進行了大量的搜索後,我其實也沒有找到現有的轉換工具能夠轉換飛書文檔為 Markdown 文件下載的。但是,十分幸運,我碰巧找到了 chyroc 使用飛書的 Open API 實現的飛書文檔解析器 lark_docs_md 。因此,我決定基於這個庫開發一個下載工具,也就是小標題的 Feishu2Md 工具。

Feishu2Md 已開源併發布在 Github 中: http://github.com/Wsine/feishu2md

下載 feishu2md- 得益於 golang 本身的多平台編譯特性,我已經為 Windows/Linux/Mac 都預編譯了該工具的可執行文件,可以直接從 Github Release 中下載,從壓縮包中提取自己平台的 feishu2md 二進制可執行文件即可,建議放置在 PATH 路徑中。

生成配置文件- feishu2md 需要使用飛書的 Open API 提取飛書文檔,因此需要配置相應的 App ID 和 App Secret 進行 API 的調用。首先,進入飛書的 開發者後台 然後創建一個企業自建應用,信息可以任意填,發佈但不必等待審核通過。然後在創建的應用頁面中,找到「憑證與基礎信息」,即可找到 App ID 和 App Secret 信息。

執行 feishu2md --config 命令會生成該工具的配置文件。生成的配置文件路徑為:

%AppData%/feishu2md/config.json
$XDG_CONFIG_HOME/feishu2md/config.json
$XDG_CONFIG_HOME/feishu2md/config.json

如無配置 XDG_CONFIG_HOME 環境變量,則默認為 ~/.config 目錄

將 App ID 和 App Secret 填入配置文件 config.json 中的相應位置。另外,image_dir 配置項為存放文檔中圖片的文件夾名稱。

下載飛書文檔- 通過 feishu2md < 你的飛書文檔鏈接 & gt; 直接下載,文檔鏈接可以通過 分享 > 開啟鏈接分享 > 複製鏈接 獲得。

調用示例:

feishu2md http://oaztcemx3k.feishu.cn/docs/doccnrOvzeQ8BSnfsXj8jwJHC3c#

格式轉換可能會有一些細微的渲染差異,畢竟 markdown 本身的標準也有很多套,建議手動檢查一下。而最頭疼的圖片問題,該工具也已經幫忙整體處理好了。然後就可以愉快地用以前的工作流發佈博客了。

開發感言

由於 lark_docs_md 是使用 golang 實現的,因此這也是我首次使用 golang 進行開發。對於開發小工具,整體的開發體驗非常良好,而且還能編譯得到二進制以及享受多平台編譯的好處。工具可能還有一些不是很完善的地方,如有問題可以提 issue,我有時間會進行修復的。

最後,歡迎試用,歡迎 PR ~

> 下載少數派 2.0 客户端、關注 少數派公眾號,解鎖全新閲讀體驗 :newspaper: 

> 實用、好用的正版軟件,少數派為你呈現 :rocket: