+156
@@ -0,0 +1,156 @@
|
||||
# 亚模块、更新红点、AI 女友接口
|
||||
|
||||
本文只列 App/H5 需要对接的服务端字段。接口沿用现有登录鉴权和统一响应结构,业务数据位于 `data`。
|
||||
|
||||
## 1. 亚模块列表
|
||||
|
||||
```http
|
||||
GET /api/app/modules/list
|
||||
```
|
||||
|
||||
后端只返回当前已启用且处于上下架时间范围内的亚模块。亚模块对象新增:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "66a000000000000000000001",
|
||||
"moduleName": "示例模块",
|
||||
"onlineAt": "2026-07-27T08:00:00Z",
|
||||
"offlineAt": "2026-08-27T08:00:00Z",
|
||||
"excludeLatest": true,
|
||||
"excludeRecommend": true,
|
||||
"searchOnlyWhenInactive": true
|
||||
}
|
||||
```
|
||||
|
||||
- `onlineAt`、`offlineAt` 为空表示不限制。
|
||||
- App 无需自行判断时间,也不要缓存已经下架的亚模块。
|
||||
- 亚模块失效后,普通列表、模块/专题入口、分享页和直接视频详情均不可访问;搜索结果仍可访问。
|
||||
|
||||
## 2. 首页及亚模块更新红点
|
||||
|
||||
```http
|
||||
GET /api/app/content/update-markers
|
||||
```
|
||||
|
||||
返回:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"homeLatestAt": "2026-07-27T08:10:00Z",
|
||||
"todayLatestAt": "2026-07-27T08:10:00Z",
|
||||
"modules": [
|
||||
{
|
||||
"moduleId": "66a000000000000000000001",
|
||||
"latestAt": "2026-07-27T08:05:00Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `homeLatestAt`:主页“最新”内容最近审核通过时间。
|
||||
- `todayLatestAt`:“今日更新”最近审核通过时间;“今日”按 UTC+8 自然日计算。
|
||||
- `modules[].latestAt`:该亚模块视频最近审核通过时间;动漫、漫画等媒体取最近新增或子集更新时间。
|
||||
- 没有内容时对应时间为 `null`。
|
||||
- 客户端保存各入口的本地 `lastReadAt`。当 `latestAt > lastReadAt` 时显示红点,用户点击入口后更新本地已读时间。
|
||||
|
||||
## 3. 搜索专属视频访问
|
||||
|
||||
视频关键字搜索和片库搜索的每个视频对象新增:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "66b000000000000000000001",
|
||||
"searchAccessToken": "短时效凭证"
|
||||
}
|
||||
```
|
||||
|
||||
从搜索结果进入视频详情时原样传回:
|
||||
|
||||
```http
|
||||
GET /api/app/vid/info?videoID=66b000000000000000000001&searchAccessToken=短时效凭证
|
||||
```
|
||||
|
||||
- 普通视频详情可不传 `searchAccessToken`。
|
||||
- 凭证与当前用户、视频绑定,有效期 10 分钟。
|
||||
- 仅搜索可见的视频未传、传错或凭证过期时,接口按内容不存在处理。
|
||||
|
||||
## 4. AI 女友入口
|
||||
|
||||
App 从现有启动配置判断入口是否展示:
|
||||
|
||||
```http
|
||||
GET /api/app/ping/v
|
||||
```
|
||||
|
||||
使用字段 `aiGirlFriend`:
|
||||
|
||||
```json
|
||||
{
|
||||
"aiGirlFriend": true
|
||||
}
|
||||
```
|
||||
|
||||
`aiGirlFriend=true` 时展示入口。点击入口后调用:
|
||||
|
||||
```http
|
||||
POST /api/app/aimatev2/url
|
||||
```
|
||||
|
||||
无需请求体。成功响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"url": "https://example.com/ai"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
前端打开 `data.url`。该接口会先处理上一次未结算余额,再把用户主钱包的可用金币上分到 AI 女友;换算比例为 `10金币=1元`,前端不参与金额换算。
|
||||
|
||||
用户关闭 AI 女友页面或返回 App 后,调用现有钱包接口刷新余额:
|
||||
|
||||
```http
|
||||
GET /api/app/mine/wallet
|
||||
```
|
||||
|
||||
钱包接口会先尝试把 AI 女友剩余余额下分回主钱包,然后返回最新钱包数据;响应结构不变。历史别名 `GET /api/app/mine/qianbao` 同步支持,但新代码统一使用 `/mine/wallet`。
|
||||
|
||||
旧 `/api/app/aimate/*` 接口仅为旧客户端保留,新版 App/H5 不再调用 `login`、`getBalance`、`currencys` 或 `exchange`,也不再直接使用 `ping/v` 返回的 `aiMateH5`。
|
||||
|
||||
## 5. 管理后台配置
|
||||
|
||||
管理后台沿用现有接口:
|
||||
|
||||
```http
|
||||
POST /api/web/admin/module/conf/add
|
||||
POST /api/web/admin/module/conf/edit
|
||||
```
|
||||
|
||||
新增请求字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"onlineAt": "2026-07-27T08:00:00Z",
|
||||
"offlineAt": "2026-08-27T08:00:00Z",
|
||||
"excludeLatest": true,
|
||||
"excludeRecommend": true,
|
||||
"searchOnlyWhenInactive": true
|
||||
}
|
||||
```
|
||||
|
||||
编辑时清空时间限制:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "66a000000000000000000001",
|
||||
"clearOnlineAt": true,
|
||||
"clearOfflineAt": true
|
||||
}
|
||||
```
|
||||
|
||||
`offlineAt` 必须晚于 `onlineAt`,否则保存失败。
|
||||
Reference in New Issue
Block a user