無需會員將有道雲筆記腦圖轉換xmind
阿新 • • 發佈:2021-06-23
我的煩惱
有道雲筆記有腦圖功能,我平時經常用到,之所以很少用到其他腦圖工具,是因為我一直用有道雲筆記寫筆記。因此編輯腦圖和檢視腦圖比較方便,但是需要將腦圖匯出的時候目前只支援圖片和xmind,但是需要開會員,由於囊中羞澀,所以我想了別的方案。
解決方案
我找到xmind的官方GitHub:
https://github.com/xmindltd,找到了python的SDK,看了下有python和java以及js這三個sdk,但是Java和python的sdk已經不維護了,不過還是可以用的,就是新功能可能用不了。
找到了生成xmind的方法,但是如何將有道雲筆記腦圖的原始檔拿到呢?還得分析一下原始檔格式,寫寫演算法去進行轉換。之前匯出過有道雲筆記,知道好多檔案都是明文儲存,沒有加密啥的,因此我用everything
下面是我的思維導圖的原始檔,用文字方式開啟,發現就是一個簡單的json格式。
下面就是json內容,實際就是每個節點都有父節點id,根節點沒有父節點,每個節點組成一個數組,這種格式處理最好用的就是遞迴的方法。
{ "nodes": [ { "id": "root", "isroot": true, "topic": "測試腦圖", "customStyle": { "fontFamily": [ "Microsoft YaHei", "STXihei" ] }, "link": null, "expanded": true, "parentid": null, "style": {} }, { "id": "a231f89912e42e5b", "topic": "分支主題1", "customStyle": { "fontFamily": [ "Microsoft YaHei", "STXihei" ], "borderColor": "#4D94FF" }, "expanded": true, "parentid": "root", "style": {} } ], "readOnly": false, "toolbar": { "lineType": "default", "strategy": "logic_right", "zoom": 1, "loading": true, "borderColor": "#4D94FF" }, "remarks": {}, "version": "2.0", "resourceList": "" }
動手操作
我的所有程式碼都放到GitHub:
https://github.com/jan-bar/mindmap_to_xmind,如果有興趣,可以去看看,核心程式碼如下,沒有太複雜的東東。
import json import xmind import sys import os def convert_mindmap_xmind(input_file, save_file): data_dict = {} # 將節點儲存到字典中 with open(input_file, 'r', encoding='utf-8') as f: json_data = json.load(f) for node in json_data['nodes']: data_dict[node['id']] = { 'id': node['id'], 'parentid': node['parentid'], 'topic': node['topic'], 'sub_topic': {}, } data_root = None for val in data_dict.values(): if val['id'] == 'root': data_root = val # 儲存根節點 elif n := data_dict.get(val['parentid']): # 當前節點掛到父節點下 n['sub_topic'][val['id']] = val if data_root is None: print('資料有誤,沒有找到根節點') return # print(json.dumps(data_root)) # 可以列印看看結果 if os.path.exists(save_file): os.remove(save_file) # 目標檔案存在則刪除 mind = xmind.load(save_file) sheet1 = mind.getPrimarySheet() # 獲取sheet並設定名稱為輸入檔名 sheet1.setTitle(os.path.basename(input_file)) root1 = sheet1.getRootTopic() # 設定屬性為: 邏輯圖(向右), 和有道雲筆記保持一致 root1.setAttribute('structure-class', 'org.xmind.ui.logic.right') def set_topic(root, val_data): root.setTitle(val_data['topic']) for sub_val in val_data['sub_topic'].values(): set_topic(root.addSubTopic(), sub_val) set_topic(root1, data_root) # 遞迴設定子節點 xmind.save(mind, save_file) if __name__ == '__main__': if len(sys.argv) != 3: print(f'usage: {sys.argv[0]} input.mindmap save.xmind') exit(0) convert_mindmap_xmind(sys.argv[1], sys.argv[2])
最終效果,上面那個有道雲筆記的結構完美轉換為下面的xmind,然後就可以通過xmind匯出成各種格式,滿足大家的所有需求了。
總結
生活中有很多技巧都需要我們去發現,並找到解決方案。想一想自己的需求是不是大家的需求,如果是那就有解決的價值。反正我有了這個方案就可以放心地在有道雲筆記上寫腦圖了。如果需要釋出給其他人看,就通過我的這個專案匯出成xmind,然後通過xmind匯出成各種格式檔案。