新旧两组视频分别连接到两张已保存的边界卡片。

快照是在某个采集时间保存的读数。观测记录是该读数的存储记录。本指南为已经采集 Instagram 公开指标的开发者提出一种导入方法。此方法保留历史记录,防止重复导入被误算为一次额外检查。

采集程序提供源数据行。导入流程必须实现下文所述的稳定键、存储规则和重启检查。本文未执行采集运行,也未进行导入测试。

明确每条已保存数据行的含义

一位读者在公开提问中表示,希望“每24小时分析一次帖子表现,生成类似 Instagram 新版关键绩效指标的曲线”。这段话说明了重复测量的需求,但没有说明重试方案。本文的安全导入方法是在此基础上提出的设计扩展。读者提问,观察于2026年8月12日;发布日期不可得,未核实是否使用过产品。

仅靠每日定时执行,无法形成可靠的历史记录。你还需要区分两种事件:

  • 新采集:程序再次检查帖子。保存一条新的观测记录。
  • 重复导入:应用读取已经保存过的数据行。保留现有观测记录。

这两种事件中的计数可能完全相同。两次检查都返回100次浏览,仍然是两条观测记录。将同一条采集结果读取两次,仍然只有一条观测记录。

区分次数和人数。公开浏览次数不等于去重后的人数。将 `views`、`plays` 和 `playsInstagram` 保留为独立字段。没有明确的报表规则时,不要将它们相加,也不要用一个字段替代另一个。

此方法针对公开计数。它无法获取账户的非公开 Insights 数据,也无法恢复你未保存的过去计数。仅账户所有者可见的记录需要另行使用已获授权的数据源。已核查的公开接口约定支持采集当前公开指标,不支持恢复历史计数。Instagram Metrics Scraper 接口约定,核查于2026年10月25日;仅检查公开构建版本,未付费运行。

如果你还需要在查找近期帖子和检查已保存的 URL 之间作出选择,请参阅 Instagram 重复采集指南。先作出选择,再设计导入流程。

保留观测表和导入回执

使用两种用途不同的记录。观测表保存采集到的读数。导入回执记录应用如何处理一次源运行。

一次运行是指采集程序执行一次。数据集是该程序返回并存储的数据行列表。保留运行和数据集的标识符,以便追溯已保存观测记录的来源。

以下名称是建议使用的存储字段。`run_id` 和 `item_position` 等字段属于工作流程元数据,即有关采集和导入的信息。它们不是新增的 Actor 输出字段。Actor 是托管运行的采集程序。

保留观测表和导入回执
存储字段保留内容用途
`observation_key`源数据行的唯一键防止重复插入
`run_id`已完成的源运行 ID,以文本存储标识采集运行
`dataset_id`源数据集 ID,以文本存储标识源列表
`item_position`原始绝对行位置标识更改前的数据行
`postId`原始帖子 ID,以文本存储匹配不同运行中的相同内容
`postUrl`原始内容 URL保留内容引用
`scrapedAt`原始采集时间确定读数在历史记录中的时间位置
计数字段分别保留每个返回的计数字段保留指标含义
状态字段原始指标状态和数据行状态说明数值缺失或不可用的原因
`original_json`完整的原始数据行保留来源证据
`imported_at`应用保存数据行的时间单独跟踪导入工作

JSON 是一种用于结构化数据的文本格式。在重命名字段、删除字段或将一条源数据行展开为多条记录之前,先保存原始 JSON。

如果返回了 `postMetricStatus`、`status` 和 `statusReason`,请保留这些字段。在原始 JSON 中保留其他返回的状态字段。不要编造状态值,也不要假设存在文档未说明的状态结构。已核查的输出约定包含内容标识、计数、采集时间和状态字段。公开默认构建版本,核查于2026年10月25日;仅依据文档所列字段,未进行运行测试。

每次尝试导入时,都应保存一份回执,记录以下信息:

  • 运行 ID、数据集 ID 和源运行的完成状态。
  • 固定的导出设置和本次导入的源数据行范围。
  • 已接受、重复和已拒绝的数据行。
  • 最后一个已完成持久化处理的源位置。
  • 导入开始时间、结束时间和完成状态。
  • 拒绝数据行的原因。

“已接受”表示已保存一条新的观测记录。“重复”表示同一条源观测记录已经保存。“已拒绝”表示根据你制定的规则,该数据行需要修正或复核。

分别保留每次导入尝试的计数。将多次重试的回执计数相加,得不到去重后的观测记录数。

加载数据行前,先选择观测键

键是用于标识一条记录的值。观测键必须标识源数据行,而不只是 Instagram 帖子。

仅使用 `postId` 会将该帖子的所有后续检查合并。使用导入时间,则会在每次重试时创建一条新的观测记录。帖子说明文字或帖子在创作者主页列表中的位置,也无法标识一条采集到的观测记录。

对于稳定且已完成的数据集,使用运行 ID 和数据项在原始数据集中的位置。将数据集 ID 与该键一并保留。一项实用的存储规则是:让运行 ID、数据集 ID 和数据项位置的组合保持唯一。

唯一性规则可以防止表接受两条具有相同组合的记录。在存储层实施此规则,不要只依赖应用代码在插入前进行检查。

请按以下步骤操作:

  1. 如果报表规则要求使用稳定且已完成的数据,选择一次已完成的源运行。
  2. 保存其运行 ID 和数据集 ID。
  3. 固定原始数据的导出设置,并按源位置升序排列。
  4. 记录计划导入的源数据范围。
  5. 在排序、筛选或展开数据行之前,为其分配原始绝对位置。
  6. 每次重试时,都保持这些位置不变。

绝对位置是指数据行在完整源列表中的位置。如果一页包含位置0至99,下一页就从100开始,不能重新从0开始。请说明位置编号从0还是1开始。

Apify 文档说明,数据集存储采用仅追加方式:可以添加数据项,但不能修改或删除现有数据项。这有助于保留源数据行。但仅凭这一点,不能保证经筛选或重新排序的导出结果能提供可靠的导入标识。Apify 数据集文档,核查于2026年10月25日;说明仅追加存储和数据读取方式,不构成导入保证。

如果无法保留稳定的源位置,可以对原始数据行的一种固定表示形式计算哈希值,并记录所用方法。哈希值是根据内容计算出的标识符。每次重试时,都使用相同的字段、文本表示形式和计算方法。同时保留运行和数据集的引用信息。

使用这种替代方法时需要谨慎。相同的数据行即使位于不同的源位置,也可能产生相同的哈希值。采用此方法前,先明确这些行代表一条还是两条观测记录。如果必须保留每一条返回的数据行,应优先使用稳定的源位置。

如果现有键对应的原始内容与本次不同,请停止并复核冲突。不要在不作提示的情况下覆盖已保存的观测记录,也不要将其视为正常重复。

将数据行和进度作为一个操作保存

重启的主要风险发生在保存数据行和保存进度之间。应用可能在其中一项成功后、另一项完成前停止。

事务将相关更改作为一个操作保存。如果存储工具支持事务,请将已接受的观测记录及对应的进度位置一并提交。相关回执的更改也应与该次提交保持一致。

请按以下顺序导入:

  1. 读取下一批源数据行及其原始位置。
  2. 根据接受规则检查每一行。
  3. 为每行构建观测键。
  4. 如果键不存在,插入一条新的观测记录。
  5. 如果已有匹配的观测记录,将其计为重复。
  6. 记录已拒绝的数据行及原因。
  7. 只有在数据行和拒绝记录都已持久化后,才保存进度。

持久化是指存储系统已保存更改,导入进程停止后,这些更改仍然保留。

对于其他方面均有效的源数据行,不应仅因某个计数缺失就将其拒绝。该行仍可记录一次采集尝试和其他可用计数。请保留缺失值及其状态。

保留足够的来源信息,以便复核已拒绝的数据行。进度位置越过某条已拒绝的数据行后,不能让该行被遗漏。推进进度前,先保存其拒绝记录,或停在该位置,直到问题解决。

如果存储工具无法将数据行和进度一并提交,请先保存数据行,再推进进度。停止后,使用相同的唯一键重新处理进度不确定的范围。这可能产生重复行,但不得新增多余的观测记录。

重新处理时,不要创建新的 `scrapedAt`。不同尝试之间,`imported_at` 可以变化,采集时间不能变化。

逐步演示一次导入和重启

以下示例为原创虚构示例。它不是 Actor 输出、客户结果或测试结果。所有时间均指同一个虚构日期,采用 UTC,即协调世界时,这是一种通用时间标准。

运行 A 包含两行数据。本例中的源位置从0开始。

逐步演示一次导入和重启
运行原始位置帖子采集时间浏览次数
A0P110:00 UTC100
A1P210:01 UTC缺失
B0P111:00 UTC120

首先,导入运行 A。表中将 P1 和 P2 保存为两条观测记录。P2 没有可用的浏览次数。它仍是一条已保存的观测记录,只是浏览次数缺失。

现在,重新导入运行 A。两个源数据行的键都已存在。此次导入不新增观测记录,并报告两行重复。

接着,导入运行 B。其中 P1 所在行的运行标识不同。即使表中已有 P1,也应将其保存为一条新的观测记录。

逐步演示一次导入和重启
导入尝试新增观测记录数重复行数已保存观测记录总数
首次导入 A202
重新导入 A022
首次导入 B103

计算如下:

  • 首次导入:0条观测记录 + 2条新增观测记录 = 2条观测记录。
  • 重新导入:2条观测记录 + 0条新增观测记录 = 2条观测记录。
  • 新运行:2条观测记录 + 1条新增观测记录 = 3条观测记录。

两次运行共产生三条观测记录。三次导入尝试共处理数据行五次,但这不代表有五条观测记录。P2 的浏览次数仍然缺失,不会变为零。

现在,考虑同一原创虚构示例中的另一种重启情形。首次导入 A 时,程序在保存 P1 后停止,尚未保存 P2。

如果已保存的进度可靠,从 P2 重新开始。这次重启新增一条观测记录。最终,表中有两条来自 A 的观测记录。

如果进度不确定,从头重新导入 A。P1 计为一行重复,P2 则新增一条观测记录。最终,表中仍有两条来自 A 的观测记录。

导入 B 后,两种重启方式都会得到相同的三条已保存观测记录。重试检查应验证这一结果。

保留历史记录,单独显示最新读数

视图是根据已保存记录组合而成的结果。请建立最新读数视图,不要替换旧的观测记录。

根据 `scrapedAt` 对有效的观测时间排序,不要根据导入时间排序。今天导入昨天已完成的运行,不能让昨天的计数看起来比今天采集的读数更新。

为每个帖子分别显示以下两项信息:

  • 最新保存的采集尝试。
  • 每个所需计数字段的最新可用读数,以及该读数的原始时间。

较新的数据行可能缺少浏览次数,而较旧的数据行有可用的浏览次数。可以保留旧值供参考,但必须显示其较早的时间,同时显示较新记录中的缺失结果。不要将旧值显示为新的测量结果。

不同计数字段的“最新可用”记录可能不同。具有可用点赞次数的最新行,可能不是具有可用浏览次数的最新行。请分别保留它们的时间。

发布前,请记录以下排序情况的处理规则:

  • 采集时间相同:保留两条源观测记录。显示时间相同的情况,或采用已说明的显示规则。显示规则不能证明哪一个读数产生得更晚。
  • 采集时间缺失:保留源数据行,但在复核前,不将其纳入按时间排序的结果。
  • 采集时间无效:记录问题。没有明确标注时,不要用导入时间替代。
  • 没有返回数据行:单独记录采集缺口。不要编造观测记录,也不要填入零计数。

后续计算请参阅 Instagram 月度报表指南。此导入方法能保留观测记录,但不能补出缺失的月度边界读数。指标历史记录指南也解释了检查存在间隔缺口时,实际观测时间为何重要。

先使用小规模采集输入,再检查导入

Chronometrica 的 Instagram Metrics Scraper 文档说明了直接内容输入方式,以及本存储方案所需的字段。文档表明适用,并不意味着该工具会为你建立历史记录表,或强制执行导入键规则。

Task 是为 Actor 保存的输入预设。公开的 Instagram Post Metrics Tracker Task 可作为起点。所提供的页面检查仅确认该预设公开存在,未在登录认证后核实已保存的设置,也未运行该预设。Instagram Post Metrics Tracker,核查于2026年10月25日;仅确认公开页面存在,未在登录认证后检查输入,也未付费运行。

使用以下提供的小规模输入:

json
{"maxItems":1,"mode":"contentUrls","startUrls":["https://www.instagram.com/reel/DIwcCZgxVZP/"]}
先使用小规模采集输入,再检查导入

`mode` 用于选择 Actor 处理输入的方式。`contentUrls` 用于选择直接检查内容。`startUrls` 包含目标内容的 URL。`maxItems` 限制返回的指标数据行数。

将示例 URL 替换为一个已知的公开帖子或 Reel 的 URL。Reel 是 Instagram 的一种视频格式。请替换示例列表,不要将自己的 URL 添加到示例 URL 旁边。使用前,检查已保存的设置。

此输入已通过静态结构校验。该校验依据所提供的公开结构定义,确认输入格式是否符合要求。它不确认当前内容是否可用,也不确认采集能否成功。公开输入结构定义,核查于2026年10月25日;仅进行静态校验,未付费运行。

以下是建议读者执行的检查:

  1. 采集一个目标公开内容项,并保留已完成运行及其数据集的引用信息。
  2. 导入其数据行,记录已接受、重复和已拒绝的数量。
  3. 再次导入同一来源。确认新增观测记录为零。
  4. 中途停止一次导入,然后重新开始。确认最终的源数据行键与完整导入的结果一致。
  5. 为同一内容项执行一次新的采集运行。确认它会创建一条新的观测记录。
  6. 确认所有已保存的 `scrapedAt` 值均与源数据行一致。
  7. 确认缺失的计数仍然缺失,且较早的可用计数仍保留其原始时间。

运行完成,不代表每个请求的内容项都有可用计数。请对照目标内容列表与返回的数据行,单独记录缺口。

来源和延伸阅读

作者 Chronometrica · 更新日期

返回顶部 ↑