这几天memos下发了新的更新,但是呢,很多人发现更新到0.22.0之后,会导致原有的api完全不能使用了,会出现如下json内容
json
{
"code": 5,
"message": "Not Found",
"details": []
}
这是因为官方修改了api的请求方式,内容如下

然后呢刚好又有群友问我有没有解决办法,我就去研究了一下,下面是我验证成功的一些方法
照例先列出官方文档
Memos Api Reference
首先是我们最长使用的也是最主要的功能,获取memos备忘录的数据
get
//使用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
json
{
"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", pageToken是CAoQCg==,接下来我们使用pageToken请求
get
//使用get方法
https://memos/api/v1/memos?pageToken=CAoQCg==
那么呢可以看到,已经获取了25往后的后10条数据(默认就是10条),并且获得了新的pageToken,我们可以使用这个接着获取后面的内容
json
{
"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": "#说说 {日常} 陪着宝贝去考教资去了",
"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",
"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条数据,那么很简单,只需要输入以下内容即可
get
//使用get方法
https://memos/api/v1/memos?pageSize=30
这个与上面的pageToken组合可以实现任意步长的下一页
filter
假如我想要获取id为1的用户的且不为PRIVATE的评论,我们可以使用如下方法
这里由于filter内容的复杂,直接在浏览器输入会出现问题,需要对特殊符号进行url编码,比较麻烦而且不易读,我们使用如下代码
get
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));
这里我在测试的时候发现一个很申请的问题,我就不放在正文了,你可能也会遇到
API问题
我是新创建的一个账号,可能从头安装不会遇到这个问题???
可以看到,我这里是有一条评论的

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

但是当我再次发送一条说说后,申请的事就发生了,可以正确的获取到这两条说说了,删除其中任意一条都不会再出现上面的问题了
可能是我写法的问题,我没法获取到具体tag的内容
json
{
"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对应下的不同时间发送了多少条备忘录
get
//使用get方法
https://memos/api/v1/memos/stats?name=users/1
内容如下,可以在前端使用这些数据生成一些图表来展示数据
json
{
"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
}
}