daren/apps/discovery/discovery.md
2025-05-29 16:11:38 +08:00

613 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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/@name",
"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/@name",
"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/@name",
"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/@name",
"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/@name",
"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/@name",
"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/@name",
"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
}
```