obsidian探索小记(三)——与flomo笔记的联动

对obsidian笔记软件的继续探索。

零、背景

flomo笔记 是一款简洁的闪念笔记记录软件,由两位互联网资深创业者刘少楠(少楠)与刘白光(Lightory)合作开发。两位作者先前共同打造过二手书漂流网站“摆摆书架”,现在他们的团队除了flomo笔记以外还有两款产品:幕布大纲笔记和付费专栏工具“小报童”

和一般的笔记思路不同,flomo采取的是一种“闪念笔记”的思路。说人话,就是你走在路上,突然蹦出来一个点子,这个点子你感觉很有价值却不知道记在哪里合适,此时flomo的应用场景就出现了。如下图,flomo的笔记记录以卡片为单位(被称为"MEMO"),支持富文本格式和图片插入,此外各条笔记之间还可以通过 tag 进行联动。

image.png

那么这样的笔记软件在何时有用呢?一种场景就是前面提到的“走在路上,突然蹦出来一个点子”。而flomo提供的tag系统和数据统计插件(如下图),也可以帮助我们回顾自己的点子,这或许是另外一种应用场景。

image.png

本文主要从obsidian -> flomoflomo -> obsidian 两个方面开展介绍。

一、flomo的注册与配置

1. 注册

根据flomo团队的设计理念(参考《一个笔记服务的长期主义》),flomo笔记的设计一切从简,包括注册和登录界面。因此,与绝大多数软件服务不同,flomo现在支持的登录(和注册)方式较少,只有邮件登录、短信验证码登录和微信登录三种。

如果没有账号,可以在 https://v.flomoapp.com/register 上进行注册,完成登陆后将进入主界面。主界面内容相当简洁,左边是各种统计面板和 tag 的列表,右边则是MEMO的编辑框和之前记下的各种MEMO记录。

可以直接在网页端使用flomo记录笔记,也可以使用flomo的app或微信服务进行笔记记录。flomo还提供了上传API ,允许第三方软件开发者通过POST的方式将笔记上传到flomo中。

(然而很不幸的是,上传API只有会员账号能用,而会员账号一个月要15块钱呢!如果没有会员账号的话,第二节的内容可以全部跳过了——这部分内容需要API😢)

2. API

如何找到这个API呢?方法很简单。点击网页左上角的用户名按钮,在弹出菜单中选择API & Plugin选项,就能在MEMO API界面中查看到自己的API。

image.png

MEMO API界面如下图。注意两点:

  • (1)非会员用户也有自己的API,但是无法使用。(因此为了正常使用这一功能,建议冲个VIP?不过,好像完成任务或者邀请好友也能获得VIP天数)
  • (2)这个API可以被任何人、任何软件使用,因此为了自己数据的安全,不要轻易泄露API字符串。

image.png

3. 在自己的程序中使用API(非obsidian联动必须)

为了说明这个API的原理,我们可以写一个简单的小程序使用这个API(代码中的API变量需要手动修改为自己的API):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env python
#coding=utf-8

import json
import requests
import sys,os

# 此处将变量API的内容改为自己的flomo API
API = "https://flomoapp.com/xxx/xxxxxxx/xxxxxxxxxxxxxxx/"

# 定义上传函数,传入要上传的笔记内容(content),完成上传
def upload(content):
# 构建POST内容体。POST的内容体是一个包含content的字符串
post_body = json.dumps({"content":content},indent="\t",ensure_ascii=False)
# 构建POST标头。标头中必须标明"Content-Type"是json,否则flomo无法识别上传的内容
headers = {'Content-Type': 'application/json'}
print(post_body) # 打印出POST内容体
# 下面的代码调用requests库,实现对笔记内容的POST
req = requests.post(API,data=post_body.encode("utf-8"),headers=headers)
req.encoding = "utf-8"
txt = req.text
# 打印POST的返回值。返回值也是一个json字符串
print(txt)
# 定义主函数。主函数从命令行参数中读取笔记内容,然后调用upload()进行上传
if(__name__=="__main__"):
if(len(sys.argv)<2):
print("usage: python flomo-api-demo.py <flomo note>")
sys.exit(0)
upload(" ".join(sys.argv[1:]))

程序与网站API交互的方式主要有两种: GETPOST 。前者将要上传的内容明文存储在URL字符串中,包括百度翻译API在内的许多网站都使用的是这种方法。而后者将要上传的内容存储在POST payload中,其对于使用者来说是不可见的,网站在收到POST请求后会处理POST payload,这也是flomo笔记API所采用的方法。POST方法可以上传的数据量更大,并且在网站设计规范中也推荐使用POST上传大批量的数据。

如上述代码所示,我们将要上传的笔记内容转换为一个json结构体,然后将其附在对flomo API的post请求中,即可实现上传。

测试指令:

1
python flomo-api-demo.py 这条记录上传自命令行 #computer/api

运行结果如下,则说明API正常。

1
2
3
4
5
6
~$ python flomo-api-demo.py 这条记录上传自命令行 #computer/api
{
"content": "这条记录上传自命令行 #computer/api"
}
{"code":0,"message":"Saved to flomo.","memo":{"creator_id":1562134,"source":"incoming_webhook","content":"<p>\u8fd9\u6761\u8bb0\u5f55\u4e0a\u4f20\u81ea\u547d\u4ee4\u884c #computer\/api<\/p>","tags":["computer\/api"],"updated_at":"2023-12-17 16:36:18","created_at":"2023-12-17 16:36:18","linked_memos":[],"linked_count":0,"slug":"OTU2MTQyNTQ"}}

同时,在网页端我们也能看见这条笔记的信息。

image.png

基于这一原理,可以实现笔记从任何第三方软件上传到flomo笔记当中。

二、配置obsidian -> flomo

参考 : 《Obsidian 插件 Obsidian to Flomo 一键同步内容到 Flomo 插件》

这一部分需要flomo的API。

在obsidian中,需要安装一个插件 Obsidian to Flomo 。在应用内的插件市场搜索Obsidian to Flomo即可搜到。

打开 Obsidian 的偏好设置,找到第三方插件,选择社区插件市场,即可搜索Obsidian to Flomo。搜索之后点击安装即可。安装完成后,启用这一插件。

image.png

在插件启用之后,我们点击选项按钮,到达插件的配置页面。在这里,需要填写我们的flomo API。获取flomo API的方法见前文。

之后,点击“Send a test request”测试,如果看到成功发送到提示,就表示配置成功。回到 Flomo笔记中,还可以看到测试发送的内容,这条内容删掉即可。

image.png

如何使用这个插件呢?其实很简单。如下图所示,在 Obsidian 中打开一个文件,然后打开命令面板或快捷键 command + P,输入obsidian to flomo,选择“发送当前内容至Flomo”(Send current content to Flomo)即可。这样,就可以将一条笔记同步到flomo中。

image.png

如果不想同步整篇笔记,还可以先选中部分文字内容,然后在obsidian命令面板里面选择“发送选中的内容至Flomo”(Send selected content to Flomo)即可。

image.png

打开flomo,就可以看到上传的笔记。可以对这些笔记进行编辑,添加标签,修改其中的段落,或者在不同的MEMO之间建立关联。

三、配置flomo -> obsidian

很遗憾,这一部分内容我探索的还不够多,所以能写的也很少。不过确实有插件支持flomo -> obsidian的笔记导出。

由于API限制,目前flomo仅支持从API导入笔记,并不支持从API中批量导出笔记。flomo仅支持一键批量导出到HTML(在用户名 -> Account -> Data synchronization页面中,如下图),这种方式并不灵活,在导出后如果笔记有更新,还需要重新进行手动导入导出以同步笔记。

image.png

我也曾试过使用网页调试器进行分析,以期找到对flomo笔记的爬虫方法,但一无所获。

所以,现在只有一键导出到html这一种方法允许我们进行探索。

在obsidian上,有一款插件名为 Flomo Importer 。这款插件可以从flomo导出的html笔记中导入obsidian。在obsidian的插件商城中搜索插件名称即可进行安装。

image.png

安装完成后,在obsidian的左侧工具栏会出现Flomo Importer的图标(如下图红框所示)。

image.png

点击这个按钮,会进入Flomo Importer的界面,它提醒我们选取一个文件,从这个文件中导入数据。其他的一些选项保持默认就行。

image.png

如此,可以将flomo的笔记导入obsidian。

image.png

flomo笔记的产品思路很独特,感觉未来还能继续探索探索。

以上。