-
Flomo 是一个好的应用,我曾写文章介绍怎么从 Todo 里面把内容导入到 Flomo,
-
但是 Flomo 的隐私政策 (Privacy Policy) 让我无法接受,我决定不再使用它。
-
另外由于 Flomo 里面的笔记和我 Obsidian 里面的日志无法一起集中起来做搜索,所以我决定也不再使用 Todo。
-
本着统一的原则,也使用 Obsidian 来保存笔记。如何把 Flomo 笔记导入 Obsidian。具体是通过 Flomo 的网上导出 HTML 功能,然后写程序解析一下,这里面做了几个事情:
-
A. 设计上使用一个大文件,命名为
Scibbles.md
,所有笔记内容都在这个文件里面。 -
B. 新增一个
#Scribble-edit-later
标签,统一管理无标签笔记,方便后面整理。 -
C. 增加了时间属性。笔记的三要素(时间、地点、内容)。地点暂时没有考虑。
-
D. 解决了一些格式问题:包括标签无法显示,多行内容简化,增加盘古之白等。
-
代码基于 go,如下:
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"regexp"
"strings"
"github.com/PuerkitoBio/goquery"
"github.com/vinta/pangu"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func parseFlomo() {
content, err := ioutil.ReadFile("202109.html")
check(err)
doc, err := goquery.NewDocumentFromReader(strings.NewReader(string(content)))
check(err)
// Find the memo items
f, err := os.Create("09.md")
w := bufio.NewWriter(f)
check(err)
defer f.Close()
doc.Find(".memos .memo").Each(func(i int, memo *goquery.Selection) {
content := memo.Find(".content").Find("p").Text()
space := regexp.MustCompile(`\s+`)
content = space.ReplaceAllString(content, " ")
ts := memo.Find(".time").Text()
fmt.Printf("- %s [%s]\n", content, ts)
// 处理 Tag 1) 如果没有 Tag,增加 #Scribble-edit-later 标签 2) 如果已经有 Tag,在 # 前面加个空格,防止 Obsidian 识别不了。
var formatedScribble string = ""
idx := strings.Index(content, "#")
switch idx > 0 {
case true:
var formatedContent string = ""
for i, ch := range content {
if string(ch) == "#" {
formatedContent = content[:i] + " " + content[i:]
break
}
}
formatedScribble = fmt.Sprintf("- %s [%s]\n", formatedContent, ts)
case false:
formatedScribble = fmt.Sprintf("- %s #Scribble-edit-later [%s]\n", content, ts)
}
// 恩,在增加 盘古之白
w.WriteString(pangu.SpacingText(formatedScribble))
w.Flush()
})
}
func main() {
parseFlomo()
}