首页 / 全部技能 / 内容创作 / canghe-danger-x-to-markdown
内容创作 · freestylefly/canghe-skills

canghe-danger-x-to-markdown

Converts X (Twitter) tweets and articles to markdown with YAML front matter. Uses reverse-engineered API requiring user consent. Use when user mentions "X to markdown", "tweet to markdown", "save tweet", or provides x.com/twitter.com URLs for conversion.

风险提醒:红色 · 谨慎使用AI 侦查报告
作者 freestyleflyGitHub freestylefly/canghe-skills ↗许可 MIT(仓库根 LICENSE)commit dd0bf35595
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

核心是走 X 的逆向 API:SKILL.md 自述使用 reverse-engineered X API,并据此把推文/线程/Article 抽出为 markdown。

skills/canghe-danger-x-to-markdown/SKILL.md
This tool uses a reverse-engineered X API, NOT official.
注:这里在做什么:不申请官方 API,直接用网页端能力抓取;脚本入口 scripts/main.ts,含 graphql/cookies/media-localizer 等模块。

三类内容各有抽取路径:普通推文与线程转成带 YAML front matter 的 markdown,X Article 走全文实体抽取。

skills/canghe-danger-x-to-markdown/SKILL.md
- Tweets/threads → Markdown with YAML front matter
注:这里在做什么:front matter 含 url/author/tweetCount/coverImage;Article 由 tweet-article.ts 的 resolveArticleEntityFromTweet 解析。

Article 全文抽取的实现:先尝试推文内嵌的 article 实体,取不到再从 URL 解析 article id 并单独 fetchXArticle 拉取。

skills/canghe-danger-x-to-markdown/scripts/tweet-article.ts
const fetched = await fetchXArticle(articleId, cookieMap, false);
注:这里在做什么:extractArticleIdFromTweet 会从 note_tweet/legacy 的 urls 里用正则 /\/(?:i\/)?article\/(\d+)/ 挖出 id,再按 id 拉全文。

鉴权靠用户账号 cookie:优先用环境变量 X_AUTH_TOKEN / X_CT0,其次回落到 Chrome 登录并本地缓存 cookie。

skills/canghe-danger-x-to-markdown/SKILL.md
1. **Environment variables** (preferred): `X_AUTH_TOKEN`, `X_CT0`
注:这里在做什么:cookies.ts 负责三源加载与必需项校验,必要时 spawn 本机 Chrome(脚本内 child_process)。

读到的 cookie 会被落盘成 cookies.json:cookie-file.ts 以 version/updatedAt/cookieMap 结构写 JSON,路径由 paths.ts 跨平台解析。

skills/canghe-danger-x-to-markdown/scripts/cookie-file.ts
await writeFile(p, JSON.stringify(payload, null, 2), "utf8");
注:这里在做什么:默认落在用户数据目录 canghe-skills/x-to-markdown/cookies.json,可用 X_COOKIE_PATH 覆盖。

媒体本地化是可选项:开启 --download-media 后把图片/视频下载到 markdown 同级的 imgs/ 与 videos/,并把链接改写成相对路径。

skills/canghe-danger-x-to-markdown/SKILL.md
| `--download-media` | Download image/video assets to local `imgs/` and `videos/`, and rewrite markdown links to local relative paths |
注:这里在做什么:下载逻辑在 media-localizer.ts;不开该开关时保留远端 URL。

媒体处理默认“先出 markdown 再问”:先不带下载参数跑一次,若产出仍有远端媒体 URL 才询问,确认后再次运行覆盖链接。

skills/canghe-danger-x-to-markdown/SKILL.md
5. If user confirms → run script **again** with `--download-media` (overwrites markdown with localized links)
注:这里在做什么:download_media 三态(ask/1/0)由 SKILL.md 规定,脚本侧只认 --download-media 布尔开关。

EXTEND.md 首次设置被写成阻塞操作:不存在时必须先交互问偏好(媒体策略/输出目录/保存位置),禁止静默用默认值。

skills/canghe-danger-x-to-markdown/SKILL.md
**CRITICAL**: When EXTEND.md is not found, you **MUST use `AskUserQuestion`** to ask the user for their preferences before creating EXTEND.md.
注:这里在做什么:详细问卷与 EXTEND.md 模板另存于 references/config/first-time-setup.md。

逆向使用还需一句同意门禁:没有 consent 文件或版本不符时展示免责声明,用户拒绝即输出退出信息并停止。

skills/canghe-danger-x-to-markdown/SKILL.md
**Step 5**: On decline → output "User declined. Exiting." and stop.
注:这里在做什么:同意文件含 accepted/acceptedAt/disclaimerVersion,路径在 ~/.local/share/canghe-skills/x-to-markdown/consent.json。

数据目录按平台解析:paths.ts 在 Linux 用 XDG_DATA_HOME(或 ~/.local/share),macOS 用 Application Support,Windows 用 APPDATA。

skills/canghe-danger-x-to-markdown/scripts/paths.ts
return process.env.XDG_DATA_HOME ?? path.join(os.homedir(), ".local", "share");
注:这里在做什么:cookie/consent/chrome-profile 路径都派生自同一数据目录,并各有 env 覆盖键。

2核心能力

01单推/长线程 → markdown
02X Article 全文抽取(内嵌实体→按 id 补抓)
03YAML front matter 输出(url/author/tweetCount/coverImage)
04媒体本地化(imgs/ 与 videos/ + 链接改写)
05cookie 三路获取(env → 本地文件 → Chrome 登录)与 --login 刷新
06同意门禁与首次设置强交互(consent.json + EXTEND.md 三问)
07--json 结构化输出与 -o 指定输出路径
08确定性的归档目录结构

3外部依赖

类型依赖
networkx.com(登录流程与逆向 API 请求)
networkpbs.twimg.com(推文图片资源,出现在输出样例 coverImage)
clibun / npx(以 npx -y bun 运行脚本)
cli本机 Chrome/Chromium(回落到浏览器登录时 spawn 以取 cookie)

4风险提醒 风险提醒:红色 · 谨慎使用

风险提醒:红色 · 谨慎使用
  • 账号风险(逆向 API + 冒充网页客户端) — 用账号 cookie 请求 X 私有接口,SKILL.md 明确风险含 “Possible account restrictions”;建议用小号或专用 cookie。
  • cookie 处理与存放 — X_AUTH_TOKEN/CT0 会被读入并入请求头,脚本会把 cookie 落盘成 cookies.json;这些值等价于账号登录态,需按密钥对待。
  • 文本与媒体外发/落盘 — 推文正文原样写成 markdown(可能含跟踪链接与远端媒体 URL);--download-media 会从 pbs.twimg.com 拉文件到本地。
  • 输出路径由远端数据参与决定 — 目录用 username/tweet-id 命名,username 来自抓取结果;异常字符可能导致路径不如预期(必要时用 -o 固定)。
  • 接口随时可能失效 — 依赖逆向私有接口,X 改前端即可能失效,且无官方支持渠道。
  • 内容合规 — 把 X 内容抓成本地归档涉及转载/版权与平台条款,使用者需自行确认授权范围。
风险提醒:红色,谨慎使用(属能力/策略级判定,非恶意植入)。(a) 逆向工程 + 冒充官方客户端:SKILL.md 自述 reverse-engineered X API,不使用官方 API,而由 graphql.ts 直接请求 X 的私有接口并用账号 cookie 通过。(b) 凭证面:读取并使用用户账号 cookie X_AUTH_TOKEN/X_CT0(env、本地 cookie 文件,或经 cookies.ts 回落 Chrome 登录并经 CDP/浏览器读取),SKILL.md 自述风险含 “Possible account restrictions”。(c) 命令面:回落路径会 spawn 本机 Chrome/Chromium 取 cookie。程度说明:未发现 TLS 校验降级、未发现反自动化伪装、不做批量定向采集、无任意代码执行;媒体下载仅在 --download-media 时发生。定级依据是“逆向私有接口 + 冒充网页客户端 + 私有凭据”。

5第二遍独立确认

  • [ok] 逆向 API 而非官方 API(red 主因之一) — SKILL.md 有 DISCLAIMER「This tool uses a reverse-engineered X API, NOT official.」,并据此设 consent 门禁。
  • [ok] 读取账号 cookie(red 主因之二) — SKILL.md 列出环境变量 X_AUTH_TOKEN/X_CT0 为首选来源、Chrome 登录为兜底;cookies.ts 内含 child_process spawn。
  • [ok] 媒体下载范围受限 — --download-media 为显式开关,ask 流程要求先出 markdown 再询问,非默认批量下载。
  • [ok] 两道用户门禁 — consent.json(accepted + disclaimerVersion)与 EXTEND.md 首次设置(BLOCKING,禁止静默默认)均在 SKILL.md 写明。
  • [ok] 数据目录跨平台解析 — paths.ts 按 win32/darwin/其他分派 APPDATA / Application Support / XDG_DATA_HOME,并支持 X_DATA_DIR 等覆盖。
  • [unlocatable] GraphQL 与媒体模块内部实现 — graphql.ts / media-localizer.ts 正文未在证据包展开,仅依据 §1 文件清单与 §3 扫描行定位其存在与职责;未据此提升或降低档位。

6结论

  • 归档友好:输出固定目录结构与 YAML front matter,适合把 X 内容长期留存/建站。
  • 媒体可选本地化:一键把图片视频抓成本地相对路径,离线归档不丢媒体。
  • 凭据获取灵活:env 直填、cookie 文件、浏览器登录三条路,CI 与本地都可用。
  • 门禁严:逆向免责同意与首次偏好设置都强制交互,不静默写默认值。
  • Article 抽取有兜底:内嵌实体取不到时按 article id 单独补抓。
  • 适合:适合个人做内容归档/素材整理:把长线程、X Article 转成可检索的 markdown(配 --download-media 做完整离线副本),或作为写文章前的素材入库步骤。
    不适合:不适合企业合规环境或主账号高频使用;不适合需要官方支持与稳定 SLA 的批量采集(入口是单 URL,不做批量);不适合不想在本机留下 cookie/consent/归档文件的场景。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-10-10
    方式 A · 人下载镜像包下载 canghe-danger-x-to-markdown.tar.gz
    sha256: f839fffff58e69c9…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit dd0bf35595;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库freestylefly / freestylefly/canghe-skills
    本 skill commitdd0bf35595
    许可MIT(仓库根 LICENSE)
    本站信息
    收录日期2026-09-06
    分类内容创作
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近