基於.Net Core實現的飛書所有檔案一鍵匯出服務(支援多系統)

2023-07-06 21:00:35

feishu-doc-export

一個支援Windows、Mac、Linux系統的飛書檔案一鍵匯出服務,僅需一行命令即可將飛書知識庫的全部檔案同步到本地電腦。匯出速度嘎嘎快,實測700多個檔案匯出只需25分鐘,且程式是後臺掛機執行,不影響正常工作。

動機

最近也是公司辦公軟體從飛書切換回了企業微信,自然就產生了一些檔案要遷移的問題,由於檔案量過多(大概有700多個),無論是從飛書手動下載為Word或PDF格式的檔案,還是將內容複製到本地新建Markdown檔案都是一件極為繁瑣的事情。於是便找到了兩個GitHub上已有的飛書檔案匯出工具Feishu2MDfeishu-backup,但是他們都有一些問題不太滿足我的需求。

現有方案的不滿足

feishu-backup:

官方地址:dicarne/feishu-backup: 用於備份飛書檔案,可以將飛書檔案轉成markdown下載。 (github.com)

  1. 因為它是網頁版,下載速度太慢。有一次使用線上版選擇了其中一個飛書檔案節點下的所有檔案(大概200-300個),下載了1個多小時還沒有好,可能是卡死了。

  2. 因為它的下載方式是把選擇的全部檔案打包成壓縮包後才會在瀏覽器返回給你,如果這個等待的過程中途斷網或者電腦卡頓要重啟,那你就白等那麼長時間了。

  3. 因為它不支援下載表格型別的檔案。

feishu2md:

官方地址:Wsine/feishu2md: 一鍵命令下載飛書檔案為 Markdown (github.com)

我雖然沒用實際使用過它,但我閱讀它的官方檔案後發現它的核心問題是一次只能下載一個檔案。

我的需求

  • 一次匯出知識庫下的所有檔案,包含檔案和表格
  • 匯出的檔案目錄結構保持和原飛書檔案一致
  • 匯出速度不要太慢
  • 對於檔案匯出的格式沒有要求,docxxlsx即可

基於以上的種種原因呢,我決定自己動手寫一個滿足自己需求的程式來解決這個問題。這裡我使用的是支援跨平臺的.net core進行開發,最終打包程式可支援在windowslinuxmac系統上執行。這裡將不贅述具體的實現過程,直接展示最終的效果圖吧。

如何使用

獲取AppId和AppSecret

  • 進入飛書開發者後臺,建立企業自建應用,資訊隨意填寫。進入應用的後臺管理頁
  • (重要)開啟許可權管理,開通需要的許可權:雲檔案>開通以下許可權(注意有分頁)
    • 檢視新版檔案
    • 檢視、評論和下載雲空間中所有檔案
    • 檢視、評論和匯出檔案
    • 檢視、評論、編輯和管理雲空間中所有檔案
    • 檢視、評論、編輯和管理多維表格
    • 檢視、編輯和管理知識庫
    • 檢視、評論、編輯和管理電子試算表
    • 匯出雲檔案
  • 開啟新增應用能力,新增機器人
  • 版本管理與釋出中建立一個版本,並申請釋出上線
    • 等待企業管理員稽核通過
    • 如果只是為了測試,可以選擇測試企業和人員,建立測試企業,繫結應用,切換至測試版本
      • 進入測試企業建立知識庫和檔案
  • 為機器人新增知識庫的存取許可權,具體步驟如下:
    • 在飛書桌面使用者端中建立一個新的群組或直接使用已有的群組
    • 為群組新增群機器人,選擇上面步驟中自己建立的應用作為群機器人
    • 開啟知識庫,如果你是知識庫管理員,則可以看見知識空間設定。開啟知識空間設定>成員管理>新增成員,選擇剛剛建立的群組
  • 回到開發者平臺,開啟憑證與基礎資訊,獲取 App IDApp Secret

下載程式

v0.0.2.1版本為第一個正式釋出版本,從v0.0.2.1往後迭代的每一個版本都將提供免安裝的可執行程式。下載地址:(Releases)feishu-doc-export

  • windows-x64系統,下載feishu-doc-export-win-x64.zip

  • mac-osx-x64系統,下載feishu-doc-export-mac-osx-x64.zip

  • linux-x64系統,下載feishu-doc-export-linux-x64.zip

下載並解壓即可得到程式可執行檔案,windows環境的可執行檔案為feishu-doc-export.exelinuxmac環境的可執行檔案為feishu-doc-export沒有字尾。

命令列執行

在可執行檔案的目錄開啟終端,命令列所有引數如下:

請填寫以下所有引數:
  --appId           飛書自建應用的AppId.
  --appSecret       飛書自建應用的AppSecret.
  --spaceId         飛書匯出的知識庫Id(可為空,或者不傳此引數).
  --exportPath      檔案匯出的目錄位置.
  • win環境

    # 指定知識庫匯出
    ./feishu-doc-export.exe --appId=111111 --appSecret=2222222  --spaceId=333333 --exportPath=E:\temp\測試飛書檔案
    # 不指定知識庫匯出
    ./feishu-doc-export.exe --appId=111111 --appSecret=222222 --exportPath=E:\temp\測試飛書檔案
    
  • linux環境和mac環境

    注意!!!首次使用時需要將檔案授權為可執行檔案

    # 將檔案授權為可執行檔案
    sudo chmod +x ./feishu-doc-export
    

    執行時最好使用sudo,否則可能出現許可權不足,導致在儲存檔案時無法建立檔案目錄

    # 執行不指定知識庫的匯出
    sudo ./feishu-doc-export --appId=111111 --appSecret=222222 --exportPath=/home/ubuntu/feishu-document
    

執行效果圖如下:

逐步執行

  1. 第一步,(win,mac)雙擊執行程式,輸入飛書自建應用的設定,並輸入檔案要匯出的目錄位置。

    maclinux仍需執行命令sudo chmod +x ./feishu-doc-export來將檔案設定為可執行檔案。

    mac可能會出現不受信任的執行程式,需要手動覆蓋「隱私與安全性」設定中的設定。linux則只能通過命令列輸入.\feishu-doc-export而不帶引數的方式執行

  2. 第二步,選擇知識庫後自動匯出

  3. 第三步,對比飛書原檔案的目錄結構

耗時測試

700多個檔案匯出到本地總耗時25分鐘

總結

自己動手,豐衣足食,有趣且實用。不過目前我的方案不支援的功能有以下幾點,以後有空了再增強

  • 不支援將檔案匯出為Markdown格式
  • 不支援單獨匯出一個檔案
  • 不支援單獨匯出某個子節點下的所有檔案

所以呢,目前我寫的這個程式只適用於不要求將檔案匯出為Markdown的群體使用。