我总是对社交网络自动化有很大的兴趣, 之前研究发微博机器人, QQ机器人, 豆瓣机器人, 也是因为我玩这些 app. 如今
终于轮到了小红书. 虽然小红书没有开发者平台, 但是仍然可以从抓取并分析网络请求再通过代码实现自动发笔记的功能. 整个实现最精彩的地方就是对于请求体中 x-s
键值的破解, 目前我用到了 ReaJason/xhs 里的 sign 功能, 也打算下一步再实现一个 JS 版本.
本篇文章将列举小红书一些创作者平台的核心APIs
1. 通过关键字获取话题列表详情
在笔记的内容里如果需要引入话题列表, 通过该 API 能获取需要的tag的关键字段.
POST https://edith.xiaohongshu.com/web_api/sns/v1/search/topic
request headers:
Cookie
Origin
:https://creator.xiaohongshu.com
Content-Type
:application/json;charset=UTF-8
request body:
{
"keyword": "比格",
"suggest_topic_request": {
"title": "",
"desc": "#比格"
},
"page": {
"page_size": 20,
"page": 1
}
}
2. 获取图片的 file id 列表和 相关 credentials
获取上传图片需要的关键信息.
GET https://creator.xiaohongshu.com/api/media/v1/upload/web/permit?biz_name=spectrum&scene=image&file_count=1&version=1&source=web
其中 file_count 根据你要上传的图片数量而改变, 继而返回的 file id数量也于此相关.
request headers:
Cookie
Referer
:https://creator.xiaohongshu.com/publish/publish?from=tab_switch
X-S
: 需要通过一些工具获得. 本人从 ReaJason/xhs 的 /sign 接口获取
3. 上传图片
PUT https://ros-upload.xiaohongshu.com/{file_id}
request headers:
Cookie
Content-Type
:image/jpeg
X-Cos-Security-Token
: 值从 No.2 的返回值获取Origin
:https://creator.xiaohongshu.com
request body:
image 的 binary 类型
4. 发布笔记
POST https://edith.xiaohongshu.com/web_api/sns/v2/note
request headers:
Cookie
Content-Type
:application/json;charset=UTF-8
Origin
:https://creator.xiaohongshu.com
X-S
: 需要通过一些工具获得. 本人从 ReaJason/xhs 的 /sign 接口获取X-T
需要通过一些工具获得. 本人从 ReaJason/xhs 的 /sign 接口获取
request body:
{
"common": {
"type": "normal",
"note_id": "",
"source": "{\"type\":\"web\",\"ids\":\"\",\"extraInfo\":\"{\\\"systemId\\\":\\\"web\\\"}\"}",
"title": "小比格",
"desc": "#比格犬就是世界上最好的小狗[话题]#",
"ats": [],
"hash_tag": [
{
"id": "67dba606000000001d010ac8",
"name": "比格犬就是世界上最好的小狗",
"link": "https://www.xiaohongshu.com/page/topics/67dba60601d4000000000001?naviHidden=yes",
"type": "topic"
}
],
"business_binds": "{\"version\":1,\"noteId\":0,\"bizType\":0,\"noteOrderBind\":{},\"notePostTiming\":{},\"noteCollectionBind\":{\"id\":\"\"},\"noteSketchCollectionBind\":{\"id\":\"\"},\"coProduceBind\":{\"enable\":false},\"noteCopyBind\":{\"copyable\":false},\"interactionPermissionBind\":{\"commentPermission\":0},\"optionRelationList\":[]}",
"privacy_info": {
"op_type": 1,
"type": 0,
"user_ids": []
},
"goods_info": {},
"biz_relations": []
},
"image_info": {
"images": [
{
"file_id": "spectrum/HYyKFIJ01wmBc3x2xaRRMfgLuR1zR0Gp7tk5uAM79ccq_kQ",
"width": 510,
"height": 510,
"metadata": {
"source": -1
},
"stickers": {
"version": 2,
"floating": []
},
"extra_info_json": "{\"mimeType\":\"image/jpeg\"}"
}
]
},
"video_info": null
}
以上的 request body 里只有以下部分节点可变, 其余部分硬编码即可:
- title
- desc
- hash_tag
- images
其中 desc 中的话题的前后需要添加不可见字符0xfeff
, 否则不会被识别为话题.
除了上述的 API 之外, 很多开源项目有点赞、评论、发布视频笔记等 API. 可以根据个人需求进行定制, 我没有用到 就不在此列举了.