X(Twitter)のポスト本文をログインなしで取得する経路
x.com を直接取得すると HTTP 402 で弾かれる。fxtwitter → vxtwitter → Jina Reader → 検索エンジンのフレーズ一致、の順に落として本文を回収する。
調査時点: 2026-06。各経路の生死は変わりやすいので、以下は当時の実測値として読む。
前提
X の個別ポスト・スレッド・プロフィールは、ログインしていないクライアント(HTTP フェッチツール、LLM の WebFetch など)からは x.com / twitter.com を直接取得できない。2026-06 時点の実測では次の 3 つがすべて失敗した。
| 経路 | 結果 |
|---|---|
https://x.com/<handle>/status/<id> を直接取得 | HTTP 402(常に) |
公式 oEmbed https://publish.x.com/oembed?url=... | HTTP 402 |
Nitter 系(xcancel.com など) | HTTP 503(公開インスタンスが軒並み停止) |
入力の正規化
URL から <handle> と <id> を抜く。対象は https://x.com/<handle>/status/<id> と https://twitter.com/<handle>/status/<id> の 2 形で、? 以降のクエリと /photo/1 のような末尾は捨てる。ハンドルしか分からないときはプロフィール経路(Jina Reader)か検索から入る。
フォールバック順
上から順に試し、取れた時点で止める。
1. fxtwitter(第一選択)
GET https://api.fxtwitter.com/<handle>/status/<id>構造化 JSON が返り、本文(text)・投稿者・engagement(likes / retweets / views)が入る。プロキシ不要で速い。スレッドの親ポスト 1 件ならこれで足りる。
2. vxtwitter(fx の予備)
GET https://api.vxtwitter.com/<handle>/status/<id>fxtwitter のミラー的な存在。fx が空かエラーのときだけ使う。
3. Jina Reader(スレッド全体・プロフィール)
GET https://r.jina.ai/https://x.com/<handle>/status/<id>GET https://r.jina.ai/https://x.com/<handle>JS 描画を通すので、スレッド全文やプロフィールの直近ポスト一覧が取れる。engagement 数値は取りこぼすことがある。無料枠のため混雑時は不安定で、弾かれたら 4 へ。
4. 検索エンジンのフレーズ一致(最終手段)
X の検索結果はページタイトルに本文を埋め込む。これを使って、URL 不明時は site:x.com <handle> <キーワード> で URL を特定し、本文回収は "<ポスト内の特徴的な一文>" の完全一致で引く。短〜中尺のポスト向きで、長文スレッドは末尾が切れる。URL が判明したら 1 に戻って fx で全文を取る。
5. 手貼り
長文スレッド全部、リプライツリーの深部、最新の engagement 数値が必須のときは、本人にポストを開いて本文を貼ってもらうのが最終確実手。推測で埋めない。
注意点
- engagement 数値はどの経路でも古さ・取りこぼしがありうる。数値を出すときは「fx 取得時点」と添える。
- 削除済み・非公開ポストはどの経路でも取れない。全経路で空が続いたら「取得不可(削除/非公開の可能性)」と返す。
- 複数ポストの確認は 1 の取得を並列に投げてよい。
更新履歴
- 2026-06-28: 初版(ローカル調査ノート)
- 2026-10-17: Wiki へ移植、概念ページとして再構成