关于 ads-update
ads-update 是用于更新广告平台参考文件的技能,汇总过去 30 天的平台变更。它从官方更新日志、Reddit、Hacker News 和网络搜索收集信息,并更新摘要与审计附录。
主要功能
- 01收集近期平台变更
- 02抓取官方更新日志及网络来源
- 03支持 Meta、Google、TikTok 或全部
- 04生成 30 天变更摘要
- 05向平台审计文件附加重点
适用场景
- 01查看广告平台近期变更
- 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 — 必须:费用确认关卡
在进行任何其他操作之前,你必须:
- 读取
ads/references/update-cost-warning.md的内容,并原样打印给用户。 - 计算所请求平台的预估 Token 费用:
- 单个平台:默认深度下约 50,000–150,000 个 Token
all:默认深度下约 500,000 个以上 Token
- 使用以下确切问题和选项调用
AskUserQuestion:- 问题:
"Run /ads update <platform>? Estimated cost: ~<N>k tokens. Proceed?"(将<platform>和<N>替换为实际值) - 选项:
Proceed(默认深度)——按完整费用运行所请求的模式Switch to quick depth——覆盖范围相同,费用约为 40%Cancel——不获取任何内容,直接取消
- 问题:
- 如果用户选择
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(每个子版块) | 6 | 12 | 20 |
| Hacker News(每个关键词) | 3 | 6 | 10 |
| WebFetch 更新日志 URL | 全部 | 全部 | 全部 |
| WebSearch 查询(每个查询) | 1 | 2 | 4 |
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模式中途取消:停止循环。不要回滚已写入的文件(这些文件仍有效,只是覆盖范围不完整)。
绝不能悄无声息地失败。始终输出哪些来源成功、哪些来源已跳过。