正文
在微信机器人的朋友圈相关能力中,获取自己的朋友圈列表是数据同步类需求的基础接口。无论是做朋友圈内容归档、互动数据统计,还是多账号的朋友圈管理后台,第一步都是通过微信 API把时间线数据完整拉下来。本文记录WTAPI 微信机器人接口中自己的朋友圈列表接口(snsList)的对接思路。
接口地址为/finder/v2/api/sns/snsList,采用 HTTP POST 方式调用,属于微信个人号二次开发的朋友圈模块。
入参有四个字段:
appId:设备实例 ID,登录后获取;maxId:翻页游标,首次请求传 0,第二页起传上一页返回的maxId,它的值就是当前列表最后一条朋友圈的 snsId;decrypt:是否解密,默认true,一般保持默认即可拿到可解析的内容;firstPageMd5:另一个翻页校验 key,首次传空,后续传上一页返回的值。
这个接口的翻页设计是双游标机制:maxId决定从哪一条继续往下取,firstPageMd5用于保证整次翻页会话的一致性。两者必须成对保存、成对回传,否则可能出现翻页中断或数据重复。
返回结果中,data包含snsCount(本页条数)、requestTime、maxId、firstPageMd5以及核心的snsList数组。每条朋友圈的主要字段有:
id:朋友圈 ID,即 snsId;userName、nickName:发布者的 wxid 和昵称;createTime:发布时间戳;snsXml:朋友圈的完整原始 XML,正文、图片、视频、定位等内容都在里面;likeCount/likeList:点赞数量与列表;commentCount/commentList:评论数量与列表;withUserCount/withUserList:提到的相关用户。
入参有四个字段:
Unirest.setTimeouts(0,0);HttpResponse<String>response=Unirest.post("https://wx.chuapi.com/finder/v2/api/sns/snsList").header("X-finder-TOKEN","").header("Authorization","Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjAxNmM2ZDQ5LWIxNWMtNGRjMy05YzQzLWZmYzZmNDhhMTg3MyJ9.1JWq9ntjam20_XDlSbklWTxbV-vg-F_dY1LYVX05BndRAuaJbv3iSwoDY-BuMwe1sdKxDXtDTMWJgXNMff4nOg").header("Content-Type","application/json").body("{\n \"appId\": \"wx_e2PiMSX8ySDV6tQGroCDc\",\n \"maxId\": 0,\n \"decrypt\": true,\n \"firstPageMd5\": \"\"\n}").asString();开发中有几个关键点:
第一,正文和媒体内容要从snsXml里解析。文字在contentDesc节点,图片或视频在ContentObject的mediaList中,通过type区分(如图文、小视频),定位信息在location节点。建议封装统一的 XML 解析层。
第二,循环翻页要有终止条件:当返回的snsList为空,或snsCount为 0 时表示已拉到底;同时要限制最大页数,防止异常情况下死循环。
第三,素材链接建议转存。XML 中的图片、视频地址是微信 CDN 临时链接,有时效性,需要长期保存的话要及时下载到自己的对象存储。
第四,控制拉取频率。朋友圈列表属于较重的接口,全量同步建议放在低峰期定时执行,增量同步则可以只拉前几页、用 snsId 去重。
小结
自己的朋友圈列表接口的核心不在调用本身,而在于maxId + firstPageMd5 双游标翻页和snsXml 的结构化解析。把这两件事处理好,再配合点赞评论字段的入库,微信机器人的朋友圈数据采集与微信个人号二次开发的内容管理就有了完整的数据来源。