这几天memos下发了新的更新,但是呢,很多人发现更新到0.22.0之后,会导致原有的api完全不能使用了,会出现如下json内容

1
2
3
4
5
{
"code": 5,
"message": "Not Found",
"details": []
}

这是因为官方修改了api的请求方式,内容如下

然后呢刚好又有群友问我有没有解决办法,我就去研究了一下,下面是我验证成功的一些方法
照例先列出官方文档

首先是我们最长使用的也是最主要的功能,获取memos备忘录的数据

1
2
//使用get方法
https://memos/api/v1/memos

使用这个可以获取所有用户前10条数据还是比较鸡肋的,这时候就要使用官方给的这几个参数了

pageSize 这个参数是获取对应长度的数据,假如设置30就是获取前30条数据
pageToken 这个是类似于翻页的东西的存在
filter 这个是这次更新的核心内容,将之前API的creatorId=1&tag=说说这种内容改成了filter="creator == users/{uid} && visibilities == ['PUBLIC', 'PROTECTED']"的样子,下面会进行提及

这里我在测试的时候发现,获取到的数据是包括了私有的说说,也就是似乎不区分私有和公开了????只给了一个visibility来让你请求的时候筛选????

pageToken

我们先讲一下这个pageToken,这个token会在你请求的时候添加的json的最后方位置如下
我们还是请求上方提到的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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
{
"memos": [
{
"name": "memos/35",
"uid": "fqTx3S7cVgFcwn2mA84PYG",
"rowStatus": "ACTIVE",
"creator": "users/2",
"createTime": "2024-05-19T16:13:24Z",
"updateTime": "2024-05-19T16:13:24Z",
"displayTime": "2024-05-19T16:13:24Z",
"content": "#说说 测试说说",
"nodes": [
{
"type": "PARAGRAPH",
"paragraphNode": {
"children": [
{
"type": "TAG",
"tagNode": {
"content": "说说"
}
},
{
"type": "TEXT",
"textNode": {
"content": " 测试说说"
}
}
]
}
}
],
"visibility": "PRIVATE",
"tags": [],
"pinned": false,
"resources": [],
"relations": [],
"reactions": []
},
//省略中间内容
{
"name": "memos/25",
"uid": "W8APoUTtnXwVkyB7gr5sCX",
"rowStatus": "ACTIVE",
"creator": "users/1",
"createTime": "2024-03-17T13:26:55Z",
"updateTime": "2024-03-17T13:26:55Z",
"displayTime": "2024-03-17T13:26:55Z",
"content": "#说说 {cnsf} 希望严惩三杀人小恶魔\n研究未成年人犯罪的北京师范大学法学院副教授苏明月解释,自2021年3月1日起施行的《中华人民共和国刑法修正案十一》将最低刑事责任年龄由十四周岁降低到十二周岁,并附加了一个程序性限定条件——经最高人民检察院核准追诉。 这意味着只有经过最高检核准追诉,案件才能进入刑事司法程序,由法院经过审判定罪量刑。由于未成年人不适用死刑,如果构成重罪且情节极其恶劣,最高可被判处无期徒刑,送入未成年人管教所(相当于未成年人监狱)服刑😓",
"nodes": [
{
"type": "PARAGRAPH",
"paragraphNode": {
"children": [
{
"type": "TAG",
"tagNode": {
"content": "说说"
}
},
{
"type": "TEXT",
"textNode": {
"content": " {cnsf} 希望严惩三杀人小恶魔"
}
}
]
}
},
{
"type": "LINE_BREAK",
"lineBreakNode": {}
},
{
"type": "PARAGRAPH",
"paragraphNode": {
"children": [
{
"type": "TEXT",
"textNode": {
"content": "研究未成年人犯罪的北京师范大学法学院副教授苏明月解释,自2021年3月1日起施行的《中华人民共和国刑法修正案十一》将最低刑事责任年龄由十四周岁降低到十二周岁,并附加了一个程序性限定条件——经最高人民检察院核准追诉。 这意味着只有经过最高检核准追诉,案件才能进入刑事司法程序,由法院经过审判定罪量刑。由于未成年人不适用死刑,如果构成重罪且情节极其恶劣,最高可被判处无期徒刑,送入未成年人管教所(相当于未成年人监狱)服刑😓"
}
}
]
}
}
],
"visibility": "PUBLIC",
"tags": [],
"pinned": false,
"resources": [],
"relations": [],
"reactions": []
}
],
"nextPageToken": "CAoQCg=="
}

可以从上方看到,我们获取了10条数据,最后一条数据的name"memos/25", pageTokenCAoQCg==,接下来我们使用pageToken请求

1
2
//使用get方法
https://memos/api/v1/memos?pageToken=CAoQCg==

那么呢可以看到,已经获取了25往后的后10条数据(默认就是10条),并且获得了新的pageToken,我们可以使用这个接着获取后面的内容

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
{
"memos": [
{
"name": "memos/24",
"uid": "cxUVhBRnYJrjq6WncDY2m8",
"rowStatus": "ACTIVE",
"creator": "users/1",
"createTime": "2024-03-09T00:55:24Z",
"updateTime": "2024-03-09T00:55:24Z",
"displayTime": "2024-03-09T00:55:24Z",
"content": "#说说 {日常} 陪着宝贝去考教资去了![](https://bu.dusays.com/2024/03/09/65ebb3089f9b6.jpg)",
"nodes": [
{
"type": "PARAGRAPH",
"paragraphNode": {
"children": [
{
"type": "TAG",
"tagNode": {
"content": "说说"
}
},
{
"type": "TEXT",
"textNode": {
"content": " {日常} 陪着宝贝去考教资去了"
}
},
{
"type": "IMAGE",
"imageNode": {
"altText": "",
"url": "https://bu.dusays.com/2024/03/09/65ebb3089f9b6.jpg"
}
}
]
}
}
],
"visibility": "PUBLIC",
"tags": [],
"pinned": false,
"resources": [],
"relations": [],
"reactions": []
},
//省略
{
"name": "memos/13",
"uid": "Ayys5gJkaxA5niymq2oTAY",
"rowStatus": "ACTIVE",
"creator": "users/1",
"createTime": "2024-02-14T02:41:43Z",
"updateTime": "2024-02-15T10:57:21Z",
"displayTime": "2024-02-14T02:41:43Z",
"content": "#说说 {恋爱记} 情人节礼物!!!\n![](https://bu.dusays.com/2024/02/14/65cc28430377f.jpg)",
"nodes": [
{
"type": "PARAGRAPH",
"paragraphNode": {
"children": [
{
"type": "TAG",
"tagNode": {
"content": "说说"
}
},
{
"type": "TEXT",
"textNode": {
"content": " {恋爱记} 情人节礼物!!!"
}
}
]
}
},
{
"type": "LINE_BREAK",
"lineBreakNode": {}
},
{
"type": "PARAGRAPH",
"paragraphNode": {
"children": [
{
"type": "IMAGE",
"imageNode": {
"altText": "",
"url": "https://bu.dusays.com/2024/02/14/65cc28430377f.jpg"
}
}
]
}
}
],
"visibility": "PUBLIC",
"tags": [],
"pinned": false,
"resources": [],
"relations": [],
"reactions": []
},
{
"name": "memos/12",
"uid": "G5qYNvghedcErMGAAoyN9x",
"rowStatus": "ACTIVE",
"creator": "users/1",
"createTime": "2024-02-13T09:45:23Z",
"updateTime": "2024-02-15T10:56:54Z",
"displayTime": "2024-02-13T09:45:23Z",
"content": "#说说 {洛天依} 虽然我没有病,但是还是好喜欢听这首歌\n{music https://music.163.com/song?id=1494001389}",
"nodes": [
{
"type": "PARAGRAPH",
"paragraphNode": {
"children": [
{
"type": "TAG",
"tagNode": {
"content": "说说"
}
},
{
"type": "TEXT",
"textNode": {
"content": " {洛天依} 虽然我没有病,但是还是好喜欢听这首歌"
}
}
]
}
},
{
"type": "LINE_BREAK",
"lineBreakNode": {}
},
{
"type": "PARAGRAPH",
"paragraphNode": {
"children": [
{
"type": "TEXT",
"textNode": {
"content": "{music "
}
},
{
"type": "AUTO_LINK",
"autoLinkNode": {
"url": "https://music.163.com/song?id=1494001389}",
"isRawText": true
}
}
]
}
}
],
"visibility": "PUBLIC",
"tags": [],
"pinned": false,
"resources": [],
"relations": [],
"reactions": []
}
],
"nextPageToken": "CAoQFA=="
}

pageSize

假如我们要获取前30条数据,那么很简单,只需要输入以下内容即可

1
2
//使用get方法
https://memos/api/v1/memos?pageSize=30

这个与上面的pageToken组合可以实现任意步长的下一页

filter

假如我想要获取id为1的用户的且不为PRIVATE的评论,我们可以使用如下方法
这里由于filter内容的复杂,直接在浏览器输入会出现问题,需要对特殊符号进行url编码,比较麻烦而且不易读,我们使用如下代码

1
2
3
4
5
6
7
const filterValue = "creator=='users/1'&&visibilities==['PUBLIC', 'PROTECTED']";
const encodedFilterValue = encodeURIComponent(filterValue);
const url = `https://memos/api/v1/memos?filter=${encodedFilterValue}`;
fetch(url)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

这里我在测试的时候发现一个很申请的问题,我就不放在正文了,你可能也会遇到

blue,

我是新创建的一个账号,可能从头安装不会遇到这个问题???
可以看到,我这里是有一条评论的

当我请求后,会发现无法获取到这个说说

但是当我再次发送一条说说后,申请的事就发生了,可以正确的获取到这两条说说了,删除其中任意一条都不会再出现上面的问题了

可能是我写法的问题,我没法获取到具体tag的内容

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
30
31
32
33
34
35
36
37
{
"name": "memos/38",
"uid": "Y7ePdeycVmmTM6FX2rWpcS",
"rowStatus": "ACTIVE",
"creator": "users/1",
"createTime": "2024-05-19T17:34:11Z",
"updateTime": "2024-05-19T17:34:26Z",
"displayTime": "2024-05-19T17:34:11Z",
"content": "#测试 测试评论",
"nodes": [
{
"type": "PARAGRAPH",
"paragraphNode": {
"children": [
{
"type": "TAG",
"tagNode": {
"content": "测试"
}
},
{
"type": "TEXT",
"textNode": {
"content": " 测试评论"
}
}
]
}
}
],
"visibility": "PUBLIC",
"tags": [],
"pinned": false,
"resources": [],
"relations": [],
"reactions": []
}

可以看到tags的内容是空的,但是tag是在nodes里,可能这部分官方忘记了???
暂时我也不知道咋整,暂代其他人解决,其实前端也可以在获取到数据后筛选就是没有直接获取的方便

memos/stats

使用这个api可以看到,不同id对应下的不同时间发送了多少条备忘录

1
2
//使用get方法
https://memos/api/v1/memos/stats?name=users/1

内容如下,可以在前端使用这些数据生成一些图表来展示数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"stats": {
"2024-02-12": 3,
"2024-02-13": 2,
"2024-02-14": 1,
"2024-02-15": 2,
"2024-02-19": 2,
"2024-02-24": 1,
"2024-03-01": 1,
"2024-03-05": 1,
"2024-03-09": 1,
"2024-03-17": 1,
"2024-03-22": 1,
"2024-03-29": 1,
"2024-04-11": 1,
"2024-04-13": 1,
"2024-04-22": 1,
"2024-04-30": 1,
"2024-05-17": 2,
"2024-05-19": 4
}
}