页面加载中
博客快捷键
按住 Shift 键查看可用快捷键
ShiftK
开启/关闭快捷键功能
ShiftA
打开/关闭中控台
ShiftD
深色/浅色显示模式
ShiftS
站内搜索
ShiftR
随机访问
ShiftH
返回首页
ShiftL
友链页面
ShiftP
关于本站
ShiftI
原版/本站右键菜单
松开 Shift 键或点击外部区域关闭
互动
最近评论
暂无评论
标签
寻找感兴趣的领域
暂无标签
    0
    文章
    0
    标签
    8
    分类
    10
    评论
    128
    功能
    深色模式
    标签
    JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
    互动
    最近评论
    暂无评论
    标签
    寻找感兴趣的领域
    暂无标签
      0
      文章
      0
      标签
      8
      分类
      10
      评论
      128
      功能
      深色模式
      标签
      JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
      随便逛逛
      博客分类
      文章标签
      复制地址
      深色模式
      AnHeYuAnHeYu
      Search⌘K
      博客
        暂无其他文档

        0.22.0版本Memos API介绍

        文章摘要
        新更新的memos 0.22.0版本导致原有API无法使用,出现“Not Found”错误,原因是官方修改了API请求方式。文章详细介绍了如何使用新API获取备忘录数据,包括使用get方法获取数据、设置pageSize参数获取指定长度的数据、使用pageToken进行翻页、使用filter参数筛选特定用户和可见性的数据。同时,文章还讨论了获取私有说说的问题,并提供了获取特定用户评论的示例代码。此外,文章还提到了获取不同时间发送的备忘录统计数据的API,并展示了如何使用这些数据生成图表。
        May 19, 202411 分钟 阅读76 次阅读

        这几天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": "#说说 {日常} 陪着宝贝去考教资去了![](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条数据,那么很简单,只需要输入以下内容即可

        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
            }
        }
        最后更新于 May 19, 2024
        On this page
        暂无目录