当前位置: 首页 > web >正文

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介绍

image.png
sun-panel是一个流行的导航面板,支持sun-panel同步无疑会方便许多。

2.接口分析

官方提供了openapi文档
image.png

我仔细阅读了文档,发现不是很好能满足我们的需求,例如没有根据分类查询所有书签的功能,也没有根据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

image.png

拿到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基本逻辑实现与数据展示
http://www.xdnf.cn/news/12963.html

相关文章:

  • Java中线程的常用方法
  • 6月8日python-AI代码
  • RPG23.应用武器伤害(一):设置武器命中
  • AD学习(2)
  • 深入理解链接与加载:从静态库到动态库的全流程解析
  • OD 算法题 B卷【反转每对括号间的子串】
  • Java设计模式面试题详解
  • 第十二讲 | 二叉搜索树
  • 庖丁解java(一篇文章学java)
  • 风控系统中常用的概念和架构学习
  • golang循环变量捕获问题​​
  • Ⅱ.楔子 -- C♭和 cbc
  • 经典算法:排序链表
  • DQN算法(详细注释版)
  • 开源项目实战学习之YOLO11:12.7 ultralytics-models-transformer.py
  • SpringMVC简介
  • 【GPT模型训练】第一课:安装PyTorch环境
  • PandasAI使用
  • Doris-2:单虚拟机上非docker化安装Doris实验环境
  • 万利达电动机保护器接ModbusRTU转profibusDP网关与300PLC通讯
  • 2025-06-02-数据库的分类和应用
  • 大数据(3) 分布式文件系统HDFS
  • LeetCode 2894.分类求和并作差
  • 什么是函数对象
  • 【ArcGIS技巧】—村庄规划规划用地规划状态字段生成工具
  • 并发请求函数batchRequests
  • 类加载的过程
  • 【算法笔记】树套树
  • RSA和AES算法核心区别和原理解析
  • Python地理数学可视化:基于函数生成真实感地形