从0到1掌握xhs创作中心笔记列表API:数据驱动创作者的效率革命
你还在手动翻阅创作中心统计数据吗?还在为跨平台内容管理焦头烂额?xhs项目v0.2.13版本重磅推出的get_creator_note_list接口,彻底改变了创作者数据采集的效率格局。本文将带你深入剖析这一功能的技术实现、应用场景与最佳实践,让你轻松掌握批量获取创作中心笔记数据的核心能力。
读完本文你将获得:
- 3分钟快速接入创作中心数据接口的实战指南
- 基于真实业务场景的参数配置方案(含tab分类与分页策略)
- 企业级异常处理与权限管理方案
- 超越官方后台的数据分析模型构建思路
功能背景与技术架构
创作者的数据痛点与解决方案
传统创作者面临三大数据困境:
- 数据碎片化:内容数据分散在APP端与网页端,无法集中处理
- 操作低效性:手动导出数据耗时且易出错,日均浪费40%数据分析时间
- 决策滞后性:热点内容错过最佳优化窗口期,影响流量转化
xhs项目新增的get_creator_note_list接口通过直接对接小红书创作中心API(/api/galaxy/creator/note/user/posted),实现了创作数据的自动化采集。其核心优势在于:
flowchart TD
A[创作者] -->|登录认证| B[创作中心API]
B --> C{数据接口}
C -->|公开笔记| D[get_user_notes]
C -->|创作数据| E[get_creator_note_list]
E --> F[多维度筛选]
F --> G[高效数据分析]
接口技术架构解析
该功能构建在xhs SDK的核心架构之上,采用分层设计确保稳定性与可扩展性:
XhsClient
├── 认证层 (Authentication)
│ ├── get_qrcode_from_creator()
│ └── check_qrcode_from_creator()
├── 业务层 (Business Logic)
│ ├── get_creator_note_list()
│ ├── get_notes_statistics()
│ └── get_notes_summary()
└── 传输层 (Transport)
├── _pre_headers()
└── request()
关键技术亮点:
- 双端认证机制:通过创作者中心专属二维码登录流程,获取高权限访问令牌
- 参数化筛选:支持按内容状态(tab参数)与分页(page参数)精确过滤
- 高效签名算法:采用x-s/x-t/x-s-common三重签名机制,确保请求合法性
接口实战指南
前置准备与环境配置
开发环境要求
| 环境项 | 版本要求 | 备注 |
|---|---|---|
| Python | ≥3.7 | 推荐3.9+版本 |
| 依赖库 | requests≥2.25.1, lxml≥4.6.3 | 通过pip install xhs自动安装 |
| 签名服务 | 自定义签名函数 | 需部署本地签名服务或使用内置 playwright方案 |
安装与升级
# 稳定版安装
pip install xhs==0.2.13
# 开发版体验(含最新功能)
pip install git+https://gitcode.com/gh_mirrors/xh/xhs.git@dev
完整接入流程
1. 创作者身份认证
创作中心接口需通过专属认证流程,以下是基于二维码登录的实现方案:
import json
import time
import qrcode
from xhs import XhsClient
def custom_sign(uri, data=None, a1="", web_session=""):
"""部署本地签名服务的实现示例"""
import requests
res = requests.post("http://localhost:5555/sign",
json={"uri": uri, "data": data, "a1": a1, "web_session": web_session})
return res.json()
# 初始化客户端
client = XhsClient(sign=custom_sign)
# 获取创作中心登录二维码
qr_info = client.get_qrcode_from_creator()
print("请扫描以下二维码登录创作者中心:")
qrcode.make(qr_info["url"]).print_ascii()
# 轮询二维码状态
while True:
status = client.check_qrcode_from_creator(qr_info["id"])
if status["status"] == 1: # 1表示已扫码确认
# 完成登录流程
client.customer_login(status["ticket"])
client.login_from_creator()
print("登录成功!当前Cookie:", client.cookie)
break
time.sleep(1)
认证流程时序图:
sequenceDiagram
participant 开发者
participant SDK
participant 小红书服务器
开发者->>SDK: 创建XhsClient实例
SDK->>小红书服务器: 请求创作中心二维码
小红书服务器-->>SDK: 返回qr_id与url
SDK->>开发者: 展示登录二维码
开发者->>小红书服务器: 手机扫码确认
小红书服务器-->>SDK: 推送扫码状态(ticket)
SDK->>小红书服务器: 使用ticket完成登录
小红书服务器-->>SDK: 返回认证Cookie
SDK->>开发者: 登录成功
2. 获取笔记列表核心实现
基础调用示例:
# 获取第一页已发布笔记(tab=0)
notes = client.get_creator_note_list(tab=0, page=0)
print(json.dumps(notes, ensure_ascii=False, indent=2))
# 分页获取所有草稿(tab=2)
all_drafts = []
page = 0
while True:
res = client.get_creator_note_list(tab=2, page=page)
all_drafts.extend(res["notes"])
if not res["has_more"]:
break
page += 1
print(f"共获取{len(all_drafts)}条草稿笔记")
3. 参数详解与高级配置
| 参数名 | 类型 | 默认值 | 可选值 | 说明 |
|---|---|---|---|---|
| tab | int | 0 | 0:已发布, 1:定时, 2:草稿, 3:已删除 | 内容状态筛选 |
| page | int | 0 | ≥0的整数 | 分页页码,从0开始计数 |
最佳实践:生产环境建议page_size控制在20-30条/页,两次请求间隔≥1秒,避免触发限流机制
响应数据结构解析
成功调用返回的JSON结构示例:
{
"notes": [
{
"note_id": "65f548eb000000001202e725",
"title": "Python数据分析入门教程",
"cover_url": "https://sns-img-qc.xhscdn.com/...",
"status": 1, // 1表示已发布
"create_time": 1710234567,
"update_time": 1710234567,
"interact_info": {
"like_count": 1258,
"comment_count": 89,
"share_count": 42,
"collect_count": 310
},
"statistics": {
"view_count": 5623,
"exposure_count": 23567,
"click_rate": 0.238
}
},
// 更多笔记...
],
"has_more": true,
"total": 42
}
核心字段说明:
| 字段路径 | 数据类型 | 业务含义 |
|---|---|---|
| notes[].note_id | string | 笔记唯一标识 |
| notes[].status | int | 内容状态(1:已发布/2:草稿/3:删除) |
| notes[].interact_info | object | 互动数据(点赞/评论/收藏) |
| notes[].statistics | object | 流量数据(曝光/阅读/点击率) |
| has_more | boolean | 是否有更多数据 |
高级应用场景
多维度数据聚合分析
结合创作中心其他接口,构建完整的内容管理系统:
def get_note_detail(note_id):
"""获取单篇笔记详细数据"""
stats = client.get_notes_statistics(note_ids=[note_id])
basic = client.get_note_by_id(note_id, xsec_token="...")
return {**basic, **stats}
# 批量分析已发布内容表现
notes = client.get_creator_note_list(tab=0)["notes"]
for note in notes:
detail = get_note_detail(note["note_id"])
print(f"标题: {detail['title']}")
print(f"数据表现: 阅读{detail['statistics']['view_count']} 点赞{detail['interact_info']['like_count']}")
print(f"点击率: {detail['statistics']['click_rate']:.2%}")
print("---")
异常处理与健壮性设计
创作中心接口可能遇到的异常场景及解决方案:
from xhs.exception import (DataFetchError, IPBlockError,
NeedVerifyError, SignError)
def safe_get_creator_notes(tab=0, max_retries=3):
retries = 0
while retries < max_retries:
try:
return client.get_creator_note_list(tab=tab)
except NeedVerifyError as e:
print(f"需要验证码: {e.verify_type}, UUID: {e.verify_uuid}")
# 此处可集成验证码识别服务
raise
except IPBlockError:
print("IP被封禁,正在切换代理...")
client.proxies = {"https": "http://new-proxy:port"}
retries += 1
time.sleep(5 * retries)
except SignError:
print("签名失效,重新登录...")
# 重新执行登录流程
login_creator_center(client)
retries += 1
except DataFetchError as e:
print(f"数据获取失败: {e}")
return None
raise Exception(f"超出最大重试次数{max_retries}")
定时任务与数据同步
使用调度工具实现创作数据的定时采集:
# 使用APScheduler实现定时任务
from apscheduler.schedulers.background import BackgroundScheduler
def sync_creator_data():
"""同步创作中心数据到本地数据库"""
notes = safe_get_creator_notes(tab=0)
if notes:
# 存储到数据库的实现
# db.insert_many("creator_notes", notes["notes"])
print(f"同步完成 {len(notes['notes'])} 条笔记数据")
# 每天凌晨2点执行同步
scheduler = BackgroundScheduler()
scheduler.add_job(sync_creator_data, 'cron', hour=2)
scheduler.start()
性能优化与最佳实践
请求效率优化
1.** 批量处理策略 **- 合理设置分页大小(建议20-30条/页)
- 实现增量同步(基于update_time字段)
2.** 缓存机制实现 **```python from functools import lru_cache
@lru_cache(maxsize=128) def get_cached_notes(tab=0, page=0): """缓存热门查询结果""" return client.get_creator_note_list(tab=tab, page=page)
### 合规使用建议
1.** 接口调用限制 **- 单IP每分钟请求不超过60次
- 分页查询间隔≥1秒
- 避免并发请求(建议单线程处理)
2.** 数据使用规范 **- 仅用于个人数据分析,不得进行商业化分发
- 敏感数据加密存储,符合数据安全法规
- 定期清理本地缓存,防止数据泄露
## 版本演进与未来展望
### 功能迭代路线图
```mermaid
timeline
title xhs创作中心接口功能演进
2023-Q4 : v0.2.10 基础数据统计接口
2024-Q1 : v0.2.13 新增笔记列表接口
2024-Q2 : v0.3.0 计划支持内容发布/编辑
2024-Q3 : v0.4.0 计划新增粉丝画像接口
已知问题与解决方案
| 问题描述 | 影响版本 | 临时解决方案 |
|---|---|---|
| 高并发下签名失败 | 0.2.13 | 实现签名请求队列化 |
| 部分字段偶现缺失 | 0.2.13 | 添加字段存在性检查 |
| 长时运行后Cookie过期 | 全版本 | 定时执行Cookie刷新 |
总结与资源推荐
get_creator_note_list接口的推出,标志着xhs SDK从基础数据爬取向创作生态工具的重要升级。通过本文介绍的方法,开发者可以快速构建:
- 自动化内容管理系统
- 多平台数据聚合看板
- 智能内容优化助手
- 创作效率提升工具
学习资源
1.** 官方资源 **- 项目仓库:https://gitcode.com/gh_mirrors/xh/xhs
- 测试用例:tests/test_xhs.py(包含各接口调用示例)
2.** 社区贡献 **- 提交Issue:https://gitcode.com/gh_mirrors/xh/xhs/issues
- 贡献代码:通过Pull Request参与开发
3.** 扩展工具 **- 签名服务Docker镜像:xhs-api/Dockerfile
- 可视化管理工具:计划于v0.3.0版本推出
下期预告
下一篇我们将深入探讨"创作数据可视化平台搭建",教你如何利用Grafana构建实时内容表现监控面板,敬请关注!
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00