X Articles API:記事の全文を取得する方法
X Article の本文は、それを共有するポストには入っていません。ポストにあるのは t.co リンクだけなので、API は Article そのものを取得する必要があり、公式 X API ではポストの読み取りとして1,000件あたり$5.00が課金されます。
結論: X Articles は、2024年3月から有料プランの利用者が X で公開している長文ポストです。公式 X API では、tweet.fields=article を付けたポスト取得で1件$0.005で読み取れ、2026年11月22日からは著者1人につき$0.010が加わります。全文・閲覧数・著者を1リクエストで取得するなら、Sorsa API の POST /article を使います。1,000件あたり$1.40からで、100回分の無料リクエストが付きます。
- エンドポイント
POST /article- 1ページの件数
- 1リクエストあたり1 Article
- 料金
- 1,000件あたり$1.40から
#X Article とは何か、なぜそのポストにはリンクしかないのか
X Article は、タイトル、カバー画像、整形された本文(見出し、太字、斜体、リスト、画像、動画、GIF、リンク、埋め込みポスト)を持つ X の長文ポストです。X は2024年3月7日(新しいタブで開きます)に、Premium+ の利用者と認証済み組織向けに Articles を開始しました。
コードを書かずに1件の Article を読んだり保存したりするには、そのリンクを無料の X to Markdown コンバーターに貼り付けてください。タイトル、著者、日付、本文を、コピーやダウンロードできる Markdown で返します。このガイドの残りでは、1件ずつでも何千件でも、コードで Articles を読み取る方法を説明します。
Article を書くには、今も有料プランが必要です。X ヘルプセンター(新しいタブで開きます)には、Premium と Premium+、The X Subscription の Plus・Premium・Super・Ultra の各プラン、Premium Business と Organizations が挙げられています。読むだけなら誰でも可能で、公開された Article は x.com の著者の Articles タブで読めます。ただし、著者が購読者限定にしている場合は除きます。
Article にはリンクが2種類あり、その違いがコードの成否を分けます。
- ポスト。 公開すると、
x.com/<handle>/status/<post ID>に通常のポストが作られます。タイムラインに表示され、リプライやいいねが付きますが、本文は t.co リンクだけです。 - Article。 本文は
x.com/i/article/<Article ID>にあり、ポストとは別の番号です。API はポストを経由して Article を取得するので、ポストのリンクを控えておいてください。
#公式 X API で X Articles は読み取れますか?
はい。公式 X API は、ポスト取得で article フィールドを指定すれば、Article のテキストとエンティティを返します。たとえば GET /2/tweets?ids=<post IDs>&tweet.fields=article です。このフィールドがないと、ポストの text には t.co リンクしか入りません。
X のスタッフは、開発者フォーラムで2026年9月8日に(新しいタブで開きます)この方法を確認しています。Articles には article、280文字を超える長文ポストには note_tweet を使い、単一 ID の取得でも複数 ID の取得でも同じです。X 自身のリファレンス(新しいタブで開きます)は article オブジェクトの型を示していますが、サブフィールドの名前は挙げていません。パーサーを書く前に、実際のレスポンスを確認してください。
Article は1件がポストの読み取りとして課金され、$0.005、つまりX の従量課金の料金表(新しいタブで開きます)で1,000記事あたり$5.00です。2026年11月22日からは、展開(expansions)で返されるオブジェクトも課金対象になります(10月23日の X の通知(新しいタブで開きます))。著者のプロフィールで$0.010、カバー画像で$0.005が加わるため、著者付きの Article は1,000件あたり$15.00です。どの読み取りにも、開発者アカウント、前払いのクレジット、ベアラートークンが必要で、従量課金は月300万ポストの読み取りで上限になります。
書き込みは別の2つのエンドポイントで行います。POST /2/articles/draft(新しいタブで開きます) はタイトルと DraftJS の本文から下書きを作り、POST /2/articles/{article_id}/publish で公開します。どちらも著者の OAuth ユーザートークンが必要です。
#Sorsa API で X Article の全文を取得する
コードで X Articles を読み取るには、Twitter(X)API 兼スクレイピングツールである Sorsa API を使います。POST /article はポストのリンクか ID を受け取り、全文、プレビュー、カバー画像、公開日時、いいね数、リポスト数、リプライ数、引用数、ブックマーク数、閲覧数、著者の完全なプロフィールを1リクエストで返します。Article は1件が1リクエストで、1,000件あたり$1.40からです。全プランで毎秒20リクエスト、API キーは1つだけで、開発者アカウントは不要です。
-
キーを取得する。 サインアップして、ダッシュボードから API キーをコピーします。100回分の無料リクエストで、長さに関係なく100件の Articles を読み取れます。
-
ポストのリンクをコピーする。 Article を共有しているポストの
x.com/<handle>/status/<ID>か、ID だけを使います。どちらのリンクか迷ったら、ここに貼り付けてください。ポストのリンク: これをPOST /articleに送ってください。
- ポストID
- 2112908047021486497
- 投稿日時(IDから読み取り)
- 2026年10月21日 14:05:09 UTC
POST /articleのリクエストボディ{"tweet_link": "https://x.com/harbor_essays_weekly/status/2112908047021486497"}ポストのリンクは、そのままPOST /articleに送れます。x.com/i/article/ のリンクにはArticle自体のIDが入っており、エンドポイントでは受け付けません。
-
リクエストを送る。 ポストのリンクか ID を
tweet_linkとして、API キーをApiKeyヘッダーに付けてPOST /article(新しいタブで開きます) に POST します。ターミナル curl -X POST "https://api.sorsa.io/v3/article" \ -H "ApiKey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tweet_link": "2112908047021486497"}' -
レスポンスを読む。 本文は
full_textにあり、カウンターがその隣に並びます。authorはユーザー系エンドポイントが返すものと同じ完全なプロフィールです。レスポンス200 OK { "full_text": "Seven years ago we met in a laundromat...", "preview_text": "Seven years ago we met in a laundromat", "cover_image_url": "https://pbs.twimg.com/media/HbX2k9WaYAAq3Lm.jpg", "published_at": "2026-10-21T14:05:09Z", "views_count": 88214, "likes_count": 3207, "retweet_count": 410, "reply_count": 96, "quote_count": 58, "bookmark_count": 1120, "author": { "id": "1116267827557806085", "username": "harbor_essays_weekly", "display_name": "Harbor Essays", "description": "Long reads about small clubs and libraries.", "followers_count": 48210, "followings_count": 312, "tweets_count": 2875, "created_at": "2019-04-11T09:12:44Z", "verified": true, "protected": false } }
同じ呼び出しを Python と Node.js で示します。多数のリンクをループ処理する用途にそのまま使えます。
import requests
API = "https://api.sorsa.io/v3"
HEADERS = {"ApiKey": "YOUR_API_KEY"}
def get_article(link):
r = requests.post(f"{API}/article", headers=HEADERS,
json={"tweet_link": link}, timeout=30)
if r.status_code == 404:
return None # the post doesn't share an Article
r.raise_for_status()
return r.json()
art = get_article(
"https://x.com/harbor_essays_weekly/status/2112908047021486497")
words = len(art["full_text"].split())
print(art["author"]["username"], art["published_at"])
print(f"{words:,} words, {art['views_count']:,} views")
404 は、たいていそのポストが Article を共有していないことを意味します。その場合は POST /tweet-info で読み取ってください。403 はキーがない、間違っている、またはリクエストが残っていないことを、429 は1秒間に20リクエストを超えたことを意味するので、1秒待って再試行します。失敗したリクエストに課金されることはありません。
#/article レスポンスの内容
POST /article のレスポンスには11個のフィールドがあります。本文が2つ(全文と冒頭部分)、カバー、公開日時、6つのカウンター、著者です。以下はすべて、最新の API リファレンスに基づいています。
| フィールド | 内容 |
|---|---|
full_text | 長さを問わない、プレーンテキストの本文全体 |
preview_text | 「続きを読む」の前に X が表示する冒頭の数行 |
cover_image_url | カバー画像へのリンク(著者が未設定なら null) |
published_at | Article の公開日時(ISO 8601 形式) |
views_count | 閲覧数(インプレッション) |
likes_count, retweet_count, reply_count, quote_count, bookmark_count | いいね、リポスト、リプライ、引用、ブックマークの数 |
author | 著者の完全なプロフィール(ID、ハンドル、名前、自己紹介、フォロワー数、フォロー数、ポスト数、登録日、認証状況) |
full_text- 内容
- 長さを問わない、プレーンテキストの本文全体
preview_text- 内容
- 「続きを読む」の前に X が表示する冒頭の数行
cover_image_url- 内容
- カバー画像へのリンク(著者が未設定なら null)
published_at- 内容
- Article の公開日時(ISO 8601 形式)
views_count- 内容
- 閲覧数(インプレッション)
likes_count,retweet_count,reply_count,quote_count,bookmark_count- 内容
- いいね、リポスト、リプライ、引用、ブックマークの数
author- 内容
- 著者の完全なプロフィール(ID、ハンドル、名前、自己紹介、フォロワー数、フォロー数、ポスト数、登録日、認証状況)
カウンターはリクエスト時点の値なので、1週間後にもう一度呼び出せば、Article がその後どれだけ広まったかがわかります。Article へのリプライを読むには、X のリプライを見る方法を参照してください。リプライは、ほかのポストと同じく共有元のポストに付いています。
知っておきたいこと
閲覧数は、Article では
views_count、ツイートではview_countとして返ります。Articles とツイートを1つのテーブルに入れる場合は、読み込み時にこのキー名を揃えてください。そうしないと、どちらかの列が空のままになります。
#アカウントが公開したすべての Article を探す
アカウントの Articles を一覧するには、X の url: コマンドでそのアカウントのポストから x.com/i/article へのリンクを検索し、一致した各ポストを POST /article で読み取ります。検索には POST /search-tweets(新しいタブで開きます) を使います。1リクエストで約20ポストを返し、next_cursor が空で返るまで次のページを指します。
import requests
API = "https://api.sorsa.io/v3"
HEADERS = {"ApiKey": "YOUR_API_KEY"}
def article_posts(handle):
query = f"from:{handle} url:x.com/i/article"
body = {"query": query, "order": "latest"}
while True:
r = requests.post(f"{API}/search-tweets", headers=HEADERS,
json=body, timeout=30)
r.raise_for_status()
page = r.json()
for tweet in page.get("tweets", []):
yield tweet["id"]
if not page.get("next_cursor"):
break
body["next_cursor"] = page["next_cursor"]
for post_id in article_posts("harbor_essays_weekly"):
r = requests.post(f"{API}/article", headers=HEADERS,
json={"tweet_link": post_id}, timeout=30)
if r.ok:
print(post_id, r.json()["views_count"])
クエリに since:2026-01-01 や min_faves:100 を加えると、最近の Articles や人気の Articles だけに絞れます。コマンドの全一覧は、Twitter 検索コマンドのガイドにあります。from: をキーワードに替えれば、同じクエリでそのトピックについて誰が書いた Articles も見つかります。一致したポストが、他人の Article を共有しただけのアカウントのものである場合もあります。その場合は、各 POST /article レスポンスの author.username をハンドルと比べて、本人の Articles だけに絞ってください。
#X Article を Markdown として保存する
Article が1件だけなら、このガイドの冒頭で紹介したコンバーターが最も手早い方法です。まとめて処理するなら、各 POST /article レスポンスを、重要な情報をヘッダーに入れた Markdown ファイルとして1件ずつ書き出します。
from pathlib import Path
def save_markdown(art, post_link, folder="articles"):
a = art["author"]
head = [
f"# @{a['username']}, {art['published_at'][:10]}",
"",
f"Source: {post_link}",
f"Author: {a['display_name']} ({a['followers_count']:,} followers)",
f"Views: {art['views_count']:,} Likes: {art['likes_count']:,}",
"",
]
if art.get("cover_image_url"):
head += [f"", ""]
path = Path(folder) / f"{post_link.rstrip('/').split('/')[-1]}.md"
path.parent.mkdir(exist_ok=True)
path.write_text("\n".join(head) + art["full_text"] + "\n",
encoding="utf-8")
return path
Markdown はどのエディターでも開け、きれいに印刷でき、そのまま ChatGPT や Claude、検索インデックスに渡せます。要約、リサーチノート、言語モデル用のデータセットに使えます。画像は X のサーバーへのリンクのままなので、永続的なコピーが必要なら、カバー画像を自分でダウンロードしてください。
各ファイルの名前はポスト ID なので、ジョブを再実行しても、コピーが増えずにファイルが更新されます。ヘッダーには出典リンク、著者、カウンターがテキストと一緒に残るため、Article を引用したり、後で2件を比較したりするときに役立ちます。1件の Article を印刷するには、そのファイルを Markdown エディターで開いて印刷してください。レイアウトがシンプルなので、紙でも読みやすく仕上がります。
#X Articles を1,000件読み取るコスト
Sorsa API なら、著者のプロフィール付きで X Articles を1,000件あたり$1.40から読み取れます。公式 X API はポストだけで$5.00、2026年11月22日からは著者のプロフィール付きで$15.00かかります。
公式 X API
$150
1万 記事の場合
著者付きで1 Article あたり$0.015、2026年11月22日から
Sorsa API
$14から
1万 記事の場合
1,000件あたり$1.40から、著者を含む
10分の1のコスト
Sorsa API では、Article は長さに関係なく1件が1リクエストです。6,000語のエッセイも500語のメモも同じ料金になります。1つのキーで毎秒20リクエストなら、所要時間は件数に比例して増えます。
| Articles | Sorsa API(から) | 公式 X API(ポストのみ) | 公式 X API(著者付き、2026年11月22日から) | Sorsa API の所要時間(毎秒20リクエスト) |
|---|---|---|---|---|
| 1,000 | $1.40 | $5.00 | $15.00 | 約1分 |
| 1万 | $14 | $50 | $150 | 約8分 |
| 10万 | $140 | $500 | $1,500 | 約1.4時間 |
| 100万 | $1,400 | $5,000 | $15,000 | 約14時間 |
1,000
- Sorsa API(から)
- $1.40
- 公式 X API(ポストのみ)
- $5.00
- 公式 X API(著者付き、2026年11月22日から)
- $15.00
- Sorsa API の所要時間(毎秒20リクエスト)
- 約1分
1万
- Sorsa API(から)
- $14
- 公式 X API(ポストのみ)
- $50
- 公式 X API(著者付き、2026年11月22日から)
- $150
- Sorsa API の所要時間(毎秒20リクエスト)
- 約8分
10万
- Sorsa API(から)
- $140
- 公式 X API(ポストのみ)
- $500
- 公式 X API(著者付き、2026年11月22日から)
- $1,500
- Sorsa API の所要時間(毎秒20リクエスト)
- 約1.4時間
100万
- Sorsa API(から)
- $1,400
- 公式 X API(ポストのみ)
- $5,000
- 公式 X API(著者付き、2026年11月22日から)
- $15,000
- Sorsa API の所要時間(毎秒20リクエスト)
- 約14時間
Articles を見つける検索には、追加のリクエストがかかります。約20ポストごとのページ1つにつき1リクエストです。アカウントの Articles を週に1回取得する場合、1アカウントあたりのリクエストは数回で済みます。Articles を使った分析については、Twitter アナリティクス APIのガイドで説明しています。
#今日から X Articles を読み取る
Article を1件選び、それを共有しているポストのリンクをコピーして POST /article に送ってください。テキスト、カウンター、著者が1つの JSON オブジェクトで返ります。Sorsa API なら、著者込みで1,000件あたり$1.40からの料金、毎秒20リクエスト、開発者アカウント不要で、ご自身の X アカウントにリスクもありません。100回分の無料リクエストで、最初の100件の Articles を読み取れます。
#よくある質問
X Articles を読み取るには、どの API を使えばよいですか?
Sorsa API の POST /article を使います。1リクエストで、Article の全文、カバー、公開日、閲覧数、いいね数、リポスト数、ブックマーク数、著者のプロフィールが返り、料金は1,000件あたり$1.40からです。公式 X API では、2026年11月22日から著者付きの Article が1,000件あたり$15.00になり、開発者アカウントも必要です。Sorsa API に必要なのは API キー1つで、全プラン毎秒20リクエストで動作します。
X Article はダウンロードできますか?
はい。Article のポストのリンクを、Sorsa API の無料の X to Markdown コンバーターに貼り付けて、結果をコピーまたはダウンロードしてください。タイトル、著者、日付、本文が Markdown ファイルになります。多数の Articles なら、上で示したように、各 POST /article レスポンスをコードで .md ファイルに保存します。画像はリンクのままなので、残したいものは自分でダウンロードしてください。
X Articles を公開できるのは誰ですか。API からも投稿できますか?
公開には有料プランが必要です。X Premium か Premium+、The X Subscription の Plus・Premium・Super・Ultra の各プラン、または Premium Business か Organizations です。コードからは、公式 X API が著者の OAuth トークンで POST /2/articles/draft と POST /2/articles/{article_id}/publish を通じて公開します。Sorsa API は設計上、読み取り専用で、X アカウントには一切触れません。投稿もする場合は、公式 X API と組み合わせてください。
過去に公開された X Articles も読み取れますか?
はい。2024年3月7日の開始以降の公開 Article は、著者が削除したか購読者限定にした場合を除き、ポストのリンクか ID を指定して POST /article で取得できます。古い Articles を探すには、url:x.com/i/article の検索に since: と until: の日付を加え、検索結果の各ポストを読み取ります。
X Articles を1,000件読み取るといくらかかりますか?
Sorsa API では1,000件あたり$1.40からです。Article は長さに関係なく1件が1リクエストで、著者のプロフィールも含まれ、失敗したリクエストは無料です。公式 X API は、ポストの読み取りで1,000件あたり$5.00、2026年11月22日からは著者のプロフィール付きで$15.00を課金します。Sorsa API の100回分の無料リクエストで、最初の100件の Articles を無料で読み取れます。
#本ガイドの調査と検証の方法
2026年11月2日に、POST /article と POST /search-tweets の最新の Sorsa API リファレンスを、X のポスト取得リファレンス、従量課金の料金表、展開に関する10月23日の通知と照合しました。あわせて、Articles に関する X ヘルプセンターのページ、2024年3月7日の X の開始告知、tweet.fields で Articles を読み取ることについての2026年9月8日の X スタッフの回答も確認しています。このページのリクエストとレスポンスは、デモアカウントを使って API リファレンスから作成したものです。今回の更新では、実在の Article に対しては実行していません。
出典
- About Articles, X Help Center(新しいタブで開きます)
- Articles on X are now live, X News, March 7, 2024(新しいタブで開きます)
- Which tweet.fields return an Article's body, X Developer Community, September 8, 2026(新しいタブで開きます)
- Get Post by ID, X API reference(新しいタブで開きます)
- Articles endpoints, X API documentation(新しいタブで開きます)
- X API pay-per-usage pricing(新しいタブで開きます)
- X API PPU expansions update, October 23, 2026(新しいタブで開きます)
- Article Data, Sorsa API reference(新しいタブで開きます)
- X Articles, Sorsa API docs(新しいタブで開きます)