mcpField
P
pp-apify

pp-apify

github.com/mvanhorn数据与数据库2.1k77 次安装今天更新
代码仓库

关于 pp-apify

pp-apify 是面向平台运营者的 Printing Press CLI 技能,用于协调 Apify Actor,构建定期研究、抓取和简报流程。它提供本地新内容跟踪、跨数据集搜索、成本控制和声明式调度。

主要功能

  1. 01运行 Actor 并仅输出未见条目
  2. 02跨 Actor 搜索缓存数据集
  3. 03查看并限制运行成本
  4. 04生成摘要并串联工作流
  5. 05以代码管理计划任务
  6. 06保存并重放 Actor 输入预设

适用场景

  1. 01查找定期抓取中的新增结果
  2. 02比较 Actor 成本与结果重合度
  3. 03从多个 Actor 生成简报
  4. 04对 Apify 计划任务进行版本管理

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mvanhorn/printing-press-library --skill pp-apify

安装后在 Claude Code 中输入/pp-apify确认已加载。

详细介绍

Apify — Printing Press CLI

前提条件:安装 CLI

此技能使用 apify-pp-cli 二进制文件。**调用此技能中的任何命令之前,必须确认 CLI 已安装。**如果尚未安装,请先安装:

  1. 使用 Printing Press 安装程序安装。在 macOS/Linux 上,二进制文件默认安装到 $HOME/.local/bin;在 Windows 上,默认安装到 %LOCALAPPDATA%\Programs\PrintingPress\bin:
    npx -y @mvanhorn/printing-press-library install apify --cli-only
    
  2. 验证:apify-pp-cli --version
  3. 确保报告的安装目录位于调用此技能的 Agent/运行时的 $PATH 中。

如果 npx 安装失败(没有 Node、处于离线状态等),请改用 Go 直接安装(需要 Go 1.26.6 或更高版本):

go install github.com/mvanhorn/printing-press-library/library/developer-tools/apify/cmd/apify-pp-cli@latest

如果安装后 --version 报告“command not found”,则运行时无法在 $PATH 中找到二进制文件目录。验证成功之前,请勿继续执行技能命令。

何时使用此 CLI

当你需要将多个 Apify Actor 编排为定期运行的研究、抓取或新闻简报工作流时,请使用 apify-pp-cli。如果你需要查看每次运行的成本、仅输出新内容、跨 Actor 搜索或将计划作为代码管理,它就是合适的工具。开发 Actor(编写自己的抓取器)时,请使用官方的 apify-cli;此 CLI 面向平台运营人员。

独特功能

这些功能是此 API 的其他任何工具都不具备的。

可累积的本地状态
  • run — 运行 Actor,只输出该 Actor 之前运行时未出现过的条目。

    当你需要在新闻简报或提醒工作流中定期抓取,并了解“自上次运行以来有哪些新内容”时,请使用此功能。

    apify-pp run trudax/reddit-scraper --input @sub-list.json --only-new --format markdown
    
  • search items — 对每个 Actor 的所有缓存数据集进行全文搜索,并将结果规范化为通用架构。

    如果你想知道“本周大家都说了哪些关于 X 的内容”,而不想费心处理 8 个数据集 ID,请使用此功能。

    apify-pp search "model context protocol" --since 7d --actors twitter,reddit,hn --json --select url,title,source_actor
    
  • digest --offline — 使用本地 SQLite 副本中的历史数据集运行查询并渲染模板,无需调用 API。

    调整模板或去重启发式规则时,请使用此功能,让迭代无需成本。

    apify-pp digest --offline --topic AI --since 7d --template draft.tmpl
    
成本管控
  • cost report — 结合缓存的运行元数据和 Apify 月度用量接口,生成按次运行划分的美元成本报告。

    当用户询问“为什么我的 Apify 账单这么高”或“哪个 Actor 的单条有效内容成本最高”时,请使用此功能。

    apify-pp cost report --since 30d --group-by actor,schedule --json
    
  • run --max-cost — 根据同一 Actor 过去运行的本地 p50/p90 进行预运行成本预测;如果预测成本超出预算,则中止运行。

    对任何长尾或不可信的 Actor 使用此功能,以便在成本超支时默认中止,而不是等到账单出来后才发现。

    apify-pp-cli run xquik/x-tweet-scraper --input @xquik-tweets.json --max-cost 0.50 --wait
    
  • ab run — 将同一输入分别交给两个竞争 Actor 运行,通过统一架构规范化结果,并报告每条新增内容的成本和重叠百分比。

    用户在安排定期任务之前,想知道“更便宜的 Actor 是否够用”时,请使用此功能。

    apify-pp ab run apidojo/tweet-scraper kaitoeasyapi/twitter-x-data-tweet-scraper-pay-per-result-cheapest --input shared.json --judge novelty --json
    
新闻简报工作流
  • digest — 从本地存储生成 Markdown 简报:按 URL 和标题相似度去重,按互动度、时效性和新颖度排序,并填充 Go 模板。

    将此功能作为任何新闻简报或每周报告工作流的最后一步;输出内容可直接粘贴到 Beehiiv,或通过管道交给写作 Agent。

    apify-pp digest --topic "AI dev tools" --since 24h --template weekly.tmpl
    
  • workflow run — 运行由 YAML 声明的工作流,在多个 Actor 之间依次执行 run → normalize → novelty → digest → publish。

    当用户希望拥有一条定期运行的“执行一条命令,即可生成新闻简报”工作流,而不想手动编排 Actor 调用时,请使用此功能。

    apify-pp workflow run ./weekly-newsletter.yaml --json
    
GitOps
  • schedules apply — 声明式的 cron 与 Actor 输入配置包,可通过类似 Terraform 的 plan/apply/diff,与实时 Apify 计划 API 交互。

    当用户管理 3 个或更多计划,并希望将其纳入版本控制时,请使用此功能。

    apify-pp schedule apply ./schedules.yaml --dry-run && apify-pp schedule diff
    
可重复性
  • preset save — 从之前的运行中保存经过验证的 Actor 输入 JSON,并支持通过覆盖参数重放。

    使用此功能,无需每次重新运行定期抓取时都手动重建输入 JSON。

    apify-pp preset save twitter weekly-ai --from-run abc123 && apify-pp call twitter --preset weekly-ai --override [email protected]
    

命令参考

actor-builds — 本节所述的 API 端点可用于管理和删除 Apify Actor 构建。

请注意,如果任何返回的构建对象包含以美元计价的用量,那么计算该美元等值时使用的是查询时适用的单位价格,因此仅供参考。

你可以在文档中进一步了解平台用量。

  • apify-pp-cli actor-builds delete — 删除构建。不能删除当前设为 Actor 默认构建的构建。仅限拥有构建...
  • apify-pp-cli actor-builds get — 获取用户的所有构建列表。响应是一个 JSON 对象数组,其中每个对象都包含基本...
  • apify-pp-cli actor-builds get-actorbuilds — 获取包含 Actor 特定构建全部详情的对象。传入可选的...

actor-runs — 本节所述的 API 端点可用于管理和删除 Apify Actor 运行。

如果任何返回的运行对象包含以美元计价的用量,那么计算该美元等值时使用的是查询时适用的单位价格,因此仅供参考。

对于已完成的运行,stats 等汇总字段或美元用量总额最终一致,会在几秒内更新。若需要与最终总额一致的数值,请在运行完成后等待约 10 秒,然后重新获取该运行。

你可以在文档中进一步了解平台用量。

  • apify-pp-cli actor-runs delete — 删除运行。仅可删除已结束的运行。只有发起运行的个人或组织才能删除该运行。
  • apify-pp-cli actor-runs get — 获取用户的所有运行列表。响应是一个对象列表,其中每个对象都包含基本信息...
  • apify-pp-cli actor-runs get-actorruns — 这不是单个端点,而是一组完整的端点,可用于获取运行或其任何默认...
  • apify-pp-cli actor-runs put — 此端点可用于更新运行的状态消息,并配置其常规资源访问权限...

actor-tasks — 本节所述的 API 端点可用于创建、管理、删除和运行 Apify Actor 任务。 如需了解更多信息,请参阅 Actor tasts 文档。

:::note

对于所有接受 actorTaskId 参数以指定任务的 API 端点,你可以传入任务 ID(例如 HG7ML7M8z78YcAPEB),也可以传入以波浪号分隔的任务所有者用户名和任务名称(例如 janedoe~my-task)。

:::

部分 API 端点会返回运行对象。如果此类运行对象包含以美元计价的用量,那么计算该美元等值时使用的是查询时适用的单位价格,因此仅供参考。

你可以在文档中进一步了解平台用量。

  • apify-pp-cli actor-tasks delete — 删除由 actorTaskId 参数指定的任务。
  • apify-pp-cli actor-tasks get — 获取用户创建或使用过的任务完整列表。响应是一个对象列表,其中每个对象...
  • apify-pp-cli actor-tasks get-actortasks — 获取包含任务全部详情的对象。
  • apify-pp-cli actor-tasks post — 使用 POST 负载中以 JSON 传入的对象所指定的设置创建新任务。响应是完整的...
  • apify-pp-cli actor-tasks put — 使用 POST 负载中以 JSON 传入的对象所指定的值更新任务设置。如果该对象...

acts — 管理 acts

  • apify-pp-cli acts delete — 删除 Actor。
  • apify-pp-cli acts get — 获取用户创建或使用过的所有 Actor 的列表。响应是一个对象列表,其中每个对象……
  • apify-pp-cli acts get-actorid — 获取包含特定 Actor 全部详情的对象。
  • apify-pp-cli acts post — 根据 POST 请求负载中以 JSON 传递的 Actor 对象指定的设置,创建新的 Actor。响应是……
  • apify-pp-cli acts put — 根据 POST 请求负载中以 JSON 传递的 Actor 对象指定的值,更新 Actor 的设置。如果……

browser-info — 管理浏览器信息

  • apify-pp-cli browser-info tools-delete — 返回有关 HTTP 请求的信息,包括客户端 IP 地址、国家/地区代码、请求标头和正文……
  • apify-pp-cli browser-info tools-get — 返回有关 HTTP 请求的信息,包括客户端 IP 地址、国家/地区代码、请求标头和正文……
  • apify-pp-cli browser-info tools-post — 返回有关 HTTP 请求的信息,包括客户端 IP 地址、国家/地区代码、请求标头和正文……
  • apify-pp-cli browser-info tools-put — 返回有关 HTTP 请求的信息,包括客户端 IP 地址、国家/地区代码、请求标头和正文……

datasets — 管理数据集

  • apify-pp-cli datasets delete — 删除指定的数据集。
  • apify-pp-cli datasets get — 列出用户的所有数据集。响应是一个 JSON 对象数组,其中每个对象都包含基本……
  • apify-pp-cli datasets get-datasetid — 返回指定数据集 ID 对应的数据集对象。此操作不会返回数据集条目,只返回有关存储的信息……
  • apify-pp-cli datasets post — 创建数据集并返回其对象。请注意,存储在未命名数据集下的数据遵循 [data……
  • apify-pp-cli datasets put — 根据请求正文中以 JSON 传递的对象所指定的值,更新数据集名称和常规资源访问级别……

key-value-stores — 管理键值存储

  • apify-pp-cli key-value-stores delete — 删除键值存储。
  • apify-pp-cli key-value-stores get — 获取用户拥有的键值存储列表。响应是一个对象列表,其中每个对象都包含……
  • apify-pp-cli key-value-stores get-keyvaluestores — 获取包含特定键值存储全部详情的对象。
  • apify-pp-cli key-value-stores post — 创建键值存储并返回其对象。响应与 [Get…… 返回的对象相同
  • apify-pp-cli key-value-stores put — 根据请求正文中以 JSON 传递的对象所指定的值,更新键值存储的名称和常规资源访问级别……

logs — 本节介绍的 API 端点用于下载由 Actor 构建和运行生成的日志。请注意,系统只会存储日志末尾的 5M 个字符,其余部分将被丢弃。

:::note

请注意,这些端点不需要身份验证令牌;调用通过难以猜测的 Actor 构建或运行 ID 进行身份验证。

:::

  • apify-pp-cli logs <buildOrRunId> — 获取特定 Actor 构建或运行的日志。

request-queues — 管理请求队列

  • apify-pp-cli request-queues delete — 删除指定的队列。
  • apify-pp-cli request-queues get — 列出用户的所有请求队列。响应是一个 JSON 对象数组,其中每个对象都包含基本……
  • apify-pp-cli request-queues get-requestqueues — 返回指定队列 ID 对应的队列对象。
  • apify-pp-cli request-queues post — 创建请求队列并返回其对象。请注意,存储在未命名队列下的请求遵循 [data……
  • apify-pp-cli request-queues put — 根据请求正文中以 JSON 传递的对象所指定的值,更新请求队列的名称和常规资源访问级别……

schedules — 本节介绍用于管理计划的 API 端点。 计划用于在特定时间自动启动 Actor。每个计划可以关联多个 Actor 和 Actor 任务。也可以覆盖每个 Actor(任务)的设置,方式与通过 API 调用 Actor(任务)时类似。 更多信息请参阅计划文档。

每个计划都会分配要执行的操作。操作分为两种类型:

  • RUN_ACTOR 和 RUN_ACTOR_TASK。

详情请参阅获取计划端点的文档。

  • apify-pp-cli schedules delete — 删除计划。
  • apify-pp-cli schedules get — 获取用户创建的计划列表。该端点支持使用 limit 和 offset 进行分页……
  • apify-pp-cli schedules get-scheduleid — 获取包含所有详细信息的计划对象。
  • apify-pp-cli schedules post — 使用请求负载中以 JSON 格式传入的计划对象所提供的设置创建新计划。响应为……
  • apify-pp-cli schedules put — 使用 POST 请求负载中以 JSON 格式传入的计划对象指定的值更新计划。如果对象……

store — Apify Store 汇集了数千个面向 Apify 社区的公开 Actor。 本节介绍的 API 端点用于检索这些 Actor。

:::note

这些端点无需身份验证令牌。

:::

  • apify-pp-cli store — 获取 Apify Store 中的公开 Actor 列表。你可以使用 search 参数按标题中的字符串搜索 Actor……

tools — 本节介绍的 API 端点提供实用工具,用于编码、签名和验证数据,以及检查 HTTP 请求详情。

  • apify-pp-cli tools decode-and-verify-post — 解码并验证之前通过 encode-and-sign 端点创建的编码值。返回原始……
  • apify-pp-cli tools encode-and-sign-post — 对任意 JSON 对象进行编码并签名。编码后的值包含与经过身份验证的用户 ID 关联的签名,该签名……

users — 本节介绍的 API 端点用于返回用户帐户信息。

  • apify-pp-cli users get — 返回特定用户帐户的公开信息,类似于公开个人资料页面上显示的信息(例如……
  • apify-pp-cli users me-get — 返回当前用户帐户的信息,包括公开和私密信息。用户帐户……
  • apify-pp-cli users me-limits-get — 返回帐户限制的完整摘要。与你在帐户的……中看到的信息相同
  • apify-pp-cli users me-limits-put — 更新可在帐户的限制页面管理的帐户限制……
  • apify-pp-cli users me-usage-monthly-get — 返回当前月度用量周期的完整用量摘要、总用量以及每日……

webhook-dispatches — 管理 Webhook 分发

  • apify-pp-cli webhook-dispatches get — 获取用户拥有的 Webhook 分发列表。该端点支持使用 limit 和……进行分页
  • apify-pp-cli webhook-dispatches webhook-dispatch-get — 获取包含所有详细信息的 Webhook 分发对象。

webhooks — 用于配置自动通知的 Webhook 相关 API 端点。

  • apify-pp-cli webhooks delete — 删除 Webhook。
  • apify-pp-cli webhooks get — 获取用户创建的 Webhook 列表。该端点支持使用 limit 和 offset 进行分页……
  • apify-pp-cli webhooks get-webhookid — 获取包含所有详细信息的 Webhook 对象。
  • apify-pp-cli webhooks post — 使用请求负载中以 JSON 格式传入的 Webhook 对象所提供的设置创建新的 Webhook。响应为……
  • apify-pp-cli webhooks put — 使用 POST 请求负载中以 JSON 格式传入的 Webhook 对象指定的值更新 Webhook。如果对象……
查找合适的命令

当你知道要做什么,却不知道该用哪个命令时,直接向 CLI 提问:

apify-pp-cli which "<capability in your own words>"

which 会根据自然语言能力查询,从此 CLI 精选的功能索引中找出最匹配的命令。退出代码 0 表示至少有一项匹配;退出代码 2 表示没有可信的匹配项——此时可改用 --help,或缩小查询范围。

示例

每周新闻简报抓取
apify-pp workflow run ./weekly-newsletter.yaml --agent

通过一条由 YAML 声明的链式流程,抓取 Twitter、Reddit、HN 和 News,并生成一份可直接用于新闻简报的摘要。

Xquik 推文调研

使用 Xquik 的 X Tweet Scraper 搜索推文、查看时间线、串文、回复、引用和互动数据。

创建 xquik-tweets.json:

{
  "searchTerms": ["from:OpenAI API", "#AI lang:en"],
  "maxItems": 100,
  "maxItemsPerTarget": 50,
  "outputVariant": "rich"
}
apify-pp-cli run xquik/x-tweet-scraper --input @xquik-tweets.json --max-cost 0.50 --wait --agent

maxItems 用于限制单次运行的条目数。maxItemsPerTarget 用于平衡指定目标的数量。

Xquik 受众调研

使用 Xquik 的 X Follower Scraper 抓取关注者、正在关注的账号、已认证关注者、列表和社群。

创建 xquik-followers.json:

{
  "twitterHandles": ["OpenAI", "AnthropicAI"],
  "relations": ["followers", "verified_followers"],
  "maxItems": 100,
  "maxItemsPerTarget": 50,
  "outputMode": "compact",
  "includeTargetMetadata": true,
  "dedupeMode": "merge"
}
apify-pp-cli run xquik/x-follower-scraper --input @xquik-followers.json --max-cost 0.50 --wait --agent

在多目标运行时保留目标元数据。使用合并去重来处理受众重叠。 maxItemsPerTarget 可用于平衡各目标的结果数量。

付费运行前,请检查各 Actor 当前的 Store 架构和定价。 CLI 会根据本地历史记录生成投影。--wait 会添加实时监控。

Xquik 是独立的第三方服务,与 X Corp. 无关联。“Twitter”和“X”是 X Corp. 的商标。

跨 Actor 主题搜索(精简)
apify-pp search 'agent' --since 30d --agent --select url,title,source_actor,published_at

对本地存储使用 FTS5;使用带点号路径的 --select,避免拉取完整的规范化条目负载。

计划漂移检查
apify-pp schedule diff --agent

对本地 YAML 与实时 Apify 计划进行 Terraform 风格的差异比较;输出为 JSON 变更集。

对两个 Twitter 抓取器进行 A/B 测试
apify-pp ab run apidojo/tweet-scraper kaitoeasyapi/twitter-x-data-tweet-scraper --input shared.json --judge cost-per-novel --agent

同时运行两者,通过统一架构规范化数据,并报告每个新增条目的成本和重叠百分比。

身份验证设置

设置 APIFY_TOKEN(从 Apify Console → Settings → Integrations 获取),或运行 apify-pp auth set-token。CLI 会在进行任何调用前,通过 /v2/users/me 验证令牌。支持查询参数形式的 ?token=,但不建议使用。

运行 apify-pp-cli doctor 验证设置。

Agent 模式

为任意命令添加 --agent。它会展开为:--json --compact --no-input --no-color --yes。

  • 支持管道传输 — JSON 输出到 stdout,错误输出到 stderr

  • 支持筛选 — --select 可保留字段子集。带点号的路径可深入嵌套结构;数组会逐个遍历元素。对于输出冗长的 API,此功能对于控制上下文大小至关重要:

    apify-pp-cli actor-builds get --agent --select id,name,status
    
  • 支持预览 — --dry-run 会显示请求,但不会发送

  • 支持离线使用 — 有本地 SQLite 存储时,sync/search 命令可以使用该存储

  • 非交互式 — 不会提示输入,每项输入都通过标志指定

  • 明确的重试行为 — 只有当已存在的对象应视为创建成功时才使用 --idempotent;只有当缺失的删除目标应视为删除成功时才使用 --ignore-missing

响应封装

从本地存储或 API 读取数据的命令,会将输出封装在一个来源信息对象中:

{
  "meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
  "results": <data>
}

解析 .results 获取数据,并查看 .meta.source 判断数据来自实时来源还是本地存储。只有当 stdout 指向终端,且未设置机器格式标志(--json、--csv、--compact、--quiet、--plain、--select)时,才会将易读的 N results (live) 摘要打印到 stderr——管道或 Agent 消费者以及显式指定格式的运行会在 stdout 输出纯 JSON。

Agent 反馈

当你(或 Agent)发现此 CLI 有不妥之处时,请记录下来:

apify-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
apify-pp-cli feedback --stdin < notes.txt
apify-pp-cli feedback list --json --limit 10

条目会保存在本地的 ~/.apify-pp-cli/feedback.jsonl 中。除非设置了 APIFY_FEEDBACK_ENDPOINT,且传入了 --send 或设置了 APIFY_FEEDBACK_AUTO_SEND=true,否则不会通过 POST 发送。默认行为仅保存在本地。

写下让你感到意外的地方,而不是提交错误报告。简短、具体、一行即可:这才是会不断积累价值的部分。

输出交付

每个命令都接受 --deliver <sink>。输出会发送到指定的目标,同时输出到 stdout 或替代 stdout,这样 Agent 就能路由命令结果,无需手动通过管道传递。支持三种目标:

目标效果
stdout默认;仅写入 stdout
file:<path>将输出以原子方式写入 <path>(临时文件 + 重命名)
webhook:<url>将输出正文 POST 到该 URL(使用 application/json,或在设置 --compact 时使用 application/x-ndjson)

对于未知方案,系统会拒绝请求,并返回包含受支持方案列表的结构化错误。Webhook 请求失败时会返回非零状态码,并在 stderr 中记录 URL 和 HTTP 状态码。

命名配置文件

配置文件是一组已保存的标志值,可在多次调用中重复使用。当定时运行的 Agent 每次都以相同配置调用同一命令时,可使用它——这就是 HeyGen 的 “Beacon” 模式。

apify-pp-cli profile save briefing --json
apify-pp-cli --profile briefing actor-builds get
apify-pp-cli profile list --json
apify-pp-cli profile show briefing
apify-pp-cli profile delete briefing --yes

显式标志始终优先于配置文件值;配置文件值优先于默认值。agent-context 会在 available_profiles 下列出所有可用配置文件,方便进行自省的 Agent 在运行时发现它们。

退出代码

代码含义
0成功
2用法错误(参数错误)
3未找到资源
4需要身份验证
5API 错误(上游问题)
7请求过于频繁(等待后重试)
10配置错误

参数解析

解析 $ARGUMENTS:

  1. 为空、help 或 --help → 显示 apify-pp-cli --help 输出
  2. 以 install 开头 → 以 mcp 结尾 → 安装 MCP;否则 → 参见上文“先决条件”
  3. 其他任何内容 → 直接使用(作为 CLI 命令执行,并带上 --agent)

MCP 服务安装

从此 CLI 发布的 public-library 条目或预构建发行版中安装 MCP 二进制文件,然后进行注册:

claude mcp add apify-pp-mcp -- apify-pp-mcp

验证:claude mcp list

直接使用

  1. 检查是否已安装:which apify-pp-cli 如果未找到,提示安装(参见本技能顶部的“先决条件”)。
  2. 将用户查询与上文“独特功能”和“命令参考”中的最佳命令匹配。
  3. 使用 --agent 标志执行:
    apify-pp-cli <command> [subcommand] [args] --agent
    
  4. 如果存在歧义,查看子命令帮助:apify-pp-cli <command> --help。

评论

支持 Markdown