instagram-private-api 视频配置响应解析:MediaRepositoryConfigureVideoResponseCandidatesItem 接口全解
后端【免费下载链接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.项目地址https://gitcode.com/gh_mirrors/in/instagram-private-api点击查看免费下载导读MediaRepositoryConfigureVideoResponseCandidatesItem是 instagram-private-apiNodeJS 版 Instagram 私密 API SDKTypeScript 编写中用于描述视频配置成功后封面/缩略图候选版本的核心响应接口。本文以该接口为骨架完整讲解其 4 个属性字段的含义与类型约束并沿着「上传 → 配置configure→ 返回」的调用链结合 响应定义源码 与 发布服务源码 说明它在整个视频发布流程中的位置、生成机制与实战读取方式帮助你准确解析视频发布结果中的图片候选数据。接口定位视频配置响应的图片候选从属关系与嵌套结构在 instagram-private-api 中视频发布成功后会调用configureVideo完成「配置」步骤服务端返回的响应体顶层结构定义如下见 src/responses/media.repository.configure-video.response.tsexport interface MediaRepositoryConfigureVideoResponseRootObject { media: MediaRepositoryConfigureVideoResponseMedia; upload_id: string; status: string; }其中media对象携带了发布后的完整媒体信息包括pk、code、media_type、caption、usertags等字段而视频的封面候选图则由image_versions2承载export interface MediaRepositoryConfigureVideoResponseImage_versions2 { candidates: MediaRepositoryConfigureVideoResponseCandidatesItem[]; }也就是说MediaRepositoryConfigureVideoResponseCandidatesItem是media.image_versions2.candidates数组中的元素类型见 src/responses/media.repository.configure-video.response.ts。该接口的 TypeDoc 文档入口位于 docs/interfaces/responses/MediaRepositoryConfigureVideoResponseCandidatesItem.md并通过 src/responses/index.ts 统一导出方便从src/responses模块一次性引入。与照片配置响应的设计一致性从源码结构看「image_versions2.candidates」这一模式并非视频响应独有liked.feed.response.ts、highlights.repository.create-reel.response.ts、igtv.browse.feed.response.ts等大量响应类型中都出现了相同的候选数组结构。因此可以推断candidates 数组是 Instagram 客户端展示媒体封面/缩略图的通用数据结构视频配置响应只是复用了这一约定。理解该接口也能顺带读懂其他 feed 中封面图候选的解析逻辑。四个属性字段详解该接口共定义 4 个必填属性全部为原始值类型接口本身不嵌套其他接口属性名类型语义widthnumber候选封面图的像素宽度heightnumber候选封面图的像素高度urlstring候选封面图的 CDN 图片地址estimated_scans_sizesnumber[]渐进式扫描progressive scan的预估字节数组width 与 height候选图的分辨率width与height是候选封面图的真实像素尺寸服务端会针对同一视频返回多档分辨率的候选图例如竖版视频可能同时包含 320×405、480×607、640×810 等多组候选。客户端可根据显示场景选择最合适的一档例如列表页用低分辨率缩略图以节省流量详情页则选择高分辨率版本。注意它们是候选图尺寸并非源视频本身的分辨率——源视频的尺寸信息记录在media的original_width与original_height字段上。url可直接请求的图片地址url是候选图的完整 HTTPS 地址通常指向 Instagram 的图片 CDN可以直接用于下载或展示无需再拼接域名或路径。这也是解析该接口最常见的用途拿到发布结果后从candidates中取出想要的封面图地址用于业务侧展示。estimated_scans_sizes渐进式加载的预估分块estimated_scans_sizes的类型是number[]从命名与结构可以推断该数组记录的是图片进行渐进式逐层渲染时各扫描块的预估字节数客户端可据此预判加载进度并优化占位图体验。数组元素数量通常对应候选图的渐进扫描层数。它是服务端返回的元数据使用方一般直接透传或忽略即可。深入调用链从上传到配置返回configureVideo配置接口的底层实现该响应类型是client.media.configureVideo()的返回体。该方法的实现位于 src/repositories/media.repository.ts其核心逻辑如下public async configureVideo(options: MediaConfigureTimelineVideoOptions) { const now DateTime.local().toFormat(yyyy:mm:dd HH:mm:ss); const form this.applyConfigureDefaultsMediaConfigureTimelineVideoOptions(options, { width: options.width, height: options.height, upload_id: Date.now().toString(), timezone_offset: this.client.state.timezoneOffset, date_time_original: now, caption: , source_type: 4, device_id: this.client.state.deviceId, filter_type: 0, audio_muted: false, poster_frame_index: 0, }); // ...usertags / location 序列化处理 const { body } await this.client.request.sendMediaRepositoryConfigureResponseRootObject({ url: /api/v1/media/configure/, method: POST, qs: { video: 1 }, form: this.client.request.sign(form), }); return body; }要点说明请求目标是POST /api/v1/media/configure/并通过 query 参数video: 1标识这是视频配置请求请求体由applyConfigureDefaultssrc/repositories/media.repository.ts自动补齐_csrftoken、_uid、_uuid、device等设备信息与安全字段再经client.request.sign(form)签名输入参数类型为MediaConfigureTimelineVideoOptions定义见 src/types/media.configure-video.options.ts其中width、height、length、clips、poster_frame_index、audio_muted等字段直接决定了服务端生成封面候选图的分辨率档位视频配置请求体中poster_frame_index默认为0即默认取视频第 0 帧作为封面封面帧确定后服务端才据此生成各档candidates。PublishService发布视频的完整流水线上层入口是client.publish.video()实现于 src/services/publish.service.ts。一次完整的视频发布包含以下步骤regularVideo→client.upload.video()若为分段上传则走upload.videoSegmentInit/upload.videoSegmentTransfer先把视频流上传到 Instagram取得upload_idclient.upload.photo({ file: options.coverImage, uploadId })上传封面图PostingVideoOptions中的coverImage见 src/types/posting.video.options.tsclient.media.uploadFinish(...)通知服务端转码开始client.media.configureVideo(configureOptions)执行配置返回的响应体即本文所讲的MediaRepositoryConfigureVideoResponseRootObject。其中configureVideo被包在一个最多 6 次的重试循环中当响应状态码小于 400 但抛错时会按(i 1) * 2秒递增间隔重试重试耗尽或状态码 ≥ 400 时抛出IgConfigureVideoError相关错误类型见 src/errors/ig-configure-video-error.ts。这保证了服务端转码尚未就绪时客户端能自动等待重试而不是立刻失败。实战如何从发布结果中读取封面候选图结合 examples/upload-video.example.ts 的用法发布视频后即可拿到包含candidates的响应import { IgApiClient } from ../src; import { readFile } from fs; import { promisify } from util; const readFileAsync promisify(readFile); 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); const publishResult await ig.publish.video({ video: await readFileAsync(./myVideo.mp4), coverImage: await readFileAsync(./myVideoCover.jpg), caption: Hello from instagram-private-api, }); // publishResult 的类型即为 MediaRepositoryConfigureVideoResponseRootObject const candidates publishResult.media.image_versions2.candidates; // 每个元素都是 MediaRepositoryConfigureVideoResponseCandidatesItem // { width, height, url, estimated_scans_sizes } // 按需选择分辨率最高的封面候选 const bestCover candidates.reduce((a, b) (a.width * a.height b.width * b.height ? a : b)); console.log(封面地址${bestCover.url}${bestCover.width}x${bestCover.height});通过publishResult.media.image_versions2.candidates即可遍历全部候选封面图width × height可用于筛选最高分辨率版本url可直接用于展示或分发。同理该发布结果中的media.pk、media.code、media.original_width、media.original_height等字段也一并可用。相邻接口速览理解CandidatesItem时通常还会接触同文件中与其相邻的这几个接口均见 src/responses/media.repository.configure-video.response.tsMediaRepositoryConfigureVideoResponseMedia发布后媒体主体包含pk、code、media_type、original_width/original_height、usertags、caption等MediaRepositoryConfigureVideoResponseUser发布者信息包含pk、username、full_name、profile_pic_url、is_private、is_verified等MediaRepositoryConfigureVideoResponseUsertags/InItem视频内标记的用户及其位置坐标positionMediaRepositoryConfigureVideoResponseFb_user_tagsFacebook 用户标记当前为任意类型数组。这些接口与CandidatesItem一样共同构成了完整的视频配置响应类型树便于你在解析发布结果时进行类型安全的字段访问。小结MediaRepositoryConfigureVideoResponseCandidatesItem虽然只有 4 个字段却是理解视频发布结果中「封面候选图」的关键入口。透过它可以看到 instagram-private-api 的清晰分层设计底层 MediaRepository.configureVideo 负责与/api/v1/media/configure/通信并签名请求上层 PublishService.video 负责上传、转码等待与失败重试最终把结构完整的响应体交还调用方。掌握该接口的属性含义与嵌套位置后无论是挑选封面图、校验发布结果还是扩展自己的媒体处理逻辑都能直接在 TypeScript 类型系统的辅助下安全、高效地完成。赞分享后端【免费下载链接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.项目地址https://gitcode.com/gh_mirrors/in/instagram-private-api点击查看免费下载相关推荐instagram-private-api 视频配置响应解析MediaRepositoryConfigureVideoResponseRootObject 接口完全指南instagram private api 视频配置响应解析MediaRepositoryConfigureVideoResponseRootObject 接后端instagram-private-api 视频配置响应解析MediaRepositoryConfigureVideoResponseMedia 接口全字段指南instagram private api 视频配置响应解析MediaRepositoryConfigureVideoResponseMedia 接口全字段指后端learn-harness-engineering 实战Electron 架构边界规则与端到端测试如何改变 Agent 交付结果learn harness engineering 实战Electron 架构边界规则与端到端测试如何改变 Agent 交付结果 本篇文章围绕仓库中 架构规则后端上一篇CopilotKit 与 LangGraph 实战构建带人工审批中断HITL Interrupt的 AI Agent下一篇OWASP Top 10:2025 A02 安全配置错误Security Misconfiguration深度解读与实践加固指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考