网页爬虫【免费下载链接】instagrapi The fastest and powerful Python library for Instagram Private API 2026 with HikerAPI SaaS项目地址https://gitcode.com/gh_mirrors/in/instagrapi点击查看免费下载本指南以 docs/usage-guide/highlight.md 为核心系统讲解 instagrapi 中 Instagram 故事高亮Highlight / Reel的完整操作面从 URL 解析、查询用户全部高亮与单个高亮详情到创建高亮、修改标题/封面、增删故事、删除高亮。读完本文你将掌握HighlightMixin提供的全部 9 个公开方法的参数语义、返回结构、底层私有接口调用链与常见坑点可直接用于构建内容归档、故事精选备份或账号运营自动化脚本。方法总览HighlightMixin定义于 instagrapi/mixins/highlight.py所有方法均绑定在Client实例上即cl.xxx。下表为文档中的完整方法清单含方法签名与返回值方法返回说明highlight_pk_from_url(url: str)str从 URL 中提取高亮 PKhighlight_info(highlight_pk: str)Highlight按 PK 或 ID 获取单个高亮详情user_highlights(user_id: str, amount: int 0)List[Highlight]获取指定用户的高亮列表highlight_create(title: str, story_ids: List[str], cover_story_id: str , crop_rect: List[float] [0.0, 0.21830457, 1.0, 0.78094524])Highlight创建高亮highlight_edit(highlight_pk: str, title: str , cover: Dict {}, added_media_ids: List[str] [], removed_media_ids: List[str] [])Highlight底层高亮编辑助手低层接口highlight_change_title(highlight_pk: str, title: str)Highlight修改高亮标题highlight_change_cover(highlight_pk: str, cover_path: Path)Highlight修改高亮封面highlight_add_stories(highlight_pk: str, added_media_ids: List[str])Highlight向高亮添加故事highlight_remove_stories(highlight_pk: str, removed_media_ids: List[str])Highlight从高亮移除故事highlight_delete(highlight_pk: str)bool删除高亮注意highlight_edit是低层接口其余变更类方法改标题、改封面、增删故事在实现上都是对它的封装多数情况下建议优先使用语义清晰的封装方法。从 URL 提取高亮 PKhighlight_pk_from_url()用于把用户分享的高亮链接转换成 API 所需的 PK 字符串 cl.highlight_pk_from_url(https://www.instagram.com/stories/highlights/17895485201104054/) 17895485201104054源码实现instagrapi/mixins/highlight.py#L17-L38有两个值得注意的细节前置校验内部通过vassert(/highlights/ in url, URL must contain /highlights/)断言 URL 中必须包含/highlights/路径段否则会抛出断言错误避免传入非高亮链接。解析逻辑使用urlparse(url).path切分路径再过滤出全部由数字组成的段取第一个作为 PK 返回。因此即使链接带查询参数或尾部斜杠也能正常工作。对应测试见 tests/live/test_highlight.py#L6-L7它直接以https://www.instagram.com/stories/highlights/17983407089364361/为输入验证解析结果。查询高亮单条详情与用户列表highlight_info获取单个高亮详情highlight_info(highlight_pk)返回一个完整的Highlight对象。文档给出的真实返回示例省略了长 URL 与多余元素 cl.highlight_info(17895485201104054).dict() { pk: 17895485201104054, id: highlight:17895485201104054, latest_reel_media: 1622366765, cover_media: { cropped_image_version: {width: 150, height: 150, url: https://instagram.frix7-1.fna.fbcdn.net/v/t51.2885-...}, crop_rect: [0, 0.21855760773966576, 1, 0.7814423922603342], media_id: 2584323966581791455_8641392340 }, user: { pk: 8641392340, username: bestskatetrick, full_name: The Best Skate Tricks, profile_pic_url: HttpUrl(https://instagram.frix7-1.fna.fbcdn.net/v/t51.2885-19/s150x150/6526...), profile_pic_url_hd: None, is_private: False, stories: [] }, title: Picnic 2021, created_at: datetime.datetime(2021, 5, 29, 19, 39, 15, tzinfodatetime.timezone.utc), is_pinned_highlight: False, media_count: 19, media_ids: [2584323966581791455, 2584328925731679183, 2584328595757338887, ...], # story ids items: [Story, Story, Story, ...] }返回结构由 instagrapi/types.py#L1074-L1085 的Highlight模型定义关键字段含义如下pk高亮唯一数字标识id形如highlight:17895485201104054latest_reel_media最近一次更新高亮内容的 Unix 时间戳cover_media封面信息字典包含裁剪后的图片 URL、crop_rect裁剪矩形4 个浮点数表示归一化坐标以及封面对应的 media_iduserUserShort类型的作者信息用户名、全名、头像、是否私密等title、created_at、is_pinned_highlight标题、创建时间UTC 时区、是否被钉在个人主页顶部media_count/media_ids故事数量与故事 ID 列表itemsList[Story]即高亮内的全部故事对象可直接用于后续下载或遍历。底层实现highlight_info()委托给highlight_info_v1()instagrapi/mixins/highlight.py#L89-L116它先构造highlight:{pk}形式的 ID再向私有接口feed/reels_media/发送 POST 请求请求体中携带supported_capabilities_new、sourceprofile、_uid、_uuid以及目标高亮 ID。若响应中不存在对应 key会抛出HighlightNotFound异常定义于 instagrapi/exceptions.py调用方应捕获该异常以处理“高亮已被删除或无权访问”的情况。结果随后经extract_highlight_v1()instagrapi/extractors.py#L711-L717) 清洗从id中以:分割提取pk、把user转为UserShort、把items逐个转为Story对象。user_highlights获取用户高亮列表user_highlights(user_id, amount0)返回List[Highlight]amount为 0 时返回全部大于 0 时最多返回前amount条 cl.user_highlights(29817608135) [Highlight(pk17907771728171896, idhighlight:17907771728171896, latest_reel_media1638039687, ...), ...]底层实现user_highlights()委托给user_highlights_v1()instagrapi/mixins/highlight.py#L40-L70它请求私有接口highlights/{user_id}/highlights_tray/并附带supported_capabilities_new、phone_id、随机化的battery_level/is_charging/is_dark_mode/will_sound_on等设备模拟参数。响应 JSON 中的tray数组即为高亮列表当amount 0时先做切片截取再逐条用extract_highlight_v1()转换成Highlight对象。从源码看amount的截取发生在转换之前且保持服务端返回顺序。回归测试 tests/regression/test_highlight.py#L26-L50 验证了三点amount生效时保留原始顺序并限制条数、tray为空或缺失时返回空列表、amount0时返回全部。创建高亮highlight_create(title, story_ids, cover_story_id, crop_rect[...])用于把已有的故事聚合为一个新高亮 cl.highlight_create(Test, [2722223419628084989_29817608135]) Highlight(pk17920472818962144, idhighlight:17920472818962144, latest_reel_media1638734336, ...)参数说明title高亮标题必填story_ids要收纳进高亮的故事 ID 列表必填。应传完整 media_id形如2722223419628084989_29817608135而非裸 PKcover_story_id用作封面的故事 ID可选留空时默认取story_ids中的第一个crop_rect封面裁剪矩形默认[0.0, 0.21830457, 1.0, 0.78094524]上下留出约 21.8% 的边距与官方 App 默认封面裁切比例一致。底层实现instagrapi/mixins/highlight.py#L134-L176有两点值得展开请求体中的creation_id使用当前 Unix 时间戳str(int(time.time()))生成作为本次创建操作的本地唯一标识story_ids和cover_story_id会先经self.media_id()instagrapi/mixins/media.py#L350-L373规范化若传入的是纯数字 PK会额外调用media_user()查询作者后拼接成{media_pk}_{user_pk}完整形式若已含_则原样使用。这也是文档提示“使用 story/media ID 而非裸 PK”的原因——传裸 PK 会引入一次额外的媒体信息请求。请求发往highlights/create_reel/成功后在响应reel字段上执行extract_highlight_v1()得到新的Highlight对象其中pk即为新高亮 ID后续所有变更操作都要用到。修改高亮标题、封面与故事增删文档给出的完整修改示例 cl.highlight_change_title(17907771728171896, Example title) Highlight(pk17907771728171896, idhighlight:17907771728171896, latest_reel_media1638039687, ...) cl.highlight_change_cover(17907771728171896, /tmp/test.jpg) # recommend 720x720 Highlight(pk17907771728171896, idhighlight:17907771728171896, ...) cl.highlight_add_stories(17907771728171896, [2722223419628084989]) Highlight(pk17907771728171896, idhighlight:17907771728171896, latest_reel_media1638734336, ...) cl.highlight_remove_stories(17907771728171896, [2722223419628084989]) Highlight(pk17907771728171896, idhighlight:17907771728171896, latest_reel_media1638039687, ...)注意文档中传给highlight_add_stories/highlight_remove_stories的元素是media_id带_userpk后缀与highlight_create的story_ids一致。统一底层highlight_edit四个变更方法最终都汇聚到highlight_edit()instagrapi/mixins/highlight.py#L178-L199它向私有接口highlights/highlight:{highlight_pk}/edit_reel/发送请求data { supported_capabilities_new: ..., source: self_profile, _uid: str(self.user_id), _uuid: self.uuid, added_media_ids: dumps(added_media_ids), removed_media_ids: dumps(removed_media_ids), } if title: data[title] title if cover: data[cover] dumps(cover)实现要点added_media_ids与removed_media_ids始终以 JSON 序列化形式发送即使为空数组title与cover仅在非空时才写入请求体——因此只改标题不会触碰封面反之亦然。返回时对响应reel再次执行extract_highlight_v1()。何时直接用highlight_edit当你需要在一次请求里同时完成改标题 换封面 增删故事例如从历史高亮迁移内容直接调用highlight_edit比串联多个封装方法更省请求、更不易触发限流。封面更换的特殊流程highlight_change_cover()instagrapi/mixins/highlight.py#L218-L235) 是唯一一个不完全等于highlight_edit封装的变更方法它分两步执行调用photo_rupload(Path(cover_path))先把本地图片上传到 Instagram拿到(upload_id, width, height)构造cover {upload_id: str(upload_id), crop_rect: [0.0,0.0,1.0,1.0]}再交给highlight_edit()应用。因此文档特别注明“highlight_change_cover()会先上传封面图片再通过highlight_edit()应用”。相关细节入参必须是pathlib.Pathphoto_rupload内部有isinstance断言支持格式为.jpg/.jpeg/.png/.webp见 instagrapi/mixins/photo.py#L178-L190上传时图片会经prepare_image(..., max_side1080)预处理封面最终按crop_rect[0.0,0.0,1.0,1.0]全幅裁切文档建议封面尺寸720×720与 Instagram 高亮封面展示比例一致能获得最佳显示效果。删除高亮 cl.highlight_delete(17920472818962144) Truehighlight_delete()instagrapi/mixins/highlight.py#L271-L286向highlights/highlight:{highlight_pk}/delete_reel/发送仅含_uid、_uuid的请求体并以响应中status ok作为成功判据返回布尔值。由于返回bool而非Highlight调用方可通过返回值直接判断删除是否成功。实战注意事项与最佳实践综合文档 Notes 与源码实现梳理出以下关键约定ID 形式story_ids、added_media_ids、removed_media_ids均使用带作者后缀的完整 media ID{media_pk}_{user_pk}如2722223419628084989_29817608135不要传裸 PK。传裸 PK 虽然highlight_create内部会自动补全但会多一次media_user请求而highlight_edit的added/removed_media_ids是原样序列化发送的裸 PK 可能无法被服务端识别。封面流程改封面会先触发一次图片上传再执行编辑请求属于两段式操作批量更换封面时注意控制频率避免触发上传限流。一次多改需要同时修改标题、封面、故事集合时优先使用highlight_edit合并为一次edit_reel/请求。异常处理查询不存在的或被删除的高亮会抛出HighlightNotFound见 instagrapi/exceptions.py应在调用highlight_info处捕获highlight_pk_from_url对不含/highlights/的 URL 会直接断言失败。删除判定highlight_delete返回的是布尔值而非对象务必检查返回值确认删除已生效。返回结构复用Highlight.items是Story对象列表拿到高亮后可直接复用 instagrapi 的 story 下载能力如story_download系列方法批量归档高亮内容cover_media.cropped_image_version.url可直接用于下载封面图。相关资源方法实现instagrapi/mixins/highlight.py数据模型instagrapi/types.py#L1074-L1085Highlight、UserShort、Story数据提取器instagrapi/extractors.py#L711-L717extract_highlight_v1依赖能力instagrapi/mixins/media.py#L350-L373media_id、instagrapi/mixins/photo.py#L150-L224photo_rupload在线验证测试tests/live/test_highlight.py离线回归测试tests/regression/test_highlight.py赞分享网页爬虫【免费下载链接】instagrapi The fastest and powerful Python library for Instagram Private API 2026 with HikerAPI SaaS项目地址https://gitcode.com/gh_mirrors/in/instagrapi点击查看免费下载相关推荐WeKan 用户管理 REST API 实战指南注册、创建、查询、禁用与删除WeKan 用户管理 REST API 实战指南注册、创建、查询、禁用与删除 本指南以 WeKan 官方 API 文档 docs/API/User.md h后端前端协同办公AWS SDK for C 操作 CloudTrail 实战创建、删除 Trail 与查询 API 事件AWS SDK for C 操作 CloudTrail 实战创建、删除 Trail 与查询 API 事件 本文基于 AWS 官方代码示例仓库 aws do示例工程教程后端ZincSearch Index API 测试全解析基于 /api/index 端点的创建、查询与删除实战指南ZincSearch Index API 测试全解析基于 /api/index 端点的创建、查询与删除实战指南 ZincSearch 是一个使用 Go 编写的搜索引擎后端全文检索上一篇C3.js 开源贡献指南从问题上报到构建、测试与发布的全流程实战下一篇Unlock Music终极音乐解锁工具3分钟破解加密音频文件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考