资讯动态

instagram-private-api 滑杆投票数据接口解析:StorySliderVotersFeedResponseResponseVoter_info 字段与调用链

发布时间:2026/10/17 8:12:39 来源:尧图企业网站定制
后端【免费下载链接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.项目地址https://gitcode.com/gh_mirrors/in/instagram-private-api点击查看免费下载本文以 instagram-private-apiNodeJS 版 Instagram 私有 API SDKTypeScript 编写响应类型StorySliderVotersFeedResponseResponseVoter_info为切入点讲解故事贴纸滑杆投票Slider Sticker投票者分页数据的接口结构、字段含义以及从客户端工厂ig.feed.storySliderVoters()到底层 HTTP 请求与分页状态更新的完整调用链。读完本文你将能正确解析滑杆投票结果响应并基于more_available/max_id实现投票者的分页拉取。一、接口定位voter_info是滑杆投票响应的主体载荷在 instagram-private-api 中针对故事贴纸的“参与者列表”类接口滑杆投票、投票贴纸、提问贴纸、测验贴纸服务端返回的根对象统一由两部分组成业务数据主体与status状态标记。StorySliderVotersFeedResponseResponseVoter_info即滑杆投票场景下的业务数据主体对应响应 JSON 中的voter_info字段。其源码定义位于 src/responses/story-slider-voters.feed.response.response.ts所在的响应文件同时定义了 5 个相互关联的接口StorySliderVotersFeedResponseResponseRootObject根对象StorySliderVotersFeedResponseResponseVoter_info本文主题投票信息主体StorySliderVotersFeedResponseResponseVotersItem单个投票者条目StorySliderVotersFeedResponseResponseUser投票者用户信息StorySliderVotersFeedResponseResponseFriendship_status投票者与当前账号的关系状态该文件通过 src/responses/index.ts 的export * from ./story-slider-voters.feed.response.response统一对外导出是响应类型体系的一部分。二、字段完整清单与类型定义voter_info接口共包含 5 个属性完整定义如下字段类型说明slider_idstring该滑杆贴纸Slider Sticker的唯一标识votersStorySliderVotersFeedResponseResponseVotersItem[]当前页的投票者条目数组max_idnull分页游标。当前实现中该字段固定为nullmore_availableboolean是否还有更多投票者可分页拉取latest_slider_vote_timenumber最近一次投票的时间戳Unix 时间2.1voters投票者条目数组voters数组中的每个元素类型为StorySliderVotersFeedResponseResponseVotersItem定义同样在 story-slider-voters.feed.response.response.ts包含 3 个字段字段类型说明userStorySliderVotersFeedResponseResponseUser投票者的用户信息对象votenumber该用户给出的滑杆分值tsnumber该次投票的时间戳其中user对象L17-L26提供基础的用户画像字段pk数字型用户 ID、username、full_name、is_private、profile_pic_url、profile_pic_id、is_verified以及嵌套的friendship_status对象L27-L33后者包含following、is_private、incoming_request、outgoing_request、is_bestie、is_restricted六个布尔字段可用于在展示投票者列表时标注“是否已关注 / 是否为密友 / 是否受限”等关系状态。2.2max_id与more_available分页控制字段这两个字段共同承担分页职责max_id在源码中类型被标注为null表明该接口当前返回的分页游标为nullmore_available为布尔值表示当前是否仍有更多投票者数据。从源码结构看MediaStickerResponsesFeed在每次请求后会读取response[this.rootName].max_id写入自身maxId并读取.more_available写入moreAvailable见下文第四、五节因此这两个字段是驱动整个投票者列表翻页的核心开关。三、数据来源滑杆贴纸的创建与“故事滑杆投票者”接口要理解voter_info数据从何而来需要回到滑杆贴纸的创建侧。3.1 配置侧类型StorySliderStorySlider是发帖配置中描述滑杆贴纸的类型定义于 src/types/media.configure-story.options.ts继承自StoryStickerL71-L77提供x、y、width、height、rotation五个范围在 0..1 的布局参数。StorySlider自身补充了questionstring滑杆上的问题文本background_colorstring十六进制色值如#ff0a1dtext_colorstring十六进制色值emojistring滑杆表情图标源码注释提示 Windows 下可用[WIN] [.]打开表情菜单is_sticker固定为true3.2 构建侧实现SliderSticker在 sticker-builder 模块中SliderSticker类src/sticker-builder/stickers/slider.sticker.ts实现了滑杆贴纸的构建逻辑关键点包括默认backgroundColor #ffffff、textColor #000000投票相关字段viewerCanVote默认false、sliderVoteCount默认0、viewerVote默认-1.0、sliderVoteAverage默认0.0默认尺寸width 0.7291667、height 0.22212838Instagram 将高度视为宽高比idgetter 返回emoji_slider_${this.emoji}格式的贴纸 IDkeygetter 返回story_sliders。StickerBuilder.slider()工厂方法src/sticker-builder/sticker-builder.ts接收StickerOptionsSliderSticker并返回SliderSticker实例。官方示例 examples/upload-story.example.ts 展示了最小用法.add( StickerBuilder.slider({ question: Question, emoji: ❤, }), )发布成功后该贴纸即可在故事上收集粉丝的滑杆投票后续便可通过story_slider_voters接口按slider_id拉取投票者明细。四、调用入口ig.feed.storySliderVoters(mediaId, stickerId)voter_info数据的实际获取入口是FeedFactory中的storySliderVoters()工厂方法定义于 src/core/feed.factory.tspublic storySliderVoters( mediaId: string, stickerId: string | number, ): MediaStickerResponsesFeed StorySliderVotersFeedResponseResponseRootObject, StorySliderVotersFeedResponseResponseVotersItem { return plainToClassFromExist(new MediaStickerResponsesFeedany, any(this.client), { mediaId, stickerId, name: story_slider_voters, rootName: voter_info, itemName: voters, }); }该方法接收两个必填参数参数类型含义mediaIdstring故事媒体Story的 IDstickerIdstring \| number滑杆贴纸的 ID即响应中voter_info.slider_id字段同时FeedFactory中并列定义了滑杆、投票、提问、测验四类参与者接口的工厂方法L240-L299它们共用同一个MediaStickerResponsesFeed泛型 feed仅通过三个配置参数区分场景namerootNameitemName提问贴纸回答storyQuestionResponsesstory_question_responsesresponder_inforesponders投票贴纸投票者storyPollVotersstory_poll_votersvoter_infovoters测验贴纸参与者storyQuizParticipantsstory_quiz_participantsparticipant_infoparticipants滑杆投票投票者storySliderVotersstory_slider_votersvoter_infovoters可以推断voter_info作为根对象下的业务数据主体命名是滑杆与投票贴纸两类场景共用的约定。五、底层实现MediaStickerResponsesFeed如何消费voter_infoMediaStickerResponsesFeed是承载上述四类贴纸参与者接口的通用 Feed 实现源码位于 src/feeds/media.sticker-responses.feed.ts完整逻辑如下export class MediaStickerResponsesFeedT, I extends FeedT, I { name: string; rootName: string; itemName: string; stickerId: string; mediaId: string; Expose() private maxId: string undefined; async items(): PromiseI[] { const response await this.request(); return response[this.rootName][this.itemName]; } async request(): PromiseT { const { body } await this.client.request.send({ url: /api/v1/media/${this.mediaId}/${this.stickerId}/${this.name}/, method: GET, qs: { max_id: this.maxId || void 0, }, }); this.state body; return body; } protected set state(response: T) { this.maxId response[this.rootName].max_id; this.moreAvailable response[this.rootName].more_available; } }结合voter_info的字段定义可以还原出完整的调用链发起请求request()向/api/v1/media/{mediaId}/{stickerId}/story_slider_voters/发送 GET 请求并以内部维护的maxId作为max_id查询参数解析响应响应根对象StorySliderVotersFeedResponseResponseRootObject包含voter_info与status两个字段提取数据items()返回response[voter_info][voters]即StorySliderVotersFeedResponseResponseVotersItem[]更新分页状态statesetter 将response[voter_info].max_id写入this.maxId、将response[voter_info].more_available写入this.moreAvailable与 src/core/feed.ts 中的isMoreAvailable()配合决定是否继续翻页。由于当前响应中max_id固定为null在调用request()时this.maxId || void 0会将null归一为undefined使首次请求不带max_id参数若未来服务端返回非空游标该机制也能自动将其携带到下一次请求中实现滚动分页。六、实战如何拉取全部滑杆投票者综合以上实现一个完整的滑杆投票者拉取流程如下先通过StickerBuilder.slider()在发布故事时创建滑杆贴纸可参考 examples/upload-story.example.ts 的完整发布流程通过ig.feed.storySliderVoters(mediaId, stickerId)创建 feed 实例反复调用items()直到isMoreAvailable()返回false从而取回全部投票者。Feeds 本身是自动分页的items()每次调用都会获取下一页数据README 中“Feeds”一节明确说明“All the feeds are auto-paginated, so you just need to call.items()sequentially to get next page”见 README.md。典型遍历写法import { IgApiClient } from instagram-private-api; const ig new IgApiClient(); ig.state.generateDevice(process.env.IG_USERNAME); await ig.account.login(process.env.IG_USERNAME, process.env.IG_PASSWORD); // mediaId故事媒体 IDstickerId滑杆贴纸 ID即响应中的 slider_id const sliderVotersFeed ig.feed.storySliderVoters(mediaId, stickerId); do { const voters await sliderVotersFeed.items(); for (const voter of voters) { // voter: StorySliderVotersFeedResponseResponseVotersItem console.log(${voter.user.username} 给出 ${voter.vote} 分${new Date(voter.ts * 1000).toISOString()}); } } while (sliderVotersFeed.isMoreAvailable());七、分页游标max_id null的注意事项根据当前源码定义StorySliderVotersFeedResponseResponseVoter_info.max_id被声明为null而非string这与同仓库其他贴纸参与者接口一致——滑杆投票这类“一次性结果展示”接口Instagram 通常一次性返回全部投票者。这意味着在大多数场景下more_available会为false单次items()即可取回全部投票者latest_slider_vote_time可用于记录“最近一次投票时间”例如在增量同步场景中判断是否有新投票slider_id应与创建贴纸时的SliderSticker.idemoji_slider_{emoji}以及发布响应中的贴纸标识对应作为stickerId参数传入。需要说明的是以上关于服务端行为特征的描述是基于当前仓库类型定义story-slider-voters.feed.response.response.ts与 Feed 实现media.sticker-responses.feed.ts的推断实际返回内容以 Instagram 服务端实时响应为准。若在接入中发现字段类型不符应以实际 API 响应为最终依据并可在仓库中反馈或自行适配。八、相关文档与进一步阅读接口完整定义voter_info见 docs/interfaces/responses/StorySliderVotersFeedResponseResponseVoter_info.md根对象见 docs/interfaces/responses/StorySliderVotersFeedResponseResponseRootObject.md投票者条目见 docs/interfaces/responses/StorySliderVotersFeedResponseResponseVotersItem.md用户信息见 docs/interfaces/responses/StorySliderVotersFeedResponseResponseUser.md贴纸配置类型StorySlider见 docs/interfaces/types/StorySlider.mdStorySticker见 docs/interfaces/types/StorySticker.md贴纸构建器SliderSticker实现见 src/sticker-builder/stickers/slider.sticker.ts工厂方法StickerBuilder.slider()见 src/sticker-builder/sticker-builder.ts调用入口ig.feed.storySliderVoters()见 src/core/feed.factory.ts通用 Feed 实现见 src/feeds/media.sticker-responses.feed.ts完整故事发布示例见 examples/upload-story.example.ts基础使用与分页说明见 README.md。赞分享后端【免费下载链接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.项目地址https://gitcode.com/gh_mirrors/in/instagram-private-api点击查看免费下载相关推荐instagram-private-api 直播功能解析LiveAddToPostFriendshipstatus 接口字段详解与 addToPostLive 调用链instagram private api 直播功能解析LiveAddToPostFriendshipstatus 接口字段详解与 addToPostLive后端instagram-private-api 故事投票者数据结构StoryPollVotersFeedResponseUser 接口深度解析instagram private api 故事投票者数据结构StoryPollVotersFeedResponseUser 接口深度解析 本文围绕 inst后端instagram-private-api 地点搜索响应详解FbsearchRepositoryPlacesResponseLocation 接口全字段与调用链instagram private api 地点搜索响应详解FbsearchRepositoryPlacesResponseLocation 接口全字段与调用后端上一篇Kimi Code 的 llm 模块指南单次 LLM 请求的协议、事件流与重试恢复架构下一篇Unleash 前端数据变更标准化useAPI Hook 统一数据写入与错误处理实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑