一日一技 | 我開發的這款小工具,輕鬆助你將飛書文件轉為 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 中: https://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 https://oaztcemx3k.feishu.cn/docs/doccnrOvzeQ8BSnfsXj8jwJHC3c#

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

開發感言

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

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

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

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