mcpField
A
ads-update

ads-update

github.com/hainrixz营销与增长10161 次安装1 天前更新
代码仓库

关于 ads-update

ads-update 是用于更新广告平台参考文件的技能,汇总过去 30 天的平台变更。它从官方更新日志、Reddit、Hacker News 和网络搜索收集信息,并更新摘要与审计附录。

主要功能

  1. 01收集近期平台变更
  2. 02抓取官方更新日志及网络来源
  3. 03支持 Meta、Google、TikTok 或全部
  4. 04生成 30 天变更摘要
  5. 05向平台审计文件附加重点

适用场景

  1. 01查看广告平台近期变更
  2. 02更新平台参考文件和审计记录

安装

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

$npx skills add https://github.com/hainrixz/claude-ads --skill ads-update

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

详细介绍

/ads update <platform|all> — 自动刷新的平台参考资料

此技能会重新生成各平台的参考文件,记录过去 30 天内各广告平台实际发生的变化。来源包括 Reddit、Hacker News、官方平台更新日志和开放网络。

由改编版 last30days-skill 提供支持(MIT,作者:Matt Van Horn)。完整归属信息请参阅 scripts/lib/THIRD_PARTY_NOTICES.md。


步骤 0 — 必须:费用确认关卡

在进行任何其他操作之前,你必须:

  1. 读取 ads/references/update-cost-warning.md 的内容,并原样打印给用户。
  2. 计算所请求平台的预估 Token 费用:
    • 单个平台:默认深度下约 50,000–150,000 个 Token
    • all:默认深度下约 500,000 个以上 Token
  3. 使用以下确切问题和选项调用 AskUserQuestion:
    • 问题:"Run /ads update <platform>? Estimated cost: ~<N>k tokens. Proceed?"(将 <platform> 和 <N> 替换为实际值)
    • 选项:
      • Proceed(默认深度)——按完整费用运行所请求的模式
      • Switch to quick depth——覆盖范围相同,费用约为 40%
      • Cancel——不获取任何内容,直接取消
  4. 如果用户选择 Cancel 或任何不是 Proceed / Switch to quick depth 的答案,立即中止,并显示一行消息:"Cancelled. No sources fetched, no files written."

不得跳过此步骤。 这是为了保护使用低额度套餐的用户,避免意外耗尽余额。


步骤 1 — 解析参数

只接受以下枚举中的一个参数:

meta | google | tiktok | all

如果用户在没有参数的情况下调用 /ads update,请使用 AskUserQuestion 询问他们要更新哪个平台(不要默认选择 all)。如果用户传入未知值,请列出有效选项并退出。

对于 all,按以下顺序依次处理三个平台:meta, google, tiktok。依次处理很重要——并行请求会触发公共 API 的速率限制,且会使费用难以预测。


步骤 2 — 加载平台来源集

运行此 Bash 命令以获取来源配置:

python3 scripts/ads_sources.py --list <platform>

解析 JSON 输出。你将获得:

  • display_name — 摘要标题中使用的易读平台名称
  • subreddits — 要查询的 Reddit 子版块列表
  • changelog_urls — 官方厂商的版本说明页面(使用 WebFetch)
  • search_queries — 用于查找行业媒体报道的查询词(使用 WebSearch)
  • hn_keywords — 用于查询 Hacker News 的关键词
  • x_handles — 可选;如果没有 X/Twitter API 密钥,则跳过

步骤 3 — 获取来源

对于每个已启用的来源,获取过去 30 天内的内容。深度模式会限制每个来源获取的条目数:

来源类型快速默认深度
Reddit(每个子版块)61220
Hacker News(每个关键词)3610
WebFetch 更新日志 URL全部全部全部
WebSearch 查询(每个查询)124
Reddit(免费,无需密钥)

对于每个子版块,运行:

curl -s "https://www.reddit.com/r/<sub>/new.json?limit=25" -H "User-Agent: claude-ads/2.0"

解析 JSON,仅保留 created_utc 在过去 30 天内的帖子。根据 created_utc 计算 published_at(Unix 时间戳 → YYYY-MM-DD)。记录 title、permalink、score、num_comments、upvote_ratio 和 selftext(前 500 个字符)。

Hacker News(免费,无需密钥)

对于 hn_keywords 中的每个关键词,运行:

curl -s "https://hn.algolia.com/api/v1/search_by_date?query=<keyword>&numericFilters=created_at_i>$(date -u -v-30d +%s)&hitsPerPage=10"

记录 title、url、points、num_comments 和 created_at。

官方更新日志

对于 changelog_urls 中的每个 URL,使用 WebFetch 工具并提供以下提示词:“提取过去 30 天内的所有版本说明、更新日志条目或功能公告。将结果以条目列表形式返回,每项包含:标题、日期(YYYY-MM-DD)、单行摘要,以及可用时的 URL 锚点。”

网页搜索(行业媒体)

对于 search_queries 中的每个查询(数量受深度设置限制),使用 WebSearch 工具。在客户端筛选结果:优先选择来自 searchengineland.com、searchenginejournal.com、marketingland.com、martech.org、adweek.com 和厂商博客的结果。


步骤 4 — 评分和去重(可选,但建议执行)

如果获取的条目达到 30 条或更多,请使用随附的评分库对其进行排名。否则,跳过此步骤,并按 published_at 降序排列。

python3 -c "
import sys, json
sys.path.insert(0, 'scripts')
from lib import signals, dedupe
from lib.story import Story

raw = json.load(sys.stdin)
items = [Story(**r) for r in raw]
items = signals.annotate_stream(items)
items = dedupe.dedupe_items(items, threshold=0.7)
print(json.dumps([{'source': i.source, 'title': i.title, 'url': i.url, 'published_at': i.published_at, 'rank_score': i.rank_score} for i in items], indent=2))
"

步骤 5 — 生成摘要

将输出写入 ads/references/<platform>-changelog-30d.md(如果文件已存在,则覆盖)。使用以下确切结构:

# <Display Name> — Last 30 Days

_Generated <YYYY-MM-DD> by `/ads update <platform>` (depth: <quick|default|deep>)_

> **What this is:** the last 30 days of changes to <platform> ads — features, deprecations, policy updates — pulled from official changelogs, practitioner discussion, and industry press.

## Official Changelog Entries

- [<title>](<url>) — <YYYY-MM-DD> — <1-line summary>
- ...

## Industry Press

- [<title>](<url>) — <YYYY-MM-DD> — <publisher> — <1-line summary>
- ...

## Community Discussion (Reddit / Hacker News)

- [<title>](<url>) — <YYYY-MM-DD> — r/<sub> or HN — <1-line summary>
- ...

---

_Sources fetched: <N> Reddit, <M> HN, <P> official changelog URLs, <Q> web searches. Deduped via hybrid Jaccard at threshold 0.7._

如果某个部分没有条目,请输出:_No items found in the last 30 days from this source class._


步骤 6 — 追加到现有平台审计文件

写入变更日志文件后,向 ads/references/<platform>-audit.md 追加(不要覆盖)“Recent Updates”附录。内容应简短——仅包含影响最大的 5 条:


---

## Recent Updates (Last 30 Days)

_Auto-appended by `/ads update <platform>` on <YYYY-MM-DD>. See `ads/references/<platform>-changelog-30d.md` for the full digest._

1. <impact> — [<title>](<url>) — <YYYY-MM-DD>
2. ...

如果审计文件中已有此前运行生成的“Recent Updates”附录,请替换它,而不是重复追加。通过标记行 ## Recent Updates (Last 30 Days) 进行匹配。


步骤 7 — 向用户确认

输出一行摘要:

✓ /ads update <platform> complete — wrote ads/references/<platform>-changelog-30d.md (<N> items) and appended top 5 to ads/references/<platform>-audit.md.

对于 all 模式,每完成一个平台就输出一次,并在最后输出一行总结:

✓ /ads update all complete — refreshed 7 platforms.

失败情况

  • Reddit 被屏蔽 / 429:跳过该 subreddit,并在输出中注明。不要重试——公开的 Reddit JSON 数据仅尽力提供。
  • WebFetch URL 返回 404:跳过该变更日志 URL,并在输出中注明。
  • WebSearch 没有返回结果:跳过该查询。
  • 某个平台的所有来源都为空:仍需写入文件,并在各部分中注明“过去 30 天内未找到条目”——明确告知用户本次运行已完成。
  • 用户在 all 模式中途取消:停止循环。不要回滚已写入的文件(这些文件仍有效,只是覆盖范围不完整)。

绝不能悄无声息地失败。始终输出哪些来源成功、哪些来源已跳过。

评论

支持 Markdown