贊者響應(yīng)解析:MediaRepositoryLikersResponseRootObject 接口全解)
后端【免費(fèi)下載鏈接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.項(xiàng)目地址https://gitcode.com/gh_mirrors/in/instagram-private-api點(diǎn)擊查看免費(fèi)下載導(dǎo)讀本文圍繞 instagram-private-apiNodeJS Instagram 私有 API SDKTypeScript 編寫中MediaRepositoryLikersResponseRootObject這一核心響應(yīng)接口展開它承載著ig.media.likers()獲取某條媒體點(diǎn)贊用戶列表的完整返回值。讀完本文你將掌握該接口的字段語義、嵌套的MediaRepositoryLikersResponseUsersItem用戶結(jié)構(gòu)、底層請求鏈路含大整數(shù)精度處理并能寫出可直接運(yùn)行的查詢某條帖子點(diǎn)贊者實(shí)戰(zhàn)代碼。一、接口在 SDK 中的位置與調(diào)用入口MediaRepositoryLikersResponseRootObject是MediaRepository中l(wèi)ikers()方法的返回值類型。該方法定義在 src/repositories/media.repository.ts實(shí)現(xiàn)極為精簡public async likers(id: string): PromiseMediaRepositoryLikersResponseRootObject { const { body } await this.client.request.sendMediaRepositoryLikersResponseRootObject({ url: /api/v1/media/${id}/likers/, }); return body; }從中可以確認(rèn)的關(guān)鍵事實(shí)入?yún)d為string類型即媒體 ID例如ig.feed.user()或TimelineFeed返回的帖子items[].id實(shí)際請求為對https://i.instagram.com/api/v1/media/{id}/likers/的GET請求返回值直接由request.sendT()泛型斷言為MediaRepositoryLikersResponseRootObjectSDK 不會做二次轉(zhuǎn)換因此接口定義與線上 JSON 字段一一對應(yīng)。在客戶端對象上通過ig.media即MediaRepository實(shí)例命名規(guī)則為去掉Repository后綴的 camelCase 形式參見 README.md即可調(diào)用該方法。完整的接口方法簽名可查閱 docs/classes/repositories/MediaRepository.md。二、響應(yīng)根對象的三字段結(jié)構(gòu)接口定義位于 src/responses/media.repository.likers.response.ts并通過 src/responses/index.ts 統(tǒng)一導(dǎo)出export interface MediaRepositoryLikersResponseRootObject { users: MediaRepositoryLikersResponseUsersItem[]; user_count: number; status: string; }字段類型語義usersMediaRepositoryLikersResponseUsersItem[]本次響應(yīng)攜帶的點(diǎn)贊用戶數(shù)組是主要業(yè)務(wù)數(shù)據(jù)user_countnumber點(diǎn)贊用戶數(shù)量統(tǒng)計(jì)詳見下方說明statusstring請求狀態(tài)標(biāo)識成功時(shí)為ok其中status字段與請求層強(qiáng)相關(guān)在 src/core/request.ts 中SDK 通過response.body.status ok判斷請求是否成功若不為ok則會進(jìn)入錯(cuò)誤處理鏈路并拋出對應(yīng)的IgClientError子類如IgNotFoundError、IgLoginRequiredError、IgPrivateUserError等。因此在正常返回的響應(yīng)對象中status基本恒為ok但它仍然被保留在接口中供上層自行校驗(yàn)。關(guān)于user_count從字段命名和該接口的語義可以推斷它表示該媒體點(diǎn)贊用戶的總量。值得注意的是Instagram 服務(wù)端返回的點(diǎn)贊者列表通常只是部分用戶類似分頁截?cái)嘁虼藆ser_count的數(shù)值可能大于users數(shù)組的實(shí)際長度適合用于展示共 X 人點(diǎn)贊之類的統(tǒng)計(jì)信息而非逐項(xiàng)遍歷時(shí)的循環(huán)上限。三、users 數(shù)組MediaRepositoryLikersResponseUsersItem 逐字段詳解users數(shù)組的元素類型MediaRepositoryLikersResponseUsersItem與根接口定義在同一個(gè)源文件中src/responses/media.repository.likers.response.ts其完整定義如下export interface MediaRepositoryLikersResponseUsersItem { pk: number; username: string; full_name: string; is_private: boolean; profile_pic_url: string; profile_pic_id?: string; is_verified: boolean; latest_reel_media?: number; }逐字段說明字段類型必填含義與典型用途pknumber是用戶的唯一數(shù)字 ID主鍵??捎糜诤罄m(xù)ig.user.info()、關(guān)注/取關(guān)等操作usernamestring是用戶名如cristianofull_namestring是用戶顯示名昵稱可為空字符串is_privateboolean是是否為私密賬號常用于展示與關(guān)注策略判斷profile_pic_urlstring是頭像圖片 URL可直接用于下載頭像profile_pic_idstring否頭像圖片的唯一 ID通常存在于新版 API 響應(yīng)中is_verifiedboolean是是否通過官方認(rèn)證藍(lán) V適合做身份標(biāo)注latest_reel_medianumber否該用戶最新一條快拍Reel/Story的媒體時(shí)間戳或 ID可用于判斷其是否有活躍快拍其中profile_pic_id、latest_reel_media為可選字段文檔中以O(shè)ptional標(biāo)注參見 docs/interfaces/responses/MediaRepositoryLikersResponseUsersItem.md在實(shí)際響應(yīng)中可能缺失訪問前建議做判空處理。大整數(shù)精度提示pk 的實(shí)際運(yùn)行時(shí)形態(tài)這是一個(gè)值得特別留意的坑Instagram 的用戶pk通常是 19 位左右的超長整數(shù)超出了Number.MAX_SAFE_INTEGER。SDK 在 src/core/request.ts 中通過JSONbigStringjson-bigint且storeAsString: true解析響應(yīng)體其注釋明確說明Sometimes we have numbers greater than Number.MAX_SAFE_INTEGER in json response. To handle it we just wrap numbers with length 15 it double quotes to get strings instead.也就是說長度超過 15 位的數(shù)字在運(yùn)行時(shí)會被解析成字符串。接口聲明pk: number屬于 TypeScript 靜態(tài)類型層面的約定而實(shí)際拿到的pk值可能是string形態(tài)。因此將pk傳入其它接口如ig.user.info(pk)或做字符串拼接、去重比較時(shí)建議統(tǒng)一先轉(zhuǎn)成字符串再使用避免精度丟失或類型不一致引發(fā)的問題。四、底層請求鏈路一次 likers 調(diào)用發(fā)生了什么從調(diào)用ig.media.likers(mediaId)到拿到響應(yīng)核心鏈路如下MediaRepository.likers()構(gòu)造 URL/api/v1/media/${id}/likers/并調(diào)用request.sendT()request.send()src/core/request.ts以https://i.instagram.com/為baseUrl發(fā)起 GET 請求默認(rèn)攜帶 Cookiejar: this.client.state.cookieJar、啟用gzip并附帶 SDK 生成的默認(rèn)請求頭響應(yīng)體經(jīng)JSONbigString解析后若body.status ok則直接返回否則拋出對應(yīng)錯(cuò)誤類型每次請求完成后request.end$流會觸發(fā)見 examples/session.example.ts可用于會話狀態(tài)的自動序列化保存。這一機(jī)制決定了調(diào)用likers()前必須先完成登錄態(tài)初始化ig.state.generateDevice()ig.account.login()或通過ig.state.deserialize()恢復(fù)已保存的會話否則請求會被服務(wù)端判定為未授權(quán)拋出IgLoginRequiredError。五、完整實(shí)戰(zhàn)示例查詢一條媒體的點(diǎn)贊者結(jié)合 README.md 的登錄流程一個(gè)可復(fù)制運(yùn)行的完整示例如下import { IgApiClient } from instagram-private-api; async function getLikers() { const ig new IgApiClient(); // 必須先基于種子生成設(shè)備信息同一用戶名生成的設(shè)備 ID 一致 ig.state.generateDevice(process.env.IG_USERNAME); // 可選設(shè)置代理 ig.state.proxyUrl process.env.IG_PROXY; await ig.account.login(process.env.IG_USERNAME, process.env.IG_PASSWORD); // 獲取媒體 ID這里以當(dāng)前登錄用戶的時(shí)間線第一頁第一條帖子為例 const timeline ig.feed.timeline(); const items await timeline.items(); const mediaId items[0].id; // 帖子的 .id 即 likers() 所需參數(shù) // 調(diào)用 likers()獲得 MediaRepositoryLikersResponseRootObject const likersResponse await ig.media.likers(mediaId); console.log(點(diǎn)贊總數(shù):, likersResponse.user_count); console.log(本次返回條數(shù):, likersResponse.users.length); console.log(狀態(tài):, likersResponse.status); for (const user of likersResponse.users) { console.log( - ${user.username}${user.full_name || 無昵稱}, ID${String(user.pk)}, // 大整數(shù)建議轉(zhuǎn)字符串處理 user.is_verified ? [藍(lán)V] : , user.is_private ? [私密] : , ); // 后續(xù)可按需調(diào)用await ig.user.info(user.pk) 等 } } getLikers().catch(err console.error(獲取點(diǎn)贊者失敗:, err.message));使用要點(diǎn)若想獲取指定用戶的帖子 ID可改用ig.feed.user(userPk)參見 docs/classes/feeds/UserFeed.md取得其媒體后傳入私有媒體的點(diǎn)贊者列表只能由關(guān)注了該賬號的用戶獲取否則可能觸發(fā)IgPrivateUserError會話復(fù)用場景下建議仿照 examples/session.example.ts 在ig.request.end$中保存ig.state.serialize()的結(jié)果避免頻繁登錄。六、常見邊界與注意事項(xiàng)匯總場景說明未登錄調(diào)用拋出IgLoginRequiredError需要先完成generateDevice 登錄/反序列化會話媒體 ID 不存在拋出IgNotFoundError注意媒體 ID 必須為字符串形式私有媒體/賬號權(quán)限不足時(shí)可能拋出IgPrivateUserError需要關(guān)注該賬號或使用有權(quán)限的賬號大整數(shù)pk運(yùn)行時(shí)會以字符串形態(tài)出現(xiàn)數(shù)字位數(shù) 15 會被json-bigint轉(zhuǎn)為字符串跨接口傳參時(shí)統(tǒng)一轉(zhuǎn)字符串響應(yīng)被截?cái)鄒sers數(shù)組通常不是全量點(diǎn)贊者user_count才代表總數(shù)如業(yè)務(wù)需要完整列表可考慮結(jié)合時(shí)間線/用戶頁點(diǎn)贊信息多次聚合請求頻率高頻調(diào)用可能觸發(fā)IgActionSpamError/IgRequestsLimitError建議控制并發(fā)并做好退避七、延伸閱讀接口完整文檔docs/interfaces/responses/MediaRepositoryLikersResponseRootObject.md、docs/interfaces/responses/MediaRepositoryLikersResponseUsersItem.md所屬模塊索引docs/modules/responses.md調(diào)用方實(shí)現(xiàn)src/repositories/media.repository.ts響應(yīng)類型定義src/responses/media.repository.likers.response.ts請求層實(shí)現(xiàn)與 JSON 大整數(shù)處理src/core/request.ts登錄與會話持久化示例examples/session.example.ts贊分享后端【免費(fèi)下載鏈接】instagram-private-apiNodeJS Instagram private API SDK. Written in TypeScript.項(xiàng)目地址https://gitcode.com/gh_mirrors/in/instagram-private-api點(diǎn)擊查看免費(fèi)下載相關(guān)推薦instagram-private-api 私信媒體響應(yīng)接口解析DirectThreadRepositoryApproveParticipantRequestResponseMedia 全字段指南instagram private api 私信媒體響應(yīng)接口解析DirectThreadRepositoryApproveParticipantRequest后端通吃九大網(wǎng)盤LinkSwift 網(wǎng)盤直鏈解析腳本完整指南通吃九大網(wǎng)盤LinkSwift 網(wǎng)盤直鏈解析腳本完整指南 LinkSwift 是一款 網(wǎng)盤直鏈解析 油猴腳本全程在瀏覽器本地運(yùn)行只調(diào)用網(wǎng)盤官方接口不經(jīng)過后端instagram-private-api 響應(yīng)類型解析HighlightsRepositoryHighlightsTrayResponseCropped_image_version 接口全解instagram private api 響應(yīng)類型解析HighlightsRepositoryHighlightsTrayResponseCropped_i后端上一篇可視化編程免費(fèi)工具大全10個(gè)低代碼平臺讓開發(fā)更簡單下一篇LangChain對話系統(tǒng)構(gòu)建智能AI助手的終極指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考