资讯动态

instagram-private-api 深度解析:StorySliderVotersFeedResponseResponseVotersItem 与故事滑块投票数据模型

发布时间:2026/10/16 7:27:49 来源:尧图企业网站定制
后端【免费下载链接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.项目地址https://gitcode.com/gh_mirrors/in/instagram-private-api点击查看免费下载StorySliderVotersFeedResponseResponseVotersItem 是 instagram-private-apiNodeJS Instagram 私有 API SDKTypeScript 编写中用于承载「故事滑块投票emoji slider」单个投票记录的类型定义。本文将以该接口为核心结合仓库源码完整拆解其三个字段user、vote、ts的含义与数据类型梳理其所在响应树RootObject → Voter_info → VotersItem的整体结构并沿着FeedFactory.storySliderVoters到MediaStickerResponsesFeed的实际调用链讲解如何通过 SDK 拉取某一滑块贴纸的全部投票者同时补充滑块贴纸的发布与投票storySliderVote实现帮助读者在真实业务中正确消费此类数据。接口定位一个投票记录的完整快照StorySliderVotersFeedResponseResponseVotersItem定义于 src/responses/story-slider-voters.feed.response.response.ts归属于仓库的 responses 模块docs/interfaces/responses/StorySliderVotersFeedResponseResponseVotersItem.md并在 src/responses/index.ts 中被统一导出。它的作用非常聚焦代表「故事 emoji 滑块贴纸」上某一位投票者的一次投票。一条投票记录包含三个字段属性类型说明userStorySliderVotersFeedResponseResponseUser投票者账户信息ID、用户名、头像、关注关系等votenumber投票者所选择的滑块数值0.0 ~ 1.0 区间的浮点值tsnumber该次投票的时间戳接口源码节选export interface StorySliderVotersFeedResponseResponseVotersItem { user: StorySliderVotersFeedResponseResponseUser; vote: number; ts: number; }user投票者账户画像user字段的类型是StorySliderVotersFeedResponseResponseUser详见 docs/interfaces/responses/StorySliderVotersFeedResponseResponseUser.md其中包含export interface StorySliderVotersFeedResponseResponseUser { pk: number; // 用户数字 ID username: string; // 用户名 full_name: string; // 展示名 is_private: boolean; // 是否私密账号 profile_pic_url: string; // 头像 URL profile_pic_id: string; // 头像媒体 ID friendship_status: StorySliderVotersFeedResponseResponseFriendship_status; is_verified: boolean; // 是否蓝 V 认证 }其中的friendship_status进一步描述当前登录账号与该投票者之间的关注关系StorySliderVotersFeedResponseResponseFriendship_status.mdexport interface StorySliderVotersFeedResponseResponseFriendship_status { following: boolean; // 我是否关注了对方 is_private: boolean; // 对方是否私密 incoming_request: boolean; // 对方是否向我发来关注请求 outgoing_request: boolean; // 我是否向对方发去关注请求 is_bestie: boolean; // 是否为密友besties is_restricted: boolean; // 对方是否被我限制 }vote 与 ts投票数值与时间戳vote是number类型浮点值对应滑块在 0.0 ~ 1.0 之间的位置。这一点可以从仓库中滑块相关实现得到佐证SliderSticker的默认viewerVote为-1.0表示尚未投票而投票接口提交时使用vote.toFixed(8)保留 8 位小数见下文「主动投票」一节。ts是number类型 Unix 时间戳标识这次投票发生的时间可用于按时间排序或展示「X 分钟前投票」。完整响应树从根对象到单条投票VotersItem并非孤立存在它位于一个三层嵌套的响应结构中同文件src/responses/story-slider-voters.feed.response.response.ts定义了完整的接口族export interface StorySliderVotersFeedResponseResponseRootObject { voter_info: StorySliderVotersFeedResponseResponseVoter_info; status: string; } export interface StorySliderVotersFeedResponseResponseVoter_info { slider_id: string; // 滑块贴纸 ID即 emoji_slider_{emoji} voters: StorySliderVotersFeedResponseResponseVotersItem[]; // 投票记录数组 max_id: null; // 分页游标为 null 表示没有下一页 more_available: boolean; // 是否还有更多投票记录 latest_slider_vote_time: number; // 最近一次投票时间戳 }对应的文档页面分别为 StorySliderVotersFeedResponseResponseRootObject.md 与 StorySliderVotersFeedResponseResponseVoter_info.md。其中voter_info.voters就是由多个StorySliderVotersFeedResponseResponseVotersItem组成的数组——这也是你在实际编码中直接遍历取数的入口。三个接口之间的嵌套关系可以概括为StorySliderVotersFeedResponseResponseRootObject └── voter_info: StorySliderVotersFeedResponseResponseVoter_info └── voters: StorySliderVotersFeedResponseResponseVotersItem[] ├── user: StorySliderVotersFeedResponseResponseUser ├── vote: number └── ts: number获取投票数据storySliderVoters 工厂方法与底层调用链在业务中获取滑块投票数据标准入口是IgApiClient的feed工厂const feed ig.feed.storySliderVoters(mediaId, stickerId); const voters await feed.items(); // StorySliderVotersFeedResponseResponseVotersItem[]该方法定义在 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, }); }注意它与storyPollVoters、storyQuestionResponses、storyQuizParticipants共用同一个泛型基类MediaStickerResponsesFeedT, Isrc/feeds/media.sticker-responses.feed.ts只是通过不同的name / rootName / itemName组合指向不同的端点与解析路径。底层请求与分页MediaStickerResponsesFeed发起的真实请求是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; }代入工厂参数后实际请求 URL 为GET /api/v1/media/{mediaId}/{stickerId}/story_slider_voters/分页逻辑由基类Feedsrc/core/feed.ts配合响应中的分页字段共同驱动protected set state(response: T) { this.maxId response[this.rootName].max_id; this.moreAvailable response[this.rootName].more_available; }首次请求不携带max_idthis.maxId初始为undefined响应中voter_info.more_available为true时Feed.isMoreAvailable()返回trueitems()会在后续请求中自动带上上一页返回的max_id游标循环拉取直到取完所有投票者若max_id为null且more_available为false表示当前已是最后一页。此外Feed基类还内置了请求重试机制attemptOptions延迟 60s 起、指数退避、最多 10 次并在遇到 Instagram 返回 400/429/500/502 等限流或临时错误时自动等待重试你可以通过覆盖feed.attemptOptions调整该策略。完整取数示例import { IgApiClient } from instagram-private-api; const ig new IgApiClient(); ig.state.generateDevice(your_username); await ig.account.login(your_username, your_password); const mediaId ...; // 目标故事story的 media id const stickerId emoji_slider_❤; // 滑块贴纸 ID格式为 emoji_slider_{emoji} const feed ig.feed.storySliderVoters(mediaId, stickerId); // 逐页取出全部投票记录 for await (const voters of feed.observable()) { for (const voter of voters) { console.log(${voter.user.username} voted ${voter.vote} at ${voter.ts}); } if (!feed.isMoreAvailable()) break; }其中feed.observable()是基于 RxJS 的异步迭代器src/core/feed.ts会自动在每一页之间进行限流等待semaphore参数可自定义节流函数适合批量拉取场景。配套能力滑块贴纸的发布与投票要完整理解「滑块投票」这一数据流除了读取投票者列表还需要了解滑块贴纸本身是如何产生与消费的。发布滑块贴纸SliderSticker类src/sticker-builder/stickers/slider.sticker.ts定义了发布侧的数据模型export class SliderSticker extends InstaSticker { question: string; emoji: string; backgroundColor?: string #ffffff; textColor?: string #000000; viewerCanVote?: boolean false; sliderVoteCount?: number 0; viewerVote?: number -1.0; sliderVoteAverage?: number 0.0; width 0.7291667; height 0.22212838; get id(): string { return emoji_slider_${this.emoji}; } get key(): string { return story_sliders; } }id派生规则为emoji_slider_{emoji}——这正是你调用storySliderVoters(mediaId, stickerId)时需要传入的stickerId发布时通过StickerBuilder.slider({...})组装examples/upload-story.example.ts底层由 src/services/publish.service.ts 将其序列化进configureOptions.story_sliders对应的请求参数类型为StorySlidersrc/types/media.configure-story.options.ts其中同样要求question、background_color、text_color、emoji等字段。主动投票若你的账号需要代表「观众」对某个滑块贴纸投票可以使用MediaRepository.storySliderVotesrc/repositories/media.repository.tspublic async storySliderVote( mediaId: string, sliderId: string | number, vote: number, ): PromiseMediaUpdatedMediaResponseRootObject { const { body } await this.client.request.send({ url: /api/v1/media/${mediaId}/${sliderId}/story_slider_vote/, method: POST, form: this.client.request.sign({ _csrftoken: this.client.state.cookieCsrfToken, _uid: this.client.state.cookieUserId, _uuid: this.client.state.uuid, vote: vote.toFixed(8), }), }); return body; }调用方式await ig.media.storySliderVote(mediaId, stickerId, 0.85); // 在 0.0 ~ 1.0 之间取值投票请求会将vote用toFixed(8)归一化后提交返回MediaUpdatedMediaResponseRootObject更新后的媒体信息。之后再次调用ig.feed.storySliderVoters(...)该账号便会出现在投票者列表中。常见用法与注意事项遍历顺序与去重voters数组中同一位用户只对应一条记录同一用户对同一滑块只能投一次再次投票会覆盖原值因此一般无需额外去重latest_slider_vote_time可用于判断数据的新鲜度。时间戳处理ts为秒级 Unix 时间戳展示时建议先new Date(ts * 1000)再格式化。投票数值解读vote反映用户在滑块上的滑动位置介于 0.0 到 1.0 之间可用于计算平均值、绘制分布直方图等发布侧SliderSticker的sliderVoteAverage字段即是 Instagram 汇总后的平均分。分页与限流拉取大量投票记录时建议依赖feed.observable()的内置节流与重试机制避免因请求过密触发 Instagram 的 429 限流对应仓库中的IgRequestsLimitError/IgResponseError异常。权限边界与其他私密 API 能力一致此类接口依赖有效的登录会话ig.state的设备信息与 Cookie请在合规前提下使用。总结StorySliderVotersFeedResponseResponseVotersItem是 instagram-private-api 中故事滑块投票功能的「最小数据单元」user描述投票者、vote描述投票数值、ts描述投票时刻。配合FeedFactory.storySliderVoters与MediaStickerResponsesFeed的分页请求机制你可以高效拉取任一滑块贴纸的全部投票记录再结合SliderSticker发布与MediaRepository.storySliderVote投票即可在代码层面打通「创建滑块 → 用户投票 → 拉取投票结果」的完整闭环。深入阅读 src/responses/story-slider-voters.feed.response.response.ts 与 src/core/feed.factory.ts 可获得更底层的实现细节。赞分享后端【免费下载链接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.项目地址https://gitcode.com/gh_mirrors/in/instagram-private-api点击查看免费下载相关推荐instagram-private-api 故事投票者数据结构StoryPollVotersFeedResponseUser 接口深度解析instagram private api 故事投票者数据结构StoryPollVotersFeedResponseUser 接口深度解析 本文围绕 inst后端instagram-private-api 响应结构解析StoryPollVotersFeedResponseRootObject 与故事投票者数据instagram private api 响应结构解析StoryPollVotersFeedResponseRootObject 与故事投票者数据 Stor后端instagram-private-api 故事问答响应数据模型StoryQuestionResponsesFeedResponseRootObject 接口深度解析instagram private api 故事问答响应数据模型StoryQuestionResponsesFeedResponseRootObject 接口后端上一篇SuperClaude Framework 工具脚本体系命令名清理、会话初始化与 plugins/src 双目录同步机制下一篇SkyWalking Marketplace 完全指南UI 侧边菜单的自动激活机制与自定义 Dashboard 接入创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价 →
↑