613 lines
17 KiB
Markdown
613 lines
17 KiB
Markdown
# Discovery模块API文档
|
||
|
||
## 概述
|
||
|
||
Discovery (发现) 模块是一个用于搜索和发现创作者/达人的系统。该模块提供了一系列RESTful API接口,用于创建搜索会话、搜索创作者和查询历史搜索结果。
|
||
|
||
## 通用响应格式
|
||
|
||
所有API响应都遵循以下统一的JSON格式:
|
||
|
||
```json
|
||
{
|
||
"code": 200, // 状态码,200表示成功,其他值表示错误
|
||
"message": "成功", // 响应消息
|
||
"data": {} // 响应数据,可能是对象、数组或null
|
||
}
|
||
```
|
||
|
||
## 分页响应格式
|
||
|
||
使用分页的接口将返回以下格式:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "获取数据成功",
|
||
"data": {
|
||
"count": 100, // 总记录数
|
||
"next": "下一页URL或null", // 下一页链接
|
||
"previous": "上一页URL或null", // 上一页链接
|
||
"results": [] // 当前页的数据
|
||
}
|
||
}
|
||
```
|
||
|
||
## 认证方式
|
||
|
||
所有接口都需要使用自定义Token认证,请在HTTP请求头中添加以下字段:
|
||
|
||
```
|
||
Authorization: Token your_token_here
|
||
```
|
||
|
||
## 1. 搜索会话管理 (Sessions)
|
||
|
||
搜索会话保存了搜索历史记录和搜索结果,便于追踪和回顾之前的搜索。
|
||
|
||
### 1.1 获取搜索会话列表
|
||
|
||
- **URL**: `/sessions/`
|
||
- **方法**: `GET`
|
||
- **描述**: 获取所有搜索会话的列表
|
||
- **请求参数**:
|
||
- `page`: 页码,默认为1
|
||
- `page_size`: 每页记录数,默认为20,最大为100
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "获取搜索会话列表成功",
|
||
"data": {
|
||
"count": 10,
|
||
"next": null,
|
||
"previous": null,
|
||
"results": [
|
||
{
|
||
"id": 1,
|
||
"session_number": 1,
|
||
"creator_count": 20,
|
||
"shoppable_creators": 15,
|
||
"avg_followers": 10000.5,
|
||
"avg_gmv": 5000.25,
|
||
"avg_video_views": 20000.75,
|
||
"date_created": "2023-06-01"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 1.2 创建搜索会话
|
||
|
||
- **URL**: `/sessions/`
|
||
- **方法**: `POST`
|
||
- **描述**: 创建一个新的搜索会话
|
||
- **请求参数**:
|
||
```json
|
||
{
|
||
"session_number": 1, // 可选,默认为1
|
||
"creator_count": 0, // 可选,默认为0
|
||
"shoppable_creators": 0, // 可选,默认为0
|
||
"avg_followers": 0, // 可选,默认为0
|
||
"avg_gmv": 0, // 可选,默认为0
|
||
"avg_video_views": 0, // 可选,默认为0
|
||
"date_created": "2023-06-01" // 可选,默认为当前日期
|
||
}
|
||
```
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "创建搜索会话成功",
|
||
"data": {
|
||
"id": 1,
|
||
"session_number": 1,
|
||
"creator_count": 0,
|
||
"shoppable_creators": 0,
|
||
"avg_followers": 0,
|
||
"avg_gmv": 0,
|
||
"avg_video_views": 0,
|
||
"date_created": "2023-06-01"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 1.3 获取搜索会话详情
|
||
|
||
- **URL**: `/sessions/{id}/`
|
||
- **方法**: `GET`
|
||
- **描述**: 获取指定ID的搜索会话详情,包含相关的创作者数据
|
||
- **请求参数**: 无
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "获取搜索会话详情成功",
|
||
"data": {
|
||
"id": 1,
|
||
"session_number": 1,
|
||
"creator_count": 20,
|
||
"shoppable_creators": 15,
|
||
"avg_followers": 10000.5,
|
||
"avg_gmv": 5000.25,
|
||
"avg_video_views": 20000.75,
|
||
"date_created": "2023-06-01",
|
||
"creators": [
|
||
{
|
||
"id": 1,
|
||
"session": 1,
|
||
"name": "创作者名称",
|
||
"avatar": "https://example.com/avatar.jpg",
|
||
"category": "Sports & Outdoor",
|
||
"ecommerce_level": "L3",
|
||
"exposure_level": "KOL-2",
|
||
"followers": 15000,
|
||
"gmv": 8000,
|
||
"items_sold": 500,
|
||
"avg_video_views": 25000,
|
||
"has_ecommerce": true,
|
||
"tiktok_url": "https://tiktok.com/@username",
|
||
"hashtags": "#sport#fitness#outdoor",
|
||
"trends": "summer fitness",
|
||
"profile": "tiktok"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 1.4 更新搜索会话
|
||
|
||
- **URL**: `/sessions/{id}/`
|
||
- **方法**: `PUT`/`PATCH`
|
||
- **描述**: 更新指定ID的搜索会话信息
|
||
- **请求参数**: 同创建搜索会话
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "更新搜索会话成功",
|
||
"data": {
|
||
"id": 1,
|
||
"session_number": 2,
|
||
"creator_count": 25,
|
||
"shoppable_creators": 18,
|
||
"avg_followers": 12000.5,
|
||
"avg_gmv": 6000.25,
|
||
"avg_video_views": 22000.75,
|
||
"date_created": "2023-06-01"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 1.5 删除搜索会话
|
||
|
||
- **URL**: `/sessions/{id}/`
|
||
- **方法**: `DELETE`
|
||
- **描述**: 删除指定ID的搜索会话
|
||
- **请求参数**: 无
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "删除搜索会话成功",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
### 1.6 获取会话创作者列表
|
||
|
||
- **URL**: `/sessions/{id}/results/`
|
||
- **方法**: `GET`
|
||
- **描述**: 获取指定会话的搜索结果(创作者列表)
|
||
- **请求参数**:
|
||
- `page`: 页码,默认为1
|
||
- `page_size`: 每页记录数,默认为20,最大为100
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "获取会话创作者列表成功",
|
||
"data": {
|
||
"count": 20,
|
||
"next": null,
|
||
"previous": null,
|
||
"results": [
|
||
{
|
||
"id": 1,
|
||
"session": 1,
|
||
"name": "创作者名称",
|
||
"avatar": "https://example.com/avatar.jpg",
|
||
"category": "Sports & Outdoor",
|
||
"ecommerce_level": "L3",
|
||
"exposure_level": "KOL-2",
|
||
"followers": 15000,
|
||
"gmv": 8000,
|
||
"items_sold": 500,
|
||
"avg_video_views": 25000,
|
||
"has_ecommerce": true,
|
||
"tiktok_url": "https://tiktok.com/@username",
|
||
"hashtags": "#sport#fitness#outdoor",
|
||
"trends": "summer fitness",
|
||
"profile": "tiktok"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 1.7 获取会话摘要
|
||
|
||
- **URL**: `/sessions/summary/`
|
||
- **方法**: `GET`
|
||
- **描述**: 获取所有会话的摘要数据,用于展示在表格中
|
||
- **请求参数**: 无
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "获取会话摘要列表成功",
|
||
"data": [
|
||
{
|
||
"id": 1,
|
||
"session_number": 1,
|
||
"date": "2023-06-01",
|
||
"creator_count": 20,
|
||
"shoppable_creators": 15,
|
||
"avg_followers": 10000.5,
|
||
"avg_gmv": 5000.25,
|
||
"avg_video_views": 20000.75
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 1.8 搜索会话
|
||
|
||
- **URL**: `/sessions/search/`
|
||
- **方法**: `GET`
|
||
- **描述**: 根据关键词搜索会话,支持模糊匹配
|
||
- **请求参数**:
|
||
- `keyword`: 搜索关键词(必填),可以是会话ID、会话编号、日期或日期的一部分(如年份"2025"或月份"6")
|
||
- **搜索说明**:
|
||
- 支持按会话ID或会话编号精确搜索
|
||
- 支持按完整日期格式(如"2023-06-01")搜索
|
||
- 支持按年份(如"2025")搜索该年的所有会话
|
||
- 支持按月份数字(1-12)或月份名称(如"june"、"六月")搜索
|
||
- 支持模糊匹配ID和会话编号
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "搜索会话成功,关键词: 2025",
|
||
"data": [
|
||
{
|
||
"id": 1,
|
||
"session_number": 1,
|
||
"date": "2025-06-01",
|
||
"creator_count": 20,
|
||
"shoppable_creators": 15,
|
||
"avg_followers": 10000.5,
|
||
"avg_gmv": 5000.25,
|
||
"avg_video_views": 20000.75
|
||
},
|
||
{
|
||
"id": 2,
|
||
"session_number": 2,
|
||
"date": "2025-07-15",
|
||
"creator_count": 18,
|
||
"shoppable_creators": 12,
|
||
"avg_followers": 12000.5,
|
||
"avg_gmv": 6000.25,
|
||
"avg_video_views": 25000.75
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## 2. 创作者管理 (Creators)
|
||
|
||
创作者是系统中的核心数据实体,代表平台上的内容创作者/达人。
|
||
|
||
### 2.1 获取创作者列表
|
||
|
||
- **URL**: `/creators/`
|
||
- **方法**: `GET`
|
||
- **描述**: 获取所有创作者的列表
|
||
- **请求参数**:
|
||
- `page`: 页码,默认为1
|
||
- `page_size`: 每页记录数,默认为20,最大为100
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "获取创作者列表成功",
|
||
"data": {
|
||
"count": 100,
|
||
"next": "http://example.com/api/creators/?page=2",
|
||
"previous": null,
|
||
"results": [
|
||
{
|
||
"id": 1,
|
||
"session": 1,
|
||
"name": "创作者名称",
|
||
"avatar": "https://example.com/avatar.jpg",
|
||
"category": "Sports & Outdoor",
|
||
"ecommerce_level": "L3",
|
||
"exposure_level": "KOL-2",
|
||
"followers": 15000,
|
||
"gmv": 8000,
|
||
"items_sold": 500,
|
||
"avg_video_views": 25000,
|
||
"has_ecommerce": true,
|
||
"tiktok_url": "https://tiktok.com/@username",
|
||
"hashtags": "#sport#fitness#outdoor",
|
||
"trends": "summer fitness",
|
||
"profile": "tiktok"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2.2 获取创作者详情
|
||
|
||
- **URL**: `/creators/{id}/`
|
||
- **方法**: `GET`
|
||
- **描述**: 获取指定ID的创作者详细信息
|
||
- **请求参数**: 无
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "获取创作者详情成功",
|
||
"data": {
|
||
"id": 1,
|
||
"session": 1,
|
||
"name": "创作者名称",
|
||
"avatar": "https://example.com/avatar.jpg",
|
||
"category": "Sports & Outdoor",
|
||
"ecommerce_level": "L3",
|
||
"exposure_level": "KOL-2",
|
||
"followers": 15000,
|
||
"gmv": 8000,
|
||
"items_sold": 500,
|
||
"avg_video_views": 25000,
|
||
"has_ecommerce": true,
|
||
"tiktok_url": "https://tiktok.com/@username",
|
||
"hashtags": "#sport#fitness#outdoor",
|
||
"trends": "summer fitness",
|
||
"profile": "tiktok"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2.3 搜索创作者
|
||
|
||
- **URL**: `/creators/search/`
|
||
- **方法**: `POST`
|
||
- **描述**: 根据多种条件搜索创作者,会自动创建搜索会话并保存搜索结果
|
||
- **请求参数**:
|
||
```json
|
||
{
|
||
"query": "运动", // 可选,搜索关键词
|
||
"category": "Sports & Outdoor", // 可选,类别
|
||
"ecommerce_level": "L3", // 可选,电商等级(L1-L5)
|
||
"exposure_level": "KOL-2", // 可选,曝光等级
|
||
"hashtag": "fitness", // 可选,标签
|
||
"trend": "summer", // 可选,趋势
|
||
"profile": "tiktok" // 可选,平台(tiktok、instagram等)
|
||
}
|
||
```
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "搜索创作者成功",
|
||
"data": {
|
||
"id": 1,
|
||
"session_number": 1,
|
||
"creator_count": 5,
|
||
"shoppable_creators": 3,
|
||
"avg_followers": 12000.5,
|
||
"avg_gmv": 5500.25,
|
||
"avg_video_views": 20500.75,
|
||
"date_created": "2023-06-01",
|
||
"creators": [
|
||
{
|
||
"id": 1,
|
||
"session": 1,
|
||
"name": "创作者名称",
|
||
"avatar": "https://example.com/avatar.jpg",
|
||
"category": "Sports & Outdoor",
|
||
"ecommerce_level": "L3",
|
||
"exposure_level": "KOL-2",
|
||
"followers": 15000,
|
||
"gmv": 8000,
|
||
"items_sold": 500,
|
||
"avg_video_views": 25000,
|
||
"has_ecommerce": true,
|
||
"tiktok_url": "https://tiktok.com/@username",
|
||
"hashtags": "#sport#fitness#outdoor",
|
||
"trends": "summer fitness",
|
||
"profile": "tiktok"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2.4 搜索标签和趋势
|
||
|
||
- **URL**: `/creators/search_tags/`
|
||
- **方法**: `POST`
|
||
- **描述**: 专门用于搜索标签和趋势,会创建搜索会话并保存搜索结果
|
||
- **请求参数**:
|
||
```json
|
||
{
|
||
"mode": "hashtag", // 必填,搜索模式,"hashtag"或"trend"
|
||
"keyword": "fitness", // 必填,搜索关键词
|
||
"profile": "tiktok" // 可选,平台
|
||
}
|
||
```
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "搜索hashtag成功,关键词: fitness",
|
||
"data": {
|
||
"id": 1,
|
||
"session_number": 1,
|
||
"creator_count": 8,
|
||
"shoppable_creators": 5,
|
||
"avg_followers": 13000.5,
|
||
"avg_gmv": 6500.25,
|
||
"avg_video_views": 22500.75,
|
||
"date_created": "2023-06-01",
|
||
"creators": [
|
||
{
|
||
"id": 1,
|
||
"session": 1,
|
||
"name": "创作者名称",
|
||
"avatar": "https://example.com/avatar.jpg",
|
||
"category": "Sports & Outdoor",
|
||
"ecommerce_level": "L3",
|
||
"exposure_level": "KOL-2",
|
||
"followers": 15000,
|
||
"gmv": 8000,
|
||
"items_sold": 500,
|
||
"avg_video_views": 25000,
|
||
"has_ecommerce": true,
|
||
"tiktok_url": "https://tiktok.com/@username",
|
||
"hashtags": "#sport#fitness#outdoor",
|
||
"trends": "summer fitness",
|
||
"profile": "tiktok"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2.5 自然语言搜索创作者
|
||
|
||
- **URL**: `/creators/search_individual/`
|
||
- **方法**: `POST`
|
||
- **描述**: 根据用户输入的自然语言文本搜索达人,使用外部API进行处理
|
||
- **请求参数**:
|
||
```json
|
||
{
|
||
"criteria": "我需要粉丝超过10万的健身类达人,擅长做运动装备测评", // 必填,搜索条件
|
||
"top_n": 10 // 可选,返回结果数量,默认10
|
||
}
|
||
```
|
||
- **响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "搜索创作者成功",
|
||
"data": {
|
||
"id": 1,
|
||
"session_number": 1,
|
||
"creator_count": 10,
|
||
"shoppable_creators": 7,
|
||
"avg_followers": 150000.5,
|
||
"avg_gmv": 9500.25,
|
||
"avg_video_views": 35000.75,
|
||
"date_created": "2023-06-01",
|
||
"creators": [
|
||
{
|
||
"id": 1,
|
||
"session": 1,
|
||
"name": "创作者名称",
|
||
"avatar": "https://example.com/avatar.jpg",
|
||
"category": "Sports & Outdoor",
|
||
"ecommerce_level": "L4",
|
||
"exposure_level": "KOL-2",
|
||
"followers": 180000,
|
||
"gmv": 12000,
|
||
"items_sold": 800,
|
||
"avg_video_views": 45000,
|
||
"has_ecommerce": true,
|
||
"tiktok_url": "https://tiktok.com/@username",
|
||
"hashtags": "#sport#fitness#outdoor#review",
|
||
"trends": "fitness equipment review",
|
||
"profile": "tiktok"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
## 3. 字段说明
|
||
|
||
### 3.1 搜索会话字段
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|------------------|---------|------------------------------|
|
||
| id | 整数 | 会话ID |
|
||
| session_number | 整数 | 会话编号 |
|
||
| creator_count | 整数 | 创作者数量 |
|
||
| shoppable_creators | 整数 | 可购物创作者数量 |
|
||
| avg_followers | 浮点数 | 平均粉丝数 |
|
||
| avg_gmv | 浮点数 | 平均GMV(商品总价值) |
|
||
| avg_video_views | 浮点数 | 平均视频观看量 |
|
||
| date_created | 日期 | 创建日期 |
|
||
|
||
### 3.2 创作者字段
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|------------------|---------|------------------------------|
|
||
| id | 整数 | 创作者ID |
|
||
| session | 整数 | 所属会话ID |
|
||
| name | 字符串 | 创作者名称 |
|
||
| avatar | URL | 头像链接 |
|
||
| category | 字符串 | 类别,可选值:Phones & Electronics, Womenswear & Underwear等 |
|
||
| ecommerce_level | 字符串 | 电商等级,可选值:L1, L2, L3, L4, L5, New tag |
|
||
| exposure_level | 字符串 | 曝光等级,可选值:KOC-1, KOC-2, KOL-2, KOL-3, New tag |
|
||
| followers | 浮点数 | 粉丝数 |
|
||
| gmv | 浮点数 | GMV(商品总价值) |
|
||
| items_sold | 浮点数 | 已售项目数 |
|
||
| avg_video_views | 浮点数 | 平均视频观看量 |
|
||
| has_ecommerce | 布尔值 | 是否有电商 |
|
||
| tiktok_url | URL | 抖音链接 |
|
||
| hashtags | 字符串 | 标签,格式如"#sport#fitness" |
|
||
| trends | 字符串 | 趋势,格式如"summer fitness" |
|
||
| profile | 字符串 | 达人平台,可选值:tiktok, instagram, youtube, xiaohongshu, other |
|
||
|
||
## 4. 使用示例
|
||
|
||
### 4.1 搜索标签为"fitness"的TikTok创作者
|
||
|
||
```http
|
||
POST /api/creators/search_tags/
|
||
Content-Type: application/json
|
||
Authorization: Token your_token_here
|
||
|
||
{
|
||
"mode": "hashtag",
|
||
"keyword": "fitness",
|
||
"profile": "tiktok"
|
||
}
|
||
```
|
||
|
||
### 4.2 获取最近一次搜索会话的详情
|
||
|
||
```http
|
||
GET /api/sessions/1/
|
||
Authorization: Token your_token_here
|
||
```
|
||
|
||
### 4.3 使用自然语言搜索创作者
|
||
|
||
```http
|
||
POST /api/creators/search_individual/
|
||
Content-Type: application/json
|
||
Authorization: Token your_token_here
|
||
|
||
{
|
||
"criteria": "需要3个粉丝超过50万的美妆达人,产品转化率高",
|
||
"top_n": 3
|
||
}
|
||
```
|