@ikenxuan/amagi 4.4.20-pr117.e63d071 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +161 -3
- package/dist/default/cjs/index.cjs +2309 -2259
- package/dist/default/cjs/v5.cjs +3099 -0
- package/dist/default/esm/index.mjs +2288 -2206
- package/dist/default/esm/v5.mjs +3013 -0
- package/dist/default/index-V2X3Oo7Y.d.ts +15469 -0
- package/dist/default/index.d.ts +135 -14238
- package/dist/default/v5.d.ts +758 -0
- package/package.json +11 -3
- package/LICENSE +0 -674
package/README.md
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
"amagi" /ˈæmədʒi/ 名称灵感来源于网络谐音梗,在网络上 [BV1St41137jm](https://www.bilibili.com/video/BV1St41137jm) / [BV1DL411X7jE](https://www.bilibili.com/video/BV1DL411X7jE) 上广泛传播。🎤💃
|
|
8
8
|
|
|
9
|
-
|
|
10
9
|
## 项目简介 📝
|
|
11
10
|
|
|
12
11
|
本项目最初的代码从 [kkkkkk-10086](https://github.com/ikenxuan/kkkkkk-10086) 抽离。主要负责相关数据接口的封装。
|
|
@@ -21,7 +20,17 @@ amagi 将作为一个独立的上游模块,提供给下游 [karin-plugin-kkk](
|
|
|
21
20
|
pnpm add @ikenxuan/amagi@latest
|
|
22
21
|
```
|
|
23
22
|
|
|
24
|
-
##
|
|
23
|
+
## 版本说明 📋
|
|
24
|
+
|
|
25
|
+
### v4 版本 (推荐) 🔄
|
|
26
|
+
|
|
27
|
+
v4 版本保持向后兼容,是默认导入版本,适合现有项目的平滑迁移。
|
|
28
|
+
|
|
29
|
+
### v5 版本 (测试中 慎用) 🆕
|
|
30
|
+
|
|
31
|
+
v5 版本是当前的主要开发版本,提供了更好的错误处理、统一的响应格式和更强的类型安全性。
|
|
32
|
+
|
|
33
|
+
## 快速开始 (v4 版本) 🚀
|
|
25
34
|
|
|
26
35
|
### 基本用法 ✨
|
|
27
36
|
主要就两个方法,`getDouyinData` 和 `getBilibiliData`。
|
|
@@ -63,7 +72,156 @@ async function example() {
|
|
|
63
72
|
|
|
64
73
|
example()
|
|
65
74
|
```
|
|
66
|
-
|
|
75
|
+
|
|
76
|
+
## v5 版本完整指南 🆕
|
|
77
|
+
|
|
78
|
+
### v5 版本使用方式
|
|
79
|
+
|
|
80
|
+
```javascript
|
|
81
|
+
// v5 版本导入方式
|
|
82
|
+
import { createAmagiClient } from '@ikenxuan/amagi/v5'
|
|
83
|
+
// 或者
|
|
84
|
+
import amagi from '@ikenxuan/amagi/v5'
|
|
85
|
+
|
|
86
|
+
const client = createAmagiClient({ douyin: 'your_cookie' })
|
|
87
|
+
const result = await client.getDouyinData('搜索数据', { keyword: '测试' })
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### v5 版本主要变化
|
|
91
|
+
|
|
92
|
+
#### 1. 统一的响应格式 📦
|
|
93
|
+
|
|
94
|
+
v5 版本所有 API 返回统一的响应格式:
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
interface ApiResponse<T> {
|
|
98
|
+
data: T | null // 实际数据
|
|
99
|
+
message: string // 响应消息
|
|
100
|
+
code: number // 状态码
|
|
101
|
+
requestPath?: string // 请求路径
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
#### 2. 更好的错误处理 🛡️
|
|
106
|
+
|
|
107
|
+
```javascript
|
|
108
|
+
// v5 版本错误处理
|
|
109
|
+
const result = await client.getDouyinData('搜索数据', { keyword: '测试' })
|
|
110
|
+
if (result.success) {
|
|
111
|
+
console.log('数据:', result.data)
|
|
112
|
+
} else {
|
|
113
|
+
console.error('错误:', result.message)
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### 3. 类型模式控制 🎯
|
|
118
|
+
|
|
119
|
+
支持 `strict` 和 `loose` 两种类型模式:
|
|
120
|
+
|
|
121
|
+
```javascript
|
|
122
|
+
// 严格模式 - 完整类型检查
|
|
123
|
+
const strictResult = await client.getDouyinData(
|
|
124
|
+
'搜索数据',
|
|
125
|
+
{ keyword: '测试', typeMode: 'strict' }
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
// 宽松模式 - 灵活的类型处理
|
|
129
|
+
const looseResult = await client.getDouyinData(
|
|
130
|
+
'搜索数据',
|
|
131
|
+
{ keyword: '测试', typeMode: 'loose' }
|
|
132
|
+
)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
#### 4. 强化的参数验证 🔍
|
|
136
|
+
v5 版本引入了 Zod 进行运行时参数验证,确保数据类型安全和参数完整性。
|
|
137
|
+
PS: 当前更改已在 v4.5.0 往后的版本实装
|
|
138
|
+
|
|
139
|
+
```javascript
|
|
140
|
+
// 自动参数验证
|
|
141
|
+
const result = await client.getDouyinData('搜索数据', {
|
|
142
|
+
keyword: '测试', // ✅ 必需参数
|
|
143
|
+
offset: 0, // ✅ 可选参数,类型正确
|
|
144
|
+
count: 20 // ✅ 可选参数,类型正确
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
// 参数验证失败示例
|
|
148
|
+
const invalidResult = await client.getDouyinData('搜索数据', {
|
|
149
|
+
// ❌ 缺少必需参数 keyword
|
|
150
|
+
offset: 'invalid' // ❌ 类型错误,应为 number
|
|
151
|
+
})
|
|
152
|
+
// 返回: { success: false, message: '参数验证失败: ...', code: 400 }
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
验证特性:
|
|
156
|
+
|
|
157
|
+
- 🔒 类型安全 :确保参数类型正确
|
|
158
|
+
- ✅ 必需参数检查 :自动验证必需参数是否存在
|
|
159
|
+
- 🎯 值范围验证 :验证数值范围、字符串长度等
|
|
160
|
+
- 🛡️ 注入防护 :防止恶意参数注入
|
|
161
|
+
- 📝 详细错误信息 :提供具体的验证失败原因
|
|
162
|
+
|
|
163
|
+
```javascript
|
|
164
|
+
// 验证错误响应示例
|
|
165
|
+
{
|
|
166
|
+
code: 400,
|
|
167
|
+
message: "参数验证失败",
|
|
168
|
+
data: null,
|
|
169
|
+
errors: [
|
|
170
|
+
{
|
|
171
|
+
path: ["keyword"],
|
|
172
|
+
message: "必需参数",
|
|
173
|
+
code: "invalid_type"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
path: ["offset"],
|
|
177
|
+
message: "期望 number 类型,收到 string",
|
|
178
|
+
code: "invalid_type"
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### v5 版本兼容性更改 🔄
|
|
185
|
+
|
|
186
|
+
#### 向后兼容性 ✅
|
|
187
|
+
|
|
188
|
+
- **v4 API 完全兼容**:现有的 v4 代码无需修改即可继续使用
|
|
189
|
+
- **默认导入保持 v4**:`import Client from '@ikenxuan/amagi'` 仍然使用 v4 版本
|
|
190
|
+
- **渐进式迁移**:可以逐步迁移到 v5 版本,无需一次性重写
|
|
191
|
+
|
|
192
|
+
#### 迁移指南 📖
|
|
193
|
+
|
|
194
|
+
##### 从 v4 迁移到 v5
|
|
195
|
+
|
|
196
|
+
1. **更新导入语句**:
|
|
197
|
+
```javascript
|
|
198
|
+
// v4
|
|
199
|
+
import Client from '@ikenxuan/amagi'
|
|
200
|
+
|
|
201
|
+
// v5
|
|
202
|
+
import Client from '@ikenxuan/amagi/v5'
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
2. **处理响应格式**:
|
|
206
|
+
```javascript
|
|
207
|
+
// v4 - 直接返回数据
|
|
208
|
+
const data = await amagi.getDouyinData('搜索数据', { keyword: '测试' })
|
|
209
|
+
|
|
210
|
+
// v5 - 包装的响应格式
|
|
211
|
+
const response = await client.getDouyinData('搜索数据', { keyword: '测试' })
|
|
212
|
+
const data = response.data
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
#### 破坏性变更 ⚠️
|
|
216
|
+
|
|
217
|
+
v5 版本的破坏性变更:
|
|
218
|
+
|
|
219
|
+
1. **响应格式变更**:所有 API 返回包装的响应对象而非直接数据
|
|
220
|
+
2. **服务器方法重命名**:`startClient()` 重命名为 `startServer()`
|
|
221
|
+
3. **错误处理方式**:错误不再抛出异常,而是在响应对象中返回
|
|
222
|
+
|
|
223
|
+
## 高级用法 🔧
|
|
224
|
+
|
|
67
225
|
### 启动本地 HTTP 服务 🌐
|
|
68
226
|
|
|
69
227
|
```javascript
|