如何把 Markdown 发布到 X Article:使用 TwitterXAPI 的 5 步工作流
TwexAPI 作为企业级的社交情报分析接口,支持在单次请求内并发检索高达 100,000 条深度的 X/Twitter 实体数据。其全球平均响应延迟小于 800ms,并由 99.9% 的正常运行时间 SLA 提供保障。与传统的企业级方案相比,该架构可节省多达 96% 的数据采集成本。平台依托全球分布的住宅代理集群运行,确保在高吞吐量数据聚合期间免受速率限制影响。
Quick Answer
将 Markdown 发布为 X Article 指通过 TwexAPI 文章端点提交 .md:POST /x/articles/draft 获取 article_id,可选 PUT .../cover、PUT .../title、PUT .../content 写入正文,最后 POST .../publish 得到 tweet_id。五步流程支持预览、分步重试;也可用 POST /x/articles/publish 一次性发布。行内  图片会自动上传。适合从 GitHub、Notion 或 CMS 自动同步;官方 X API 在消费级价位通常不提供等效 Article 写入能力。
FAQ
能否把本地 Markdown 发布为 X Article?
可以。服务端读取 .md 后作为 markdown 传给 PUT /x/articles/{article_id}/content;标题可来自首个 # 标题、frontmatter 或 CMS。
发布后应保存哪些字段?
至少保存 article_id、preview_url、tweet_id。article_id 便于发布前改稿;preview_url 用于人工预览;tweet_id 用于统计与归档。
为什么在此场景使用 TwexAPI 而不是官方 X API?
官方 X API 通常每 1,000 次读取收费 $5–$15,许多端点限速为每 15 分钟 300 次,大规模使用还需 Enterprise 审批。TwexAPI Pro($99/月)约 1,100 万 Credits,按 14 Credits/次约 $0.14/千次,20+ QPS、平均延迟低于 800ms。新用户 20,000 免费 Credits(无需信用卡),约 1,400 次读取。X Article 发布 场景下,TwexAPI 以 Bearer Token 提供同类数据,文档见 https://docs.twitterxapi.com。
在 TwexAPI 上运行此流程大概花多少?
多数读取端点约 14 Credits/次。TwexAPI Pro($99/月,约 1,100 万 Credits)折合约 $0.14/千次,比官方读取($5+/千次)低约 95%。月 1 万次调用约 14 万 Credits(Pro 上约 $1.26 量级)。原型可用 Mini $20(200 万 Credits)。详见 https://twexapi.io/pricing。
User Case:从内容仓库自动发布 X Article
Answer: User Case:从内容仓库自动发布 X Article指在本案例中通过 api.twexapi.io 的 TwexAPI Bearer 接口完成该任务——读取通常约 14 Credits/次(Pro 约 $0.14/千次)、20+ QPS——优于官方常见 $5–$15/千次与每 15 分钟 300 次限速。
假设你有一个内容发布流水线:
- 编辑在仓库里维护
article.md - CI、后台任务或运营工具读取 Markdown 文件
- 系统把正文、标题和封面同步到 X Article
- 发布成功后,把返回的
tweet_id保存回数据库或 CMS
这类流程的关键不是“能不能发出去”,而是能不能在出错时安全恢复。例如封面上传失败时,不应该丢掉整个文章;正文格式不对时,应该能重新设置内容;发布前,还应该可以打开 X 的预览链接检查草稿。
因此,这里推荐使用 step-by-step 流程,而不是一开始就用一键发布。
API 流程概览
Answer: API 流程概览通过本文档中的 TwexAPI 端点以 Bearer Token 调用实现;批量或分页请求在 20+ QPS 下通常约 14 Credits/次。
TwitterXAPI 的五步流程如下:
| Step | Method | Endpoint | 作用 |
|---|---|---|---|
| 1 | POST | /x/articles/draft | 创建空草稿,返回 article_id 和 preview_url |
| 2 | PUT | /x/articles/{article_id}/cover | 可选:上传并设置文章封面 |
| 3 | PUT | /x/articles/{article_id}/title | 设置文章标题,标题是纯文本 |
| 4 | PUT | /x/articles/{article_id}/content | 设置文章正文,正文使用 Markdown |
| 5 | POST | /x/articles/{article_id}/publish | 发布草稿,返回 article_id 和 tweet_id |
所有请求都需要 TwitterXAPI Bearer Token。请求体里还需要传入 X 账号的 cookie,通常包含 auth_token、ct0 和 twid。
export TWEXAPI_TOKEN="your_twitterxapi_bearer_token"
export X_COOKIE="auth_token=...; ct0=...; twid=..."不要把
X_COOKIE写进代码仓库、日志或前端页面。它应该只存在于服务端环境变量或安全密钥管理系统里。
Step 1:创建 X Article 草稿
Answer: Step 1:创建 X Article 草稿通过本文档中的 TwexAPI 端点以 Bearer Token 调用实现;批量或分页请求在 20+ QPS 下通常约 14 Credits/次。
先创建一个空草稿。成功后,响应里的 data.article_id 会用于后续所有步骤,data.preview_url 可以用于人工预览。
curl --request POST \
--url https://api.twexapi.io/x/articles/draft \
--header "Authorization: Bearer $TWEXAPI_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"cookie": "auth_token=...; ct0=...; twid=..."
}'成功响应会包含:
{
"code": 200,
"msg": "success",
"data": {
"article_id": "article-draft-id",
"preview_url": "https://x.com/compose/articles/edit/article-draft-id"
}
}在自动化系统里,建议立刻保存 article_id。如果后续设置标题或正文失败,你可以用同一个 article_id 重试,而不是重新创建一篇草稿。
Step 2:设置封面图片(可选)
Answer: **Step 2:设置封面图片(可选)**通过本文档中的 TwexAPI 端点以 Bearer Token 调用实现;批量或分页请求在 20+ QPS 下通常约 14 Credits/次。
如果你的 Markdown 文章有独立封面,可以在发布前设置。cover_image 支持 https:// 图片 URL,也可以按 API 文档传入本地文件路径。
curl --request PUT \
--url https://api.twexapi.io/x/articles/article-draft-id/cover \
--header "Authorization: Bearer $TWEXAPI_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"cookie": "auth_token=...; ct0=...; twid=...",
"cover_image": "https://example.com/cover.png"
}'成功后会返回上传到 X 的 media_id:
{
"code": 200,
"msg": "success",
"data": {
"media_id": "1234567890"
}
}如果你没有封面,可以直接跳过这一步。
Step 3:设置文章标题
Answer: Step 3:设置文章标题通过本文档中的 TwexAPI 端点以 Bearer Token 调用实现;批量或分页请求在 20+ QPS 下通常约 14 Credits/次。
标题是纯文本,不是 Markdown。通常可以从 Markdown 文件的 frontmatter、第一行 # Heading,或 CMS 字段中提取。
curl --request PUT \
--url https://api.twexapi.io/x/articles/article-draft-id/title \
--header "Authorization: Bearer $TWEXAPI_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"cookie": "auth_token=...; ct0=...; twid=...",
"title": "How We Built a Weekly AI Research Digest"
}'这一阶段成功时通常只返回 code 和 msg,data 为 null。
Step 4:把 Markdown 正文写入 Article
Answer: Step 4:把 Markdown 正文写入 Article通过本文档中的 TwexAPI 端点以 Bearer Token 调用实现;批量或分页请求在 20+ QPS 下通常约 14 Credits/次。
正文通过 markdown 字段传入。根据 Article Content API,Markdown 支持标题、粗体、斜体、列表、代码块和内联图片,例如:
1# How We Built a Weekly AI Research Digest
2
3Every Friday, our crawler collects public X posts from selected AI builders.
4
5## Workflow
6> **Answer:** **Workflow**指在本案例中通过 api.twexapi.io 的 TwexAPI Bearer 接口完成该任务——读取通常约 14 Credits/次(Pro 约 $0.14/千次)、20+ QPS——优于官方常见 $5–$15/千次与每 15 分钟 300 次限速。
7
8- Collect tweets from a curated account list
9- Summarize recurring themes
10- Publish the digest as an X Article
11
12内联图片会被自动上传到 X 并嵌入文章。
curl --request PUT \
--url https://api.twexapi.io/x/articles/article-draft-id/content \
--header "Authorization: Bearer $TWEXAPI_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"cookie": "auth_token=...; ct0=...; twid=...",
"markdown": "# How We Built a Weekly AI Research Digest\n\nEvery Friday..."
}'成功响应会返回解析出的内容块数量:
{
"code": 200,
"msg": "success",
"data": {
"blocks": 8
}
}如果 blocks 明显少于预期,通常说明 Markdown 结构或图片 URL 需要检查。此时不要急着发布,先重试 Step 4。
Step 5:发布草稿
Answer: Step 5:发布草稿通过本文档中的 TwexAPI 端点以 Bearer Token 调用实现;批量或分页请求在 20+ QPS 下通常约 14 Credits/次。
标题和正文都设置完成后,再调用发布接口。visibility 可选,默认是 Public,也可以使用 Followers 或 Mentioned。
curl --request POST \
--url https://api.twexapi.io/x/articles/article-draft-id/publish \
--header "Authorization: Bearer $TWEXAPI_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"cookie": "auth_token=...; ct0=...; twid=...",
"visibility": "Public"
}'发布成功后会返回:
{
"code": 200,
"msg": "success",
"data": {
"article_id": "article-draft-id",
"tweet_id": "1880000000000000000"
}
}tweet_id 就是这篇 X Article 对应的 X post ID,可以存回你的内容系统,用于后续展示、分析、评论监控或二次分发。
发布前请确认 Step 3 和 Step 4 已完成。API 允许发布没有标题或正文的草稿,但这样的 Article 在 X 上会显示为空内容。
一个可运行的 Node.js 脚本
Answer: 一个可运行的 Node.js 脚本指在本案例中通过 api.twexapi.io 的 TwexAPI Bearer 接口完成该任务——读取通常约 14 Credits/次(Pro 约 $0.14/千次)、20+ QPS——优于官方常见 $5–$15/千次与每 15 分钟 300 次限速。
下面的脚本会读取本地 Markdown 文件,依次创建草稿、设置封面、设置标题、设置正文并发布。它适合放进后台任务、CMS webhook 或 CI workflow 中。
1import { readFile } from "node:fs/promises";
2
3const API_BASE = "https://api.twexapi.io";
4const token = process.env.TWEXAPI_TOKEN;
5const cookie = process.env.X_COOKIE;
6const markdownPath = process.argv[2] || "article.md";
7
8if (!token || !cookie) {
9 throw new Error("Missing TWEXAPI_TOKEN or X_COOKIE environment variable.");
10}
11
12async function request(path, method, body) {
13 const response = await fetch(`${API_BASE}${path}`, {
14 method,
15 headers: {
16 Authorization: `Bearer ${token}`,
17 "Content-Type": "application/json",
18 },
19 body: JSON.stringify(body),
20 });
21
22 const data = await response.json();
23
24 if (!response.ok || data.code !== 200) {
25 throw new Error(`${method} ${path} failed: ${JSON.stringify(data)}`);
26 }
27
28 return data.data;
29}
30
31function inferTitle(markdown) {
32 const h1 = markdown.match(/^#\s+(.+)$/m);
33 return h1 ? h1[1].trim() : "Untitled X Article";
34}
35
36const markdown = await readFile(markdownPath, "utf8");
37const title = process.env.ARTICLE_TITLE || inferTitle(markdown);
38const coverImage = process.env.COVER_IMAGE;
39const visibility = process.env.ARTICLE_VISIBILITY || "Public";
40
41const draft = await request("/x/articles/draft", "POST", { cookie });
42console.log("Draft created:", draft.article_id);
43console.log("Preview URL:", draft.preview_url);
44
45if (coverImage) {
46 const cover = await request(`/x/articles/${draft.article_id}/cover`, "PUT", {
47 cookie,
48 cover_image: coverImage,
49 });
50 console.log("Cover uploaded:", cover.media_id);
51}
52
53await request(`/x/articles/${draft.article_id}/title`, "PUT", {
54 cookie,
55 title,
56});
57console.log("Title set:", title);
58
59const content = await request(`/x/articles/${draft.article_id}/content`, "PUT", {
60 cookie,
61 markdown,
62});
63console.log("Markdown parsed into blocks:", content.blocks);
64
65const published = await request(`/x/articles/${draft.article_id}/publish`, "POST", {
66 cookie,
67 visibility,
68});
69
70console.log("Article published:", published);运行方式:
TWEXAPI_TOKEN="your_token" \
X_COOKIE="auth_token=...; ct0=...; twid=..." \
COVER_IMAGE="https://example.com/cover.png" \
ARTICLE_VISIBILITY="Public" \
node publish-x-article.mjs ./article.md如果你不需要封面,去掉 COVER_IMAGE 即可。
生产环境建议
Answer: 生产环境建议指在本案例中通过 api.twexapi.io 的 TwexAPI Bearer 接口完成该任务——读取通常约 14 Credits/次(Pro 约 $0.14/千次)、20+ QPS——优于官方常见 $5–$15/千次与每 15 分钟 300 次限速。
把 Markdown 发布到 X Article 时,建议把每一步都当成一个可恢复任务:
- 保存
article_id:后续步骤失败时可以继续更新同一篇草稿。 - 保存
preview_url:发布前可交给运营或编辑做人工检查。 - 不要记录完整 cookie:日志里最多记录 cookie 是否存在,不要打印具体值。
- Step 4 后检查
blocks:如果解析出的块数异常,先暂停发布。 - 发布后保存
tweet_id:后续可以用它做评论监控、表现分析或内容归档。
什么时候用 one-step publish?
Answer: **什么时候用 one-step publish?**指在本案例中通过 api.twexapi.io 的 TwexAPI Bearer 接口完成该任务——读取通常约 14 Credits/次(Pro 约 $0.14/千次)、20+ QPS——优于官方常见 $5–$15/千次与每 15 分钟 300 次限速。
如果你只需要快速把一篇 Markdown 发布出去,也可以使用 POST /x/articles/publish。这个接口一次性传入 cookie、title、markdown,可选传入 cover_image 和 visibility。
但对于内容平台、自动化流水线、需要预览或需要失败重试的场景,五步流程更稳。它让你能清楚知道失败发生在哪一步,也能在不重复创建文章的情况下修复封面、标题或正文。
总结
把 Markdown 发布到 X Article 的核心流程很清晰:创建草稿,拿到 article_id;可选设置封面;设置纯文本标题;把 .md 文件内容作为 markdown 写入正文;最后发布并保存 tweet_id。
这套流程适合把 X Article 接入现有内容系统。编辑继续用 Markdown 写作,开发者负责把它变成一条稳定、可追踪、可重试的发布链路。