把内容推送到平台,拿到 30 条规则的检测结果,修复后重新提交并发布。
零依赖,只用标准库。把「发布被拦截」做成可直接读取的异常, 不必自己解析 422 的 JSON。
需要管理员签发的 API Key(rkl_live_ 开头)。
客户无需登录控制台,拿到密钥即可调用。
pip install "git+https://github.com/LordFoxFairy/RankLoop.git#subdirectory=sdk/python"
from rankloop import Client, PublishBlockedError
client = Client(api_key="rkl_live_xxx")
content = client.submit(site_id, path="/posts/hello", body=html)
try:
client.publish(content.id)
except PublishBlockedError as e:
print(f"当前 {e.score} 分,必须先修:{e.blocking}")
不想为每条内容写 try/except 时,用 publish_when_ready
取回待修复项,每项都带修复建议与预估耗时。
ok, todo = client.publish_when_ready(content.id)
for r in todo:
print(r.message, r.recommendation, f"约 {r.minutes} 分钟")
支持 HTML 与 Markdown。Markdown 的元数据通过 frontmatter 提供。
curl -X POST "https://你的域名/api/v1/sites/{siteId}/contents" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"path":"/article","format":"markdown","body":"---\ntitle: 标题\n---\n\n# 正文"}'
检测不通过时返回规则编码、触发证据与修复建议,据此修改后重新提交。
{ "score": 0, "publishable": false,
"issues": [{ "code": "MISSING_TITLE",
"evidence": "title 为空或未提供",
"recommendation": "添加 10-60 字符的标题,包含核心关键词。" }] }
422 SEO_GATE_FAILED,
并在 details.blocking 中列出阻塞规则。修复后重新提交即可发布。
提交、更新、发布内容。每次提交都会返回检测结果。
| 接口 | 说明 | 权限 |
|---|---|---|
POST
/sites/{siteId}/contents |
提交新内容并立即检测 | contents:write |
PUT
/contents/{contentId} |
更新内容,产生新版本并重新检测 | contents:write |
POST
/contents/{contentId}/publish |
发布;存在 critical 问题时返回 422 | contents:publish |
GET
/contents/{contentId} |
查看内容与最新检测结果 | contents:read |
GET
/contents/{contentId}/versions |
版本历史与分数变化 | contents:read |
POST
/contents/check |
无状态预检,不落库 | contents:write |
管理站点、绑定自有域名。绑定后内容以该域名对外渲染。
| 接口 | 说明 | 权限 |
|---|---|---|
GET
/sites |
列出站点 | sites:read |
POST
/sites |
创建站点 | sites:write |
GET
/sites/{siteId} |
站点详情与访问地址 | sites:read |
PATCH
/sites/{siteId} |
更新站点名、slug 与展示配置 | sites:write |
POST
/sites/{siteId}/domain |
绑定自有域名,返回 DNS 配置指引 | sites:write |
POST
/sites/{siteId}/domain/verify |
验证域名归属 | sites:write |
sitemap、搜索引擎提交与健康分统计。
| 接口 | 说明 | 权限 |
|---|---|---|
GET
/sites/{siteId}/sitemap.xml |
站点 sitemap | indexing:read |
POST
/sites/{siteId}/indexnow/submit |
提交 URL 到 IndexNow | indexing:write |
GET
/sites/{siteId}/indexing-status |
每条内容的收录提交状态 | indexing:read |
GET
/stats/overview |
健康分与问题分布 | contents:read |
GET
/stats/trend |
30 天分数趋势 | contents:read |
成功与错误使用统一结构,便于自动化处理。
// 成功
{ "data": { ... }, "meta": { "request_id": "req_..." } }
// 错误
{ "error": { "code": "SEO_GATE_FAILED",
"message": "内容存在严重 SEO 问题,无法发布",
"details": { "blocking": ["MISSING_TITLE"], "score": 13 } },
"meta": { "request_id": "req_..." } }