instagram-private-api 中 ReelsTrayFeedResponseBroadcastsItem 接口详解:解析 Reels 托盘里的直播(Broadcasts)数据
后端【免费下载链接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.项目地址https://gitcode.com/gh_mirrors/in/instagram-private-api点击查看免费下载本篇技术指南围绕 instagram-private-api 中 ReelsTrayFeedResponseBroadcastsItem 接口展开它定义了/api/v1/feed/reels_tray/接口响应中broadcasts数组项的完整结构也就是 Instagram 快拍托盘里正在直播的用户的元数据。读完后你将掌握如何获取该响应、逐字段解析直播状态/播放地址/榜单位置等信息并理解它与 Live 模块响应结构的关系。一、接口在项目中的位置Reels Tray 响应的顶层结构ReelsTrayFeedResponseBroadcastsItem定义于 src/responses/reels-tray.feed.response.ts它是 ReelsTrayFeed 对应响应根对象的一部分。根对象结构如下src/responses/reels-tray.feed.response.ts#L1-L10export interface ReelsTrayFeedResponseRootObject { tray: ReelsTrayFeedResponseTrayItem[]; // 好友快拍Stories列表 story_ranking_token: string; broadcasts: ReelsTrayFeedResponseBroadcastsItem[]; // 正在直播的用户列表本文主角 sticker_version: number; face_filter_nux_version: number; stories_viewer_gestures_nux_eligible: boolean; has_new_nux_story: boolean; status: string; }也就是说同一次 Reels Tray 请求会同时返回两类内容tray快拍与broadcasts直播。本文聚焦的ReelsTrayFeedResponseBroadcastsItem数组中每一项对应一个正在直播的账号。需要特别注意的是 src/feeds/reels-tray.feed.ts 中items()方法的实现/** * Returns only the stories (without the broadcasts) */ async items(): PromiseReelsTrayFeedResponseTrayItem[] { const response await this.request(); return response.tray; }从源码看items()被刻意设计为只返回快拍、丢弃直播数据。如果你需要读取broadcasts应当调用request()拿到完整的ReelsTrayFeedResponseRootObject再访问body.broadcasts字段。二、完整字段参考表以下表格完整继承了 接口文档 中列出的全部 21 个属性并结合 源码定义 按功能分组说明。2.1 身份与状态字段字段类型源码行号说明idstringL230直播broadcast的唯一标识可作为ig.live相关方法的broadcastId入参media_idstringL248直播对应的媒体 IDbroadcast_statusstringL235直播状态字符串可用于判断直播是否仍在进行published_timenumberL246直播开始时间Unix 时间戳2.2 播放地址字段字段类型源码行号说明rtmp_playback_urlstringL231RTMP 播放地址推流/回放链路常用协议dash_playback_urlstringL232DASH 播放地址dash_abr_playback_urlnullL233DASH ABR 播放地址类型被固定声明为null表明该仓库对接的响应版本中此字段实测恒为空dash_live_predictive_playback_urlstringL234直播预测式播放地址用于播放器预拉流优化cover_frame_urlstringL241直播封面帧图片地址可用于在列表中渲染直播缩略图2.3 观看量、排序与可见性字段字段类型源码行号说明viewer_countnumberL236当前观看人数internal_onlybooleanL237是否为内部直播仅内部可见mutedbooleanL238该直播是否被当前用户静音ranked_positionnumberL239该直播在托盘中的排序位置seen_ranked_positionnumberL240用户已看到的位置进度客户端据此区分未看与已看项hide_from_feed_unitbooleanL247是否应从信息流单元中隐藏该直播ranked_position与seen_ranked_position的字段命名和用法与同文件中ReelsTrayFeedResponseTrayItem快拍项L20-L21保持一致可以看出直播项与快拍项共用同一套托盘排序/已读机制。2.4 内容与播放特性字段字段类型源码行号说明cobroadcastersany[]L242联合主播列表源码中类型声明为any[]属于尚未精细建模的透传字段解析时应做防御性处理is_player_live_trace_enablednumberL243播放器直播追踪开关数字而非布尔为服务端原始表示is_gaming_contentbooleanL244是否为游戏直播内容2.5 主播信息与埋点字段字段类型源码行号说明broadcast_ownerReelsTrayFeedResponseBroadcast_ownerL245主播用户对象结构见下节broadcast_messagestringL249直播标题/广播消息文案organic_tracking_tokenstringL250自然流量追踪 token用于埋点归因业务侧一般无需处理2.6 嵌套对象broadcast_ownerbroadcast_owner的完整结构定义在 src/responses/reels-tray.feed.response.ts#L252-L262export interface ReelsTrayFeedResponseBroadcast_owner { pk: number; username: string; full_name: string; is_private: boolean; profile_pic_url: string; profile_pic_id: string; friendship_status: ReelsTrayFeedResponseFriendship_status; is_verified: boolean; live_subscription_status: string; }其中friendship_status复用同文件中的 ReelsTrayFeedResponseFriendship_status含following、followed_by、muting、is_private、is_bestie等字段可用于判断当前登录账号与主播之间的关注/互关/限制关系。live_subscription_status是该主播订阅状态的字符串表示。三、如何在代码中获取 broadcasts 数据3.1 通过 Feed 工厂创建 ReelsTrayFeedFeed 工厂方法位于 src/core/feed.factory.ts#L161-L163public reelsTray(reason: pull_to_refresh | cold_start cold_start): ReelsTrayFeed { return plainToClassFromExist(new ReelsTrayFeed(this.client), { reason }); }reason只有两个取值cold_start冷启动默认与pull_to_refresh下拉刷新会以表单项形式随请求提交。3.2 底层请求细节ReelsTrayFeed.request()的实现src/feeds/reels-tray.feed.ts#L17-L30以 POST 方式请求/api/v1/feed/reels_tray/表单包含 4 个参数const { body } await this.client.request.sendReelsTrayFeedResponseRootObject({ url: /api/v1/feed/reels_tray/, method: POST, form: { supported_capabilities_new: this.client.state.supportedCapabilities, reason: this.reason, _csrftoken: this.client.state.cookieCsrfToken, _uuid: this.client.state.uuid, }, }); this.state body; return body;可见该接口依赖登录态_csrftoken取自 cookie且设备指纹由supported_capabilities_new携带——使用前必须先完成ig.state.generateDevice(...)与ig.account.login(...)。3.3 完整调用示例以下示例的登录部分与仓库内 examples/user-stories-watching.example.ts 保持一致import dotenv/config; import { IgApiClient } from instagram-private-api; (async () { const ig new IgApiClient(); ig.state.generateDevice(process.env.IG_USERNAME); ig.state.proxyUrl process.env.IG_PROXY; // 可选 await ig.account.login(process.env.IG_USERNAME, process.env.IG_PASSWORD); // 1. 创建 Reels Tray Feedreason 默认 cold_start const feed ig.feed.reelsTray(cold_start); // 2. items() 只返回 tray快拍要拿直播必须走 request() const response await feed.request(); // 3. 遍历正在直播的账号 for (const live of response.broadcasts) { console.log(live.broadcast_owner.username, live.broadcast_message); console.log(status:, live.broadcast_status, viewers:, live.viewer_count); console.log(dash url:, live.dash_playback_url); console.log(cover:, live.cover_frame_url); } })();3.4 Feed 基类的通用机制ReelsTrayFeed继承自 src/core/feed.ts 中的Feed抽象类从源码结构看有两点值得了解基类提供items$/observable()src/core/feed.ts#L18-L61基于 RxJS lifeomic/attempt实现带指数退避的重试轮询遇 400/429/500/502 会等待后自动重试。注意对ReelsTrayFeed而言items()已重写为只取 tray因此 Observable 流中不会包含直播项request()的返回体会写入 feed 的state随后toPlain()/serialize()可将其持久化moreAvailable等字段经Expose()暴露。四、与 Live 模块的对照同一直播实体、两个入口阅读 src/responses/live.info.response.ts#L1-L20 中的LiveInfoResponseRootObject会发现它拥有几乎完全一致的字段集合id、rtmp_playback_url、dash_playback_url、dash_abr_playback_url: null、dash_live_predictive_playback_url、broadcast_status、viewer_count、internal_only、cobroadcasters、is_player_live_trace_enabled、is_gaming_content、broadcast_owner、published_time、hide_from_feed_unit、media_id、broadcast_message、organic_tracking_token并额外多出status字段而ReelsTrayFeedResponseBroadcastsItem额外带有muted、ranked_position、seen_ranked_position、cover_frame_url这类托盘展示语义的字段。可以推断Instagram 服务端对同一个直播实体在直播详情接口和快拍托盘接口中返回了两种形态——前者面向播放后者面向列表展示。仓库中的 LiveRepository.info() 通过GET /api/v1/live/{broadcastId}/info/获取前者因此一个典型的工作流是通过ig.feed.reelsTray()request()发现broadcasts中的直播拿到id与封面、观看数用ig.live.info(broadcast.id)或ig.live.heartbeatAndGetViewerCount(broadcast.id)src/repositories/live.repository.ts#L55-L66继续查询/维持观看会话。五、使用注意与文档溯源字段是服务端响应的静态快照该接口按抓包响应逐字段建模dash_abr_playback_url固定为null、cobroadcasters为any[]都说明这是以实际响应为准的类型策略。若 Instagram 调整响应结构接口定义需随之更新解析代码应保持可选性。文档与源码的对应关系本文所引用的接口文档 docs/interfaces/responses/ReelsTrayFeedResponseBroadcastsItem.md 由仓库的 TypeDoc 流程生成见 tsconfig.docs.json、typedoc.json每个属性都标注了Defined in指向 src/responses/reels-tray.feed.response.ts 的具体行号与当前仓库源码一致接口还通过 src/responses/index.ts 统一导出供ReelsTrayFeed等模块导入。适用前提该 Feed 需要有效的登录会话与设备指纹_csrftoken、_uuid、supported_capabilities_new未登录场景无法获取托盘直播数据reason参数的取值会影响服务端返回策略请按真实客户端语义选择。小结ReelsTrayFeedResponseBroadcastsItem是 instagram-private-api 中把 Instagram 好友托盘直播数据结构化访问的关键接口21 个字段覆盖了直播身份id/media_id、播放链路RTMP/DASH 地址、展示语义排序位、静音、封面、主播信息broadcast_owner与埋点organic_tracking_token。通过ig.feed.reelsTray().request()拿到完整响应后即可在不依赖 Live 模块的情况下枚举当前可见直播并借助broadcast_owner.pk、id等字段与 src/repositories/live.repository.ts 中的直播方法衔接实现发现直播 → 查看详情 → 维持观看的完整链路。赞分享后端【免费下载链接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.项目地址https://gitcode.com/gh_mirrors/in/instagram-private-api点击查看免费下载相关推荐instagram-private-api 中 ReelsTrayFeedResponseBroadcast_owner 接口详解Stories 托盘直播流主机的响应类型解析instagram private api 中 ReelsTrayFeedResponseBroadcast_owner 接口详解Stories 托盘直播流主后端instagram-private-api 中 ReelsMediaFeedResponseStoryPollsItem 接口详解解析 Reels/Story 投票贴纸的响应结构instagram private api 中 ReelsMediaFeedResponseStoryPollsItem 接口详解解析 Reels/Story后端ReelsMediaFeedResponseUser 详解instagram-private-api 中 Reels 媒体 Feed 的用户数据结构ReelsMediaFeedResponseUser 详解instagram private api 中 Reels 媒体 Feed 的用户数据结构 Reel后端上一篇Android视频压缩终极方案基于MediaCodec硬件加速的高性能实现下一篇解锁多模态创作能力ComfyUI音频处理框架的创新实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考