批量上传并创建任务(超量自动拆分)
POST /api/openapi/uploadAndCreateTasks
功能说明
请求参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| file | form-data | File | 是 | 仅 .txt,≤ 1 GB |
| taskType | form-data | String | 是 | 业务类型,见任务类型列表 |
| description | form-data | String | 是 | 任务描述(通常为原始文件名) |
| countryCode | form-data | String | 是 | 国家代码(如:US) |
| countryAreaCode | form-data | String | 手机号类必填 | 区域代码(如:1)。邮箱/用户名类任务可不传;skipCountryFilter=true 时可不传 |
| skipDedup | form-data | Boolean | 否 | 是否跳过去重,默认 false。仅白名单任务类型支持 |
| skipCountryFilter | form-data | Boolean | 否 | 是否跳过国家/区号过滤,默认 false。仅白名单任务类型支持 |
countryAreaCode 说明
手机号类任务必须传入 countryAreaCode,缺失将直接返回错误「手机号类任务必须传入countryAreaCode(国家区号)」,不会创建任务。
邮箱类任务(email 及所有以 Email 结尾的类型)和 TG 用户名筛活跃(usernameActive)无需传入该参数。传了 skipCountryFilter=true 的请求也无需传入该参数。
skipDedup / skipCountryFilter
两个参数的含义、白名单限制与计费影响与一键上传并创建任务完全一致。
skipDedup=true 时,totalCount 与各分片任务的计费条数均包含重复号码;分片切割按文件顺序进行,重复号码可能落在不同任务中。
拆分规则
- 单任务拆分条数由平台与任务类型决定(一般为 100 万,部分渠道为 50 万),并且不超过产品配置的单任务最大条数
- 有效数据按拆分条数切片,每片创建一个任务;例如拆分条数 100 万、上传 1000 万条有效数据,将创建 10 个任务
- 末尾余量若不足产品最小条数,系统自动将其与前一分片合并后均分(前一个任务少一些、最后一个任务多一些),保证所有数据都被处理;例如拆分条数 100 万、余量 200 条时,最后两个任务各约 50 万条
- 仅在极端产品配置下均分也无法满足最小条数时,末尾余量才会被舍弃,条数计入返回字段
discardedCount(不扣费);正常情况下该字段恒为 0 - 余额校验按全部有效数据总费用进行,余额不足时不会创建任何任务
返回示例
{
"code": 200,
"msg": "文件上传并创建任务成功",
"data": {
"taskIds": [
"TASK-20250120110901-1001",
"TASK-20250120110902-1002",
"TASK-20250120110903-1003"
],
"taskCount": 3,
"totalCount": 2500000,
"splitSize": 1000000,
"discardedCount": 0
}
}
返回说明:
| 字段 | 类型 | 说明 |
|---|---|---|
| taskIds | String[] | 本次创建的全部任务 ID |
| taskCount | Integer | 创建的任务数量 |
| totalCount | Integer | 有效数据总条数(默认去重、过滤后;skipDedup=true 时含重复项) |
| splitSize | Integer | 单任务拆分条数上限 |
| discardedCount | Integer | 被舍弃的条数(正常恒为 0,仅极端配置下末尾余量无法重排时产生,不扣费) |
错误返回示例
{
"code": 500,
"msg": "余额不足,需要: 2500.00,当前余额: 1000.00,差额: 1500.00"
}
部分失败说明
若拆分过程中途失败(如个别分片文件创建失败),已创建的任务不会回滚(已扣费并进入处理队列),错误信息中会附带已成功创建的任务 ID,请据此对账:
{
"code": 500,
"msg": "拆分文件创建失败,已成功创建的任务ID:TASK-20250120110901-1001,TASK-20250120110902-1002"
}
与一键接口的选择
| 场景 | 建议接口 |
|---|---|
| 数据量不超过单任务上限 | 一键上传并创建任务(返回单个任务 ID,解析更简单) |
| 数据量可能超过单任务上限 | 本接口(自动拆分,返回任务 ID 数组) |
调用示例(Python)
import requests
import hmac
import hashlib
import base64
import time
# 1. 生成签名
timestamp = str(int(time.time() * 1000))
data = f"{account}:{timestamp}"
signature = base64.b64encode(
hmac.new(api_key.encode(), data.encode(), hashlib.sha256).digest()
).decode()
header_key = f"{timestamp}.{signature}"
# 2. 发送请求
files = {'file': open('data.txt', 'rb')}
data = {
'taskType': 'wsExist',
'description': 'data.txt',
'countryCode': 'US',
'countryAreaCode': '1'
}
headers = {
'X-Api-Account': account,
'X-Api-Key': header_key
}
response = requests.post(
'https://api.ts-filter.com/api/openapi/uploadAndCreateTasks',
files=files,
data=data,
headers=headers
)
# 3. 获取全部任务ID
result = response.json()
task_ids = result['data']['taskIds']
print(f"共创建 {result['data']['taskCount']} 个任务: {task_ids}")