仅 Max 版支持 API 调用。试用版、Pro 版需通过软件 UI 界面手动操作。
- 服务地址:
http://localhost:5001 - 鉴权:无需 token 或额外 headers
- 示例语言:Python +
requests - 超时:示例中为 10~30s,可按需调整
环境准备
pip install requests
import requests
BASE_URL = "http://localhost:5001"
接口总览
| # | 功能 | Method & Path | 关键入参 | 典型返回 |
|---|---|---|---|---|
| 1 | 获取公众号列表 | GET /api/gzh/list | offset, num, sort, direction | Gzhs[], Total, Articles |
| 2 | 公众号文章列表 | GET /api/report/gzh_articles | biz, offset, num, sort, direction | Articles[], Total |
| 3 | 获取文章正文 | GET /api/article/content | nickname, id | Content (markdown+元信息) |
| 4 | 导出文本 | GET /api/article/export_text | biz, nickname, only_main, need_img, open_dir | success_num |
| 5 | 导出 CSV/XLSX | GET /api/gzh/export_csv | biz, nickname, open_dir | 导出行数 (int) |
| 6 | 创建文章链接任务 | POST /api/task/new | JSON: biz, nickname, crawlerType=gzh_article_link 等 | status, task_id |
| 7 | 创建正文任务 | POST /api/task/new | JSON: biz, nickname, crawlerType=article 等 | status, task_id |
| 8 | 创建阅读数据任务 | POST /api/task/new | JSON: biz, nickname, crawlerType=reading_data 等 | status, task_id |
| 9 | 批量建任务 | POST /api/batch_task/create_task | JSON: 文章列表/正文参数 | total, article_link_total, ... |
| 10 | 清空部分批量任务 | POST /api/batch_task/delete_task | 空 JSON | delete_task_count |
| 11 | 启动任务队列 | POST /api/task/control | JSON: command=run | status, data |
| 12 | 查询未完成任务 | GET /api/task/all | 无 | tasks[] |
1. 获取公众号列表
GET /api/gzh/list
参数(Query):
| 名称 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
offset | int | 否 | 0 | 分页偏移 |
num | int | 否 | 50 | 每页数量 |
sort | str | 否 | updated_at | 排序字段 |
direction | str | 否 | desc | asc 或 desc |
返回要点:Gzhs 列表含 Biz, Nickname, Img, Status, TotalArticleNum 等;Total 为公众号总数,Articles 为文章总数。若只要已完成的号,可在客户端筛 Status == "finished"。
示例:
resp = requests.get(
f"{BASE_URL}/api/gzh/list",
params={"offset": 0, "num": 20, "sort": "updated_at", "direction": "desc"},
timeout=10,
)
resp.raise_for_status()
raw = resp.json()
finished_only = [g for g in raw.get("Gzhs", []) if g.get("Status") == "finished"]
2. 公众号文章列表
GET /api/report/gzh_articles
参数(Query):
| 名称 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
biz | str | 是 | - | 公众号 Biz |
offset | int | 否 | 0 | 分页偏移 |
num | int | 否 | 20 | 每页数量 |
sort | str | 否 | p_date | p_date/read_num/like_num 等 |
direction | str | 否 | desc | asc 或 desc |
返回要点:Articles[] 含 ID, Title, PDate(unix秒), ReadNum, LikeNum, Mov(1=头条) 等;Total 为文章总数;附带 Gzh 基本信息。
示例:
resp = requests.get(
f"{BASE_URL}/api/report/gzh_articles",
params={
"biz": "xxxxx==",
"offset": 0,
"num": 20,
"sort": "p_date",
"direction": "desc",
},
timeout=10,
)
resp.raise_for_status()
articles = resp.json()
3. 获取文章正文
GET /api/article/content
参数(Query):
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
nickname | str | 是 | 公众号昵称 |
id | str | 是 | 文章 ID |
返回要点:Content 字段已包含标题/作者/阅读点赞等元信息和正文 markdown,可直接存储或复制。
示例:
resp = requests.get(
f"{BASE_URL}/api/article/content",
params={"nickname": "示例公众号", "id": "000001234567890"},
timeout=10,
)
resp.raise_for_status()
article = resp.json()
4. 导出文本
GET /api/article/export_text
参数(Query):
| 名称 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
biz | str | 是 | - | 公众号 Biz |
nickname | str | 是 | - | 公众号昵称 |
only_main | bool | 否 | False | 仅导出头条 |
need_img | bool | 否 | False | 是否保留图片 |
open_dir | bool | 否 | True | 导出后是否自动打开目录 |
返回要点:{"success_num": <导出数量>};服务器会在本地生成文本文件。
示例:
resp = requests.get(
f"{BASE_URL}/api/article/export_text",
params={
"biz": "xxxxx==",
"nickname": "示例公众号",
"only_main": False,
"need_img": False,
"open_dir": True,
},
timeout=30,
)
resp.raise_for_status()
export_txt = resp.json()
5. 导出 CSV/XLSX
GET /api/gzh/export_csv
参数(Query):
| 名称 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
biz | str | 是 | - | 公众号 Biz |
nickname | str | 是 | - | 公众号昵称 |
open_dir | bool | 否 | True | 完成后是否自动打开目录 |
返回要点:导出的行数(整数);后端会生成 CSV/XLSX 文件。
示例:
resp = requests.get(
f"{BASE_URL}/api/gzh/export_csv",
params={"biz": "xxxxx==", "nickname": "示例公众号", "open_dir": False},
timeout=30,
)
resp.raise_for_status()
export_csv = resp.json()
6. 创建文章链接任务
POST /api/task/new
请求体(JSON):
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
biz | str | 是 | - | 公众号 Biz |
nickname | str | 是 | - | 公众号昵称 |
img | str | 否 | "" | 头像 URL |
crawlerType | str | 是 | gzh_article_link | 固定值,采集文章链接 |
articleListType | str | 否 | all | `all |
articleListDate | int | 否 | 0 | 当 articleListType=date 时使用(unix秒) |
articleListAmount | int | 否 | 1000 | 当 articleListType=amount 时使用 |
articleListOffset | int | 否 | 0 | 分页偏移 |
返回要点:{"status": "ok|error", "task_id": <int>, "tasks": [...], "msg": "..."}。
示例:
payload = {
"biz": "xxxxx==",
"nickname": "示例公众号",
"img": "",
"crawlerType": "gzh_article_link",
"articleListType": "all",
"articleListDate": 0,
"articleListAmount": 1000,
"articleListOffset": 0,
}
resp = requests.post(f"{BASE_URL}/api/task/new", json=payload, timeout=10)
resp.raise_for_status()
new_task = resp.json()
7. 创建文章正文任务
POST /api/task/new
请求体(JSON):
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
biz | str | 是 | - | 公众号 Biz |
nickname | str | 是 | - | 公众号昵称 |
img | str | 否 | "" | 头像 URL |
crawlerType | str | 是 | article | 固定值,采集正文 |
articleRefresh | bool | 否 | False | 是否强制重新采集正文 |
articleImgDownload | bool | 否 | False | 是否下载正文图片 |
返回要点:与 #6 相同。若未先创建文章链接任务,后端会返回 “请先创建文章链接任务”。
示例:
payload = {
"biz": "xxxxx==",
"nickname": "示例公众号",
"img": "",
"crawlerType": "article",
"articleRefresh": False,
"articleImgDownload": False,
}
resp = requests.post(f"{BASE_URL}/api/task/new", json=payload, timeout=10)
resp.raise_for_status()
article_task = resp.json()
8. 创建阅读数据任务
POST /api/task/new
请求体(JSON):
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
biz | str | 是 | - | 公众号 Biz |
nickname | str | 是 | - | 公众号昵称 |
img | str | 否 | "" | 头像 URL |
crawlerType | str | 是 | reading_data | 固定值,采集阅读数据 |
readingDataType | str | 否 | all | `all |
readingDataStartDate | int | 否 | 0 | readingDataType=date 时使用(unix秒) |
readingDataEndDate | int | 否 | 0 | 同上 |
readingDataAmount | int | 否 | 1000 | readingDataType=amount 时使用 |
readingDataOnlyMain | bool | 否 | True | 是否只采头条 |
readingDataRefresh | bool | 否 | False | 是否重新采集已存在数据 |
返回要点:同 #6;若缺少文章链接任务或文章数量为 0,会被拒绝。
示例:
payload = {
"biz": "xxxxx==",
"nickname": "示例公众号",
"img": "",
"crawlerType": "reading_data",
"readingDataType": "all",
"readingDataStartDate": 0,
"readingDataEndDate": 0,
"readingDataAmount": 1000,
"readingDataOnlyMain": True,
"readingDataRefresh": False,
}
resp = requests.post(f"{BASE_URL}/api/task/new", json=payload, timeout=10)
resp.raise_for_status()
reading_task = resp.json()
9. 批量创建任务
POST /api/batch_task/create_task
用途:对所有 HowMaxUpdateArticle != 0 的公众号批量生成任务(0=不处理,1=仅链接任务,2=链接+正文)。需要 Max 授权且剩余时长 > 2 小时。
请求体(JSON):
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
articleListType | str | 否 | all | `all |
articleListDate | int | 否 | 0 | articleListType=date 时使用 |
articleListAmount | int | 否 | 1000 | articleListType=amount 时使用 |
articleListOffset | int | 否 | 0 | 分页偏移 |
articleRefresh | bool | 否 | False | 创建正文任务时是否重新采集 |
articleImgDownload | bool | 否 | False | 创建正文任务时是否下载图片 |
返回要点:status, message, total, article_link_total, article_content_total, gzh_total, delete_task_count。
示例:
payload = {
"articleListType": "all",
"articleListDate": 0,
"articleListAmount": 1000,
"articleListOffset": 0,
"articleRefresh": False,
"articleImgDownload": False,
}
resp = requests.post(f"{BASE_URL}/api/batch_task/create_task", json=payload, timeout=20)
resp.raise_for_status()
batch_result = resp.json()
10. 清空部分批量任务
POST /api/batch_task/delete_task
请求体:空对象 {}。
返回要点:{"status": "ok|error", "message": "...", "delete_task_count": <int>};会清理状态为 ready 或 error 的任务。
示例:
resp = requests.post(f"{BASE_URL}/api/batch_task/delete_task", json={}, timeout=10)
resp.raise_for_status()
cleanup = resp.json()
11. 启动任务队列
POST /api/task/control
请求体(JSON):{"command": "run"}。
返回要点:status 取值 started|running|unactivated|not_max_version;data 为任务数量或到期秒数,msg 可选。
示例:
resp = requests.post(f"{BASE_URL}/api/task/control", json={"command": "run"}, timeout=10)
resp.raise_for_status()
start = resp.json()
12. 查询未完成任务
GET /api/task/all
参数:无。
返回要点:tasks[],字段示例 ID, Biz, Nickname, CrawlerType, Status, CreatedAt, UpdatedAt 以及各类进度字段。
示例:
resp = requests.get(f"{BASE_URL}/api/task/all", timeout=10)
resp.raise_for_status()
tasks = resp.json()
常见错误与排查
- 创建正文/阅读数据任务前确保已创建文章链接任务,否则返回提示。
- 批量任务需要 Max 授权且剩余时长 > 2 小时,否则返回
status=error。 - 若超时报错,可适当调大超时时间或检查后端服务是否运行在
localhost:5001。