Skills article_link
文章链接提取工具。提交付费媒体文章链接,自动匹配已有内容并返回英文全文,或排队提取。支持 Barron's、Bloomberg、Financial Times、Foreign Policy、Handelsblatt、MarketWatch、New York Times、Reuters、The Atlantic、The Economist、The New Yorker、Wall Street Journal、Washington Post、Wired 共 15 家媒体。需要 Import Token 鉴权,每日有次数限制。Article link extraction tool. Supports Barron's, Bloomberg, FT, Foreign Policy, Handelsblatt, MarketWatch, NYT, Reuters, The Atlantic, The Economist, The New Yorker, WSJ, Washington Post, Wired (15 outlets). Requires Import Token.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/1787812757/article-link-skill" ~/.claude/skills/clawdbot-skills-article-link && rm -rf "$T"
skills/1787812757/article-link-skill/SKILL.md文章链接提取工具
⚠️ 使用规则(必须遵守)
- 只通过 CLI 命令调用 — 运行
,不要自己写脚本,不要用 curl/requests 直接调 APIpython3 {baseDir}/scripts/article_link.py <command> - 先读 config.json — 执行任何命令前,先读取
检查{baseDir}/config.json
是否已配置import_token - 注意每日次数限制 — 基础模式 50 次/天,深度解析 5 次/天,提交前可先用
查看剩余次数quota - 深度解析必须确认 — 使用
时脚本会自动拦截并返回配额信息,必须将配额告知用户并获得明确确认后,才能加--deep
执行--yes
第一步:检查配置
每次使用前先读取
{baseDir}/config.json:
{ "api_base": "https://pick-read.vip/api", "import_token": "imp-xxx..." }
- 如果
为空 → 告知用户:请到 pick-read.vip 账户页生成导入令牌并填入 config.jsonimport_token - 如果
已填写 → 直接执行命令,无需再传import_token
参数--token
工作流 A:查看支持的媒体来源
python3 {baseDir}/scripts/article_link.py media
返回示例:
{ "type": "media_list", "total": 15, "media": [ {"domain": "ft.com", "name": "Financial Times"}, {"domain": "wsj.com", "name": "Wall Street Journal"}, {"domain": "nytimes.com", "name": "New York Times"} ] }
工作流 B:查看今日配额
python3 {baseDir}/scripts/article_link.py quota
返回示例:
{ "type": "quota", "basic_used": 3, "basic_limit": 50, "deep_used": 0, "deep_limit": 5 }
工作流 C:提交文章链接
python3 {baseDir}/scripts/article_link.py submit "https://www.wsj.com/articles/some-article"
返回示例(已匹配 — 直接返回英文全文,无需额外命令):
{ "type": "submit_matched", "job_id": "abc123", "origin_url": "https://www.wsj.com/articles/some-article", "source_media": "Wall Street Journal", "mode": "basic", "status": "matched", "matched_article_id": "def456", "title": "Article Title in English", "content_html": "<p>Full article text in English...</p>", "original_publish_time": "2026-04-10T08:00:00", "next_action": "done — 将 title + content_html 英文全文展示给用户" }
→
表示已拿到全文,直接展示 type=submit_matched
+ title
给用户即可content_html
返回示例(未匹配,排队提取):
{ "type": "submit_pending", "job_id": "abc123", "origin_url": "https://www.wsj.com/articles/some-article", "source_media": "Wall Street Journal", "mode": "basic", "status": "pending_extract", "next_action": "poll — 用 status \"abc123\" 轮询任务状态" }
→ 按
指引操作,无需自行判断next_action
可选参数:
— 深度解析模式,跳过已有匹配,直接重新提取--deep
— 确认执行深度解析(必须在用户确认后才能使用)--yes
深度解析确认流程(强制)
当用户要求深度解析时,必须分两步执行:
步骤 1: 触发确认提示
python3 {baseDir}/scripts/article_link.py submit "https://..." --deep
返回示例:
{ "type": "deep_confirm_required", "message": "深度解析每日仅 5 次,今日已用 1 次,剩余 4 次。请确认后使用 --yes 执行。", "deep_used": 1, "deep_limit": 5, "deep_remaining": 4, "confirm_command": "submit \"https://...\" --deep --yes" }
→ 将 message 展示给用户,询问是否确认执行
步骤 2: 用户确认后执行
python3 {baseDir}/scripts/article_link.py submit "https://..." --deep --yes
⚠️ 禁止跳过步骤 1 直接使用
,必须先让用户看到配额并确认--deep --yes
status 字段含义:
— 已匹配,脚本已自动获取英文全文,直接展示matched
— 未匹配,已排队等待提取,按pending_extract
轮询next_action
— 提取进行中,继续轮询processing
— 提取完成,脚本已自动获取全文ready
— 提取失败,告知用户failed
工作流 D:查询任务状态
提交后如果
type=submit_pending,按 next_action 轮询:
python3 {baseDir}/scripts/article_link.py status "abc123"
返回示例(提取完成 — 自动返回英文全文):
{ "type": "job_ready", "job_id": "abc123", "status": "ready", "matched_article_id": "def456", "title": "Article Title in English", "content_html": "<p>Full article text...</p>", "next_action": "done — 将 title + content_html 英文全文展示给用户" }
返回示例(仍在处理中):
{ "type": "job_status", "job_id": "abc123", "status": "processing", "next_action": "poll — 等待几秒后再次查询 status \"abc123\"" }
→ 始终按
操作,next_action
表示已拿到全文,done
表示继续等待poll
工作流 E:查看近期任务
python3 {baseDir}/scripts/article_link.py jobs
可选参数:
--page 2、--page-size 10
工作流 F:单独获取英文全文(备用)
注意:
和submit命令已自动在匹配/完成时获取全文。此命令仅在已知status时作为独立工具使用。article_id
如果已有
matched_article_id,可直接调用:
python3 {baseDir}/scripts/article_link.py article "matched_article_id"
返回示例:
{ "type": "article_content", "id": "def456", "source_media": "Financial Times", "title": "Article Title in English", "content_html": "<p>Full article text in English...</p>", "origin_url": "https://www.ft.com/content/xxx", "original_publish_time": "2026-04-10T08:00:00" }
→ 将
和 title
中的英文全文展示给用户(content_html 是 HTML 格式,需解析后呈现纯文本)content_html
工作流 G:组合任务示例
基础模式(最常用)
用户说“帮我看看这篇 FT 文章讲了什么”:
# 只需一步: submit 自动匹配 + 获取英文全文 python3 {baseDir}/scripts/article_link.py submit "https://www.ft.com/content/xxx" # → type=submit_matched 时,直接展示 title + content_html # → type=submit_pending 时,按 next_action 轮询 python3 {baseDir}/scripts/article_link.py status "返回的job_id"
深度解析模式
用户说“帮我深度解析这篇 FT 文章”:
# 步骤 1: 触发确认 python3 {baseDir}/scripts/article_link.py submit "https://www.ft.com/content/xxx" --deep # → 返回 deep_confirm_required,将 message 展示给用户 # 步骤 2: 用户确认“是”后才执行 python3 {baseDir}/scripts/article_link.py submit "https://www.ft.com/content/xxx" --deep --yes # → 按 next_action 处理结果
核心原则:始终按 next_action
操作
next_action
以next_action
开头 → 直接展示done
+title
给用户content_html
以next_action
开头 → 等待几秒后执行其中的命令poll
支持的媒体来源
| 媒体 | 域名 |
|---|---|
| Barron's | barrons.com |
| Bloomberg | bloomberg.com |
| Financial Times | ft.com |
| Foreign Policy | foreignpolicy.com |
| Handelsblatt | handelsblatt.com |
| MarketWatch | marketwatch.com |
| New York Times | nytimes.com |
| Newsweek | newsweek.com |
| Reuters | reuters.com |
| The Atlantic | theatlantic.com |
| The Economist | economist.com |
| The New Yorker | newyorker.com |
| Wall Street Journal | wsj.com |
| Washington Post | washingtonpost.com |
| Wired | wired.com |
每日次数限制
| 模式 | 每人每天上限 | 说明 |
|---|---|---|
| 基础模式 (basic) | 50 次 | 先匹配已有内容,未命中则排队提取 |
| 深度解析 (deep) | 5 次 | 跳过匹配,直接重新提取 |
禁止事项
- ✘ 不要用 curl、wget、requests 等直接调用 API
- ✘ 不要自己拼 URL 或写 HTTP 请求代码
- ✘ 不要猜测 API 端点路径
- ✘ 不要编造文章内容或摘要
- ✘ 提取失败时不得编造内容,应如实告知用户
故障排查
| 现象 | 原因 | 解决 |
|---|---|---|
| config.json 中 import_token 为空 | 让用户到 pick-read.vip 生成令牌 |
| token 错误或已重置 | 重新生成令牌 |
| 用户订阅到期 | 告知用户需要续订 |
| 链接不在白名单中 | 用 命令查看支持列表 |
| 每日次数用尽 | 用 查看配额,明天再试 |
| 系统代理干扰 TLS | 脚本已内置代理绕过,正常重试 |