☰
instagram-private-api 视频配置响应解析:MediaRepositoryConfigureVideoResponseRootObject 接口完全指南
2026/10/16 7:12:47 网站建设 项目流程
  • 后端

【免费下载链接】instagram-private-api

NodeJS Instagram private API SDK. Written in TypeScript.

项目地址:https://gitcode.com/gh_mirrors/in/instagram-private-api
点击查看免费下载

本篇技术指南围绕 instagram-private-api(NodeJS/TypeScript 编写的 Instagram 私有 API SDK)中视频发布链路的关键响应类型MediaRepositoryConfigureVideoResponseRootObject,系统讲解其字段结构、嵌套类型、生成时机与底层调用链。读完本文,你将掌握视频 configure 响应的完整数据模型,并能在ig.publish.video()或ig.media.configureVideo()返回结果中准确提取媒体信息、判断发布结果,从而构建可靠的视频发布与校验逻辑。

一、接口定位:视频 configure 响应的顶层容器

在 instagram-private-api 的响应模型体系中,MediaRepositoryConfigureVideoResponseRootObject是对 Instagram 服务端/api/v1/media/configure/(视频模式)返回 JSON 的 TypeScript 类型化描述。它定义在 src/responses/media.repository.configure-video.response.ts,并通过 src/responses/index.ts 统一导出,供全仓库引用。

该接口只有三个顶层字段,结构非常精简:

export interface MediaRepositoryConfigureVideoResponseRootObject { media: MediaRepositoryConfigureVideoResponseMedia; upload_id: string; status: string; }
字段类型含义
mediaMediaRepositoryConfigureVideoResponseMedia配置完成后的媒体对象,包含视频帖子在 Instagram 上的完整描述
upload_idstring与本次发布关联的上传 ID,用于回传映射,通常即Date.now().toString()
statusstring服务端处理状态标识,正常为"ok",可据此判断 configure 是否成功

文档中该接口归属responses模块(见 docs/modules/responses.md 接口清单中的MediaRepositoryConfigureVideoResponseRootObject条目),同一响应文件中还依次声明了Media、Image_versions2、CandidatesItem、User、Usertags、InItem、Fb_user_tags等嵌套接口,共同构成一棵完整的响应数据树。

二、核心字段详解:media 对象的数据模型

media字段是响应主体,其类型MediaRepositoryConfigureVideoResponseMedia(接口文档,源码见 src/responses/media.repository.configure-video.response.ts)包含了视频帖子被 Instagram 收录后的全部元数据,可按用途划分为以下几组。

2.1 媒体标识与时间戳

字段类型说明
pkstring媒体的唯一主键(即 mediaId 的数字部分),可拼接为mediaId供其他接口使用
idstring完整媒体 ID,形如pk_userId
codestring帖子的短码(URL 中的短链接标识)
taken_atnumber拍摄/发布时的 Unix 时间戳(秒)
device_timestampnumber设备侧时间戳
client_cache_keystring客户端缓存键,通常形如pk_uploadId

2.2 媒体类型与画面信息

字段类型说明
media_typenumber媒体类型枚举:2 表示图片、3 表示视频(本响应场景固定为视频相关取值)
filter_typenumber滤镜类型编号,configure 默认填充'0'(无滤镜)
original_width/original_heightnumber源视频的原始像素宽高,来自上传前解析的 MP4 元信息
image_versions2Image_versions2封面图多分辨率候选项容器

image_versions2只含一个candidates数组(Image_versions2 文档),每个CandidatesItem(接口文档)描述一张封面缩略图:

export interface MediaRepositoryConfigureVideoResponseCandidatesItem { width: number; // 缩略图宽度 height: number; // 缩略图高度 url: string; // 可访问的 CDN 地址 estimated_scans_sizes: number[]; // 各渐进式扫描层预估大小(用于渐进式加载) }

取第一个 candidate 的url即可获得帖子封面,这是发布后立即生成可视化预览的常用手段。

2.3 作者信息:user 对象

user字段(接口文档)描述当前发布账号:

字段类型说明
pknumber用户数字 ID
username/full_namestring用户名与显示名
is_privateboolean账号是否私密
profile_pic_url/profile_pic_idstring头像 URL 及其 ID
has_anonymous_profile_pictureboolean?是否为默认匿名头像(可选字段)
can_boost_post/can_see_organic_insights/show_insights_termsboolean?商业化与数据洞察相关开关(可选)
reel_auto_archivestring?快拍自动归档配置(可选)
is_unpublished/is_verifiedboolean?是否未发布 / 是否认证账号(可选)
latest_reel_medianull?最近快拍媒体,此处通常为 null

2.4 交互与评论配置

字段类型说明
can_viewer_reshareboolean当前查看者是否可以转发
can_viewer_saveboolean当前查看者是否可以保存
comment_likes_enabledboolean是否启用评论点赞
comment_threading_enabledboolean是否启用评论楼中楼
comment_countnumber评论总数
has_more_commentsboolean是否还有更多评论
max_num_visible_preview_commentsnumber预览评论可见数量上限
preview_commentsany[]预览评论列表(本接口中未细化类型)
can_view_more_preview_commentsboolean是否可以查看更多预览评论
photo_of_youboolean是否包含“照片中的你”标记
captionnull说明文字,本场景中未启用时固定为 null

2.5 标签类信息

字段类型说明
usertagsUsertags用户标签容器,in数组每项为InItem
fb_user_tagsFb_user_tagsFacebook 用户标签容器,in为any[]
organic_tracking_tokenstring用于数据归因的追踪令牌

Usertags(接口文档)中的每个InItem(接口文档)结构为:

export interface MediaRepositoryConfigureVideoResponseInItem { user: MediaRepositoryConfigureVideoResponseUser; // 被标记的用户 position: number[]; // 标记在画面上的归一化坐标 start_time_in_video_in_sec: null; // 视频中出现起始秒数(本场景为 null) duration_in_video_in_sec: null; // 视频中持续秒数(本场景为 null) }

Fb_user_tags(接口文档)则只含in: any[],说明该字段在本 SDK 中未做进一步类型化。

三、底层调用链:响应从何而来

MediaRepositoryConfigureVideoResponseRootObject是视频发布“configure(配置)阶段”的产物。从源码可以还原完整调用链(参见 examples/upload-video.example.ts):

  1. 入口:ig.publish.video({ video, coverImage, caption, usertags, location })(PublishService.video)。
  2. 上传:依次完成视频分段/整段上传、封面图上传、media.uploadFinish()收尾(含source_type: '4'与video.length)。
  3. configure:this.client.media.configureVideo(configureOptions)最终发出POST /api/v1/media/configure/?video=1请求(见 MediaRepository.configureVideo),其form通过this.client.request.sign(form)签名后提交。
  4. 返回:请求响应体body即对应本接口所描述的 JSON 结构。

configureVideo内部通过applyConfigureDefaults为表单补充默认值(media.repository.ts):自动注入_csrftoken、_uid、_uuid、device等签名必需字段,并填充timezone_offset、date_time_original、caption、source_type: '4'、filter_type: '0'、audio_muted: false、poster_frame_index: 0等默认项;若传入了usertags或location,则会先序列化为 JSON 字符串再随表单发送,与响应中的Usertags结构一一对应。

配置入参类型定义在 src/types/media.configure-video.options.ts(MediaConfigureTimelineVideoOptions),可选字段包括filter_type、timezone_offset、usertags、location、source_type、device_id、caption、date_time_original等。

细节提示:在 src/responses/media.repository.configure-video.response.ts 中同时声明了MediaRepositoryConfigureResponseRootObject与MediaRepositoryConfigureVideoResponseRootObject两个顶层接口,二者结构相同;repository 方法当前的返回类型标注为前者,文档侧则记录了后者。使用时两者可按相同结构对待。

四、错误处理与状态判断

发布阶段若失败,PublishService.video做了多层防护(publish.service.ts):

  • 上传阶段错误包装为IgUploadVideoError(src/errors/ig-upload-video-error.ts),携带响应体与视频信息。
  • 遇到 HTTP 202(转码待完成)时,catchTranscodeError会按options.transcodeDelay(默认 5000ms)等待后重试(publish.service.ts)。
  • configure 阶段最多重试 6 次(指数退避(i+1)*2秒);超过次数或收到>= 400状态码时抛出IgConfigureVideoError(src/errors/ig-configure-video-error.ts)。

因此在业务代码中,拿到MediaRepositoryConfigureVideoResponseRootObject后,建议按以下顺序校验:

  1. 检查status === 'ok',否则视为发布未成功;
  2. 读取media.pk/media.id拼接完整 mediaId,用于后续ig.media.info()、ig.media.delete()等操作;
  3. 从media.image_versions2.candidates[0].url取封面图,从media.code构造帖子短链接。

五、完整示例:发布视频并解析响应

参考 examples/upload-video.example.ts,可写出如下端到端用法:

import { IgApiClient } from './src'; import { readFile } from 'fs'; import { promisify } from 'util'; const readFileAsync = promisify(readFile); const ig = new IgApiClient(); async function login() { 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); } (async () => { await login(); const publishResult = await ig.publish.video({ video: await readFileAsync('./myVideo.mp4'), // MP4 Buffer coverImage: await readFileAsync('./myVideoCover.jpg'), // 封面图 Buffer caption: 'posted via instagram-private-api', // 亦支持 usertags、location,参见 upload-photo.example.ts }); // publishResult 即 MediaRepositoryConfigureVideoResponseRootObject 对应结构 if (publishResult.status !== 'ok') { throw new Error('video configure failed'); } console.log('mediaId =', publishResult.media.pk, '/', publishResult.media.id); console.log('short code =', publishResult.media.code); console.log('cover url =', publishResult.media.image_versions2.candidates[0].url); console.log('upload_id =', publishResult.upload_id); })();

六、总结

MediaRepositoryConfigureVideoResponseRootObject是 instagram-private-api 视频发布链路中 configure 阶段的响应契约,以极简的三字段(media/upload_id/status)承载完整的视频帖元数据。其嵌套结构——Media、Image_versions2、CandidatesItem、User、Usertags、InItem、Fb_user_tags——与上传表单的参数设计相互呼应(如usertags表单字段对应响应中的Usertags.in)。理解这一数据模型,配合 PublishService 的重试与错误包装机制,即可在自动化发布、内容归档、封面预览等场景中稳健地处理视频发布结果。更多响应类型可查阅 docs/modules/responses.md 索引继续深入。

  • 后端

【免费下载链接】instagram-private-api

NodeJS Instagram private API SDK. Written in TypeScript.

项目地址:https://gitcode.com/gh_mirrors/in/instagram-private-api
点击查看免费下载
上一篇:激光雕刻新手指南:5个技巧快速掌握LaserWeb4开源控制软件
下一篇:golangci-lint 架构深度解析:从配置加载、包加载、linter 执行到问题输出的完整流水线

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询