AI书签管理工具开发全记录(十六):Sun-Panel接口分析
文章目录
- AI书签管理工具开发全记录(十六):Sun-Panel接口分析
- 1.前言 📝
- 2.sun-panel介绍
- 2.接口分析
- 2.1 登录接口
- 2.2 请求header
- 2.3 分组列表接口
- 2.4 查询分组下全部书签列表
- 2.5 创建分组
- 2.6 创建书签
- 3.接口快速验证
AI书签管理工具开发全记录(十六):Sun-Panel接口分析
1.前言 📝
在上一篇文章中,我们完成了TUI功能的开发。本文我们将聚焦于sun-panel的接口分析,为后续和sun-panel数据同步做准备。
2.sun-panel介绍
sun-panel是一个流行的导航面板,支持sun-panel同步无疑会方便许多。
2.接口分析
官方提供了openapi文档
我仔细阅读了文档,发现不是很好能满足我们的需求,例如没有根据分类查询所有书签的功能,也没有根据id查询书签的功能。
所以还是需要F12查看接口实际请求,根据我们实际业务进行调用。
本文所有接口基于1.7.0
版本,后续版本请以实际为准。
2.1 登录接口
- url: /api/login
- method:post
请求参数
{"username": "xxxx","password": "xxxx"
}
返回参数
{"code": 0,"data": {"ID": 0,"CreatedAt": "0001-01-01T00:00:00Z","UpdatedAt": "0001-01-01T00:00:00Z","DeletedAt": null,"id": 1,"createTime": "2024-03-16T06:04:58.211959305Z","updateTime": "2024-03-16T06:06:58.439132022Z","username": "admin","password": "","name": "zhyj","headImage": "","status": 1,"role": 1,"mail": "admin@sun.cc","referralCode": "","token": "675f688d-1a13-4429-84fe-92d9942636b0-144bbb22a486ad1af8e37ff437daf68b","userId": 0},"msg": "OK"
}
其中token字段就是我们需要的
2.2 请求header
拿到header之后,后续需要请求的接口需要携带上token。
需要拼接header
header = {
"Authorization": "Bearer "+token
}
2.3 分组列表接口
- url: /api/panel/itemIconGroup/getList
- method:post
请求参数
无
响应参数
{"code": 0,"data": {"count": 0,"list": [{"id": 6,"icon": "","title": "dev","onlyName": "dev","description": "","sort": 9999,"userId": 1,"publicVisitHide": false,"user": {"ID": 0,"CreatedAt": "0001-01-01T00:00:00Z","UpdatedAt": "0001-01-01T00:00:00Z","DeletedAt": null,"id": 0,"createTime": "0001-01-01T00:00:00Z","updateTime": "0001-01-01T00:00:00Z","username": "","password": "","name": "","headImage": "","status": 0,"role": 0,"mail": "","referralCode": "","token": "","userId": 0},"cardStyle": {"style": 0,"textColor": "#ffffff","textInfoHideDescription": false,"textIconHideTitle": false}}]},"msg": "OK"
}
2.4 查询分组下全部书签列表
- url: /api/panel/itemIcon/getListByGroupId
- method:post
请求参数
{"itemIconGroupId": 6
}
返回参数
{"code": 0,"data": {"count": 0,"list": [{"ID": 0,"CreatedAt": "0001-01-01T00:00:00Z","UpdatedAt": "0001-01-01T00:00:00Z","DeletedAt": null,"id": 19,"createTime": "0001-01-01T00:00:00Z","updateTime": "0001-01-01T00:00:00Z","cardType": 1,"icon": {"itemType": 2,"src": "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg","text": "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg","backgroundColor": "#2a2a2a6b"},"title": "antv文档","onlyName": "","url": "http://192.168.31.93:8987/","lanUrl": "http://192.168.31.93:8987/","description": "","openMethod": 2,"sort": 9999,"backgroundColor": "#2a2a2a6b","itemIconGroupId": 6,"expandParam": {},"userId": 1}]},"msg": "OK"
}
2.5 创建分组
- url: /api/panel/itemIconGroup/edit
- method:post
请求参数
{"title": "test","cardStyle": {"style": 0,"textColor": "#ffffff","textInfoHideDescription": false,"textIconHideTitle": false}
}
响应参数
保留转义
{"code": 0,"data": {"ID": 0,"CreatedAt": "0001-01-01T00:00:00Z","UpdatedAt": "0001-01-01T00:00:00Z","DeletedAt": null,"id": 9,"createTime": "2025-06-08T08:21:03.32422806Z","updateTime": "2025-06-08T08:21:03.32422806Z","icon": "","title": "test","onlyName": "","description": "","sort": 9999,"publicVisitHide": 0,"userId": 1,"user": {"ID": 0,"CreatedAt": "0001-01-01T00:00:00Z","UpdatedAt": "0001-01-01T00:00:00Z","DeletedAt": null,"id": 0,"createTime": "0001-01-01T00:00:00Z","updateTime": "0001-01-01T00:00:00Z","username": "","password": "","name": "","headImage": "","status": 0,"role": 0,"mail": "","referralCode": "","token": "","userId": 0},"cardStyle": "{\"style\":0,\"textColor\":\"#ffffff\",\"textInfoHideDescription\":false,\"textIconHideTitle\":false}"},"msg": "OK"
}
返回的id参数即为新的分组id
2.6 创建书签
- url: /api/panel/itemIcon/edit
- method:post
请求参数
{"icon": {"itemType": 1,"backgroundColor": "#2a2a2a6b"},"title": "百度","url": "http://www.baidu.com","lanUrl": "http://www.baidu.com","description": "百度","openMethod": 2,"cardType": 1,"itemIconGroupId": 9,"backgroundColor": "#2a2a2a6b","expandParam": {}
}
返回参数
{"code": 0,"data": {"ID": 0,"CreatedAt": "0001-01-01T00:00:00Z","UpdatedAt": "0001-01-01T00:00:00Z","DeletedAt": null,"id": 23,"createTime": "2025-06-08T08:27:28.252415057Z","updateTime": "2025-06-08T08:27:28.252415057Z","cardType": 1,"icon": {"itemType": 1,"src": "","text": "","backgroundColor": "#2a2a2a6b"},"title": "百度","onlyName": "","url": "http://www.baidu.com","lanUrl": "http://www.baidu.com","description": "百度","openMethod": 2,"sort": 9999,"backgroundColor": "#2a2a2a6b","itemIconGroupId": 9,"expandParam": "{}","userId": 1,"user": {"ID": 0,"CreatedAt": "0001-01-01T00:00:00Z","UpdatedAt": "0001-01-01T00:00:00Z","DeletedAt": null,"id": 0,"createTime": "0001-01-01T00:00:00Z","updateTime": "0001-01-01T00:00:00Z","username": "","password": "","name": "","headImage": "","status": 0,"role": 0,"mail": "","referralCode": "","token": "","userId": 0}},"msg": "OK"
}
3.接口快速验证
我们使用python,进行接口快速验证
import requests
import json def login(url,username, password):"""登录:param username: 用户名:param password: 密码:return: token"""url = url + "/api/login"data = {"username": username,"password": password}response = requests.post(url, json=data)return response.json()class SunPanelApi:def __init__(self, token, url):self.token = tokenself.url = urlself.headers = {"Authorization": "Bearer "+token,"Token": token,"Content-Type": "application/json"}def get_group_list(self):"""获取群组列表:return:"""url = self.url + "/api/panel/itemIconGroup/getList"logging.info(f"请求URL: {url}")logging.info(f"请求头: {self.headers}")# 无需参数response = requests.post(url, headers=self.headers)return response.json()def get_list_by_group_id(self, group_id):"""获取群组下的列表:param group_id: 群组ID:return:"""url = self.url + "/api/panel/itemIcon/getListByGroupId"data = {"itemIconGroupId": group_id}response = requests.post(url, headers=self.headers, json=data)return response.json()def create_group(self, group_name):"""创建群组:param group_name: 群组名称:return:"""url = self.url + "/api/panel/itemIconGroup/edit"data = {"title": group_name,"cardStyle": {"style": 0,"textColor": "#ffffff","textInfoHideDescription": False,"textIconHideTitle": False}}print(url)print(data)response = requests.post(url, headers=self.headers, json=data)return response.json()def create_bookmark(self, group_id, name, url):"""创建书签:param group_id: 群组ID:param name: 名称:param url: 链接:param icon: 图标:return:"""url = self.url + "/api/panel/itemIcon/edit"data = {"icon": {"itemType": 1,"backgroundColor": "#2a2a2a6b"},"title": name,"url": url,"lanUrl": url,"description": name+",由api创建","openMethod": 2,"cardType": 1,"itemIconGroupId": group_id,"backgroundColor": "#2a2a2a6b","expandParam": {}}response = requests.post(url, headers=self.headers, json=data)return response.json()def print_json(json_data):"""打印JSON数据,使用json.dumps转换为标准JSON字符串(双引号、正确转义),indent=2使输出更易读:param json_data: JSON数据"""print(json.dumps(json_data, ensure_ascii=False, indent=2))
往期系列
- Ai书签管理工具开发全记录(一):项目总览与技术蓝图
- Ai书签管理工具开发全记录(二):项目基础框架搭建
- AI书签管理工具开发全记录(三):配置及数据系统设计
- AI书签管理工具开发全记录(四):日志系统设计与实现
- AI书签管理工具开发全记录(五):后端服务搭建与API实现
- AI书签管理工具开发全记录(六):前端管理基础框框搭建 Vue3+Element Plus
- AI书签管理工具开发全记录(七):页面编写与接口对接
- AI书签管理工具开发全记录(八):Ai创建书签功能实现
- AI书签管理工具开发全记录(九):用户端页面集成与展示
- AI书签管理工具开发全记录(十):命令行中结合ai高效添加书签
- AI书签管理工具开发全记录(十一):MCP集成
- AI书签管理工具开发全记录(十二):MCP集成查询
- AI书签管理工具开发全记录(十三):TUI基本框架搭建
- AI书签管理工具开发全记录(十四):TUI基本界面完善
- AI书签管理工具开发全记录(十五):TUI基本逻辑实现与数据展示