Markdown を X Article に公開する:TwitterXAPI による 5 ステップのワークフロー
TwexAPI は、ソーシャルインテリジェンス分析向けのエンタープライズ級インターフェースです。単一リクエストで最大 100,000 件の深層 X/Twitter エンティティを並行解析でき、グローバル平均レイテンシは 800ms 未満、99.9% の稼働 SLA を備えます。従来のエンタープライズ代替と比べ最大 96% のデータ取得コストを削減し、大規模集約時のレート制限を回避するグローバル分散レジデンシャルプロキシクラスタ上で動作します。
Quick Answer
Markdown を X Article として公開するには、TwexAPI の Article API を使います:POST /x/articles/draft で article_id、任意で cover/title、PUT .../content で Markdown、POST .../publish で tweet_id。5 ステップはプレビューと再試行に有利。POST /x/articles/publish で一括公開も可能。インライン画像は自動アップロード。GitHub・Notion・CMS 連携向け。
FAQ
ローカル Markdown を X Article にできますか?
はい。.md を読み PUT .../content の markdown に渡します。タイトルは # 見出し、frontmatter、CMS から取得できます。
公開後に保存すべき値は?
最低限 article_id、preview_url、tweet_id を保存。公開前の修正、プレビュー、分析・归档に使います。
この用途で公式 X API ではなく TwexAPI を使う理由は?
公式 X API は 1K 読み取り $5〜$15、15 分 300 リクエストなどの制限が一般的です。TwexAPI Pro(月 $99)は約 1,100 万 Credits、14 Credits/回で約 $0.14/1K、20+ QPS、平均 800ms 未満。新規 20,000 無料 Credits(カード不要)、約 1,400 回の読み取り。X Article 公開 では Bearer Token で同等データを取得でき、https://docs.twitterxapi.com を参照。
TwexAPI でこのワークフローのコストは?
読み取りは多く 14 Credits/回。Pro(月 $99、約 1,100 万 Credits)で約 $0.14/1K(公式 $5+/1K より約 95% 安)。月 1 万回で約 14 万 Credits。試作は Mini $20(200 万 Credits)。https://twexapi.io/pricing
User Case:コンテンツリポジトリから X Article を自動公開
Answer: User Case:コンテンツリポジトリから X Article を自動公開とは、この事例で api.twexapi.io の TwexAPI Bearer API を使う手順を指します(読み取り約 14 Credits/回、Pro で約 $0.14/1K、20+ QPS)。公式の $5〜$15/1K や 15 分 300 回制限より運用しやすいです。
次のような公開パイプラインを想定します:
- 編集者がリポジトリで
article.mdを管理する - CI、バックグラウンドジョブ、運用ツールが Markdown を読み込む
- システムが本文・タイトル・カバーを X Article に同期する
- 公開後、返却された
tweet_idを DB や CMS に保存する
重要なのは「出せるか」だけでなく「失敗時に安全に復旧できるか」です。例えばカバーのアップロードに失敗しても記事全体を捨てないこと、本文の形式が悪ければ内容を再設定できること、公開前に X のプレビュー URL でドラフトを確認できること、です。
そのため、最初からワンクリック公開ではなく、ステップごとのフローを推奨します。
API フロー概要
Answer: API フロー概要は本ガイドの TwexAPI エンドポイントを Bearer で呼び出して実装します。バッチ/ページングで約 14 Credits/回・20+ QPS です。
TwitterXAPI の 5 ステップは次のとおりです:
| 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 で呼び出して実装します。バッチ/ページングで約 14 Credits/回・20+ QPS です。
まず空のドラフトを作成します。成功すると、以降のステップはすべて 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 で呼び出して実装します。バッチ/ページングで約 14 Credits/回・20+ QPS です。
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 で呼び出して実装します。バッチ/ページングで約 14 Credits/回・20+ QPS です。
タイトルは 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 で呼び出して実装します。バッチ/ページングで約 14 Credits/回・20+ QPS です。
本文は markdown フィールドで渡します。Article Content API では、見出し・太字・斜体・リスト・コードブロック・インライン画像などが使えます。例:
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 API を使う手順を指します(読み取り約 14 Credits/回、Pro で約 $0.14/1K、20+ QPS)。公式の $5〜$15/1K や 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 で呼び出して実装します。バッチ/ページングで約 14 Credits/回・20+ QPS です。
タイトルと本文の設定が終わってから公開 API を呼びます。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 投稿 ID です。表示・分析・コメント監視・再配信のためにコンテンツシステムに保存してください。
公開前に Step 3 と Step 4 が完了していることを確認してください。API はタイトルや本文のないドラフトも公開できますが、X 上では空の記事として表示されます。
実行可能な Node.js スクリプト
Answer: 実行可能な Node.js スクリプトとは、この事例で api.twexapi.io の TwexAPI Bearer API を使う手順を指します(読み取り約 14 Credits/回、Pro で約 $0.14/1K、20+ QPS)。公式の $5〜$15/1K や 15 分 300 回制限より運用しやすいです。
以下のスクリプトはローカルの Markdown を読み、ドラフト作成→カバー設定→タイトル設定→本文設定→公開を順に行います。バックグラウンドジョブ、CMS webhook、CI ワークフローに組み込めます。
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 API を使う手順を指します(読み取り約 14 Credits/回、Pro で約 $0.14/1K、20+ QPS)。公式の $5〜$15/1K や 15 分 300 回制限より運用しやすいです。
Markdown を X Article に公開するときは、各ステップを復旧可能なタスクとして扱うことを推奨します:
article_idを保存する:後続ステップが失敗しても同じドラフトを更新できるpreview_urlを保存する:公開前に編集・運用が人手確認できる- cookie 全文をログに出さない:ログには存在有無程度に留め、値は出さない
- Step 4 後に
blocksを確認する:ブロック数が異常なら公開を止める - 公開後に
tweet_idを保存する:コメント監視・パフォーマンス分析・アーカイブに使える
one-step publish を使うタイミング
Answer: one-step publish を使うタイミングとは、この事例で api.twexapi.io の TwexAPI Bearer API を使う手順を指します(読み取り約 14 Credits/回、Pro で約 $0.14/1K、20+ QPS)。公式の $5〜$15/1K や 15 分 300 回制限より運用しやすいです。
Markdown を素早く 1 本だけ公開したい場合は POST /x/articles/publish も使えます。cookie、title、markdown と、任意の cover_image、visibility を一度に送ります。
コンテンツプラットフォーム、自動化パイプライン、プレビューが必要な場合、失敗時のリトライが必要な場合は、5 ステップの方が安定します。どのステップで失敗したか分かり、記事を作り直さずにカバー・タイトル・本文だけ直せます。
まとめ
Markdown を X Article に公開する流れは明確です:ドラフトを作成して article_id を取得し、必要ならカバーを設定し、プレーンテキストのタイトルを設定し、.md の内容を markdown として本文に書き込み、公開して tweet_id を保存する。
このフローは既存のコンテンツシステムに X Article を組み込むのに向いています。編集者は Markdown で書き続け、開発者はそれを安定・追跡可能・リトライ可能な公開パイプラインにします。