2026年6月公開。2026年7月6日更新:100回分の無料リクエストの開始オプションを追加し、Sorsa の料金を1,000件あたりのバッチレートに刷新しました。X の現行の従量課金の料金(2026年4月の書き込みコストの変更を含む)と、X が公式 SDK を PHP ではなく Python と TypeScript にのみ出荷している PHP ツールの状態を反映しています。
要点: 2026年に PHP 向けの公式 X(Twitter)API SDK はありません。X は公式 SDK を Python と TypeScript にのみ出荷しています。PHP での実用的な経路は、twitteroauth のようなコミュニティライブラリ、ベアラートークンでの素の cURL または Guzzle、あるいは読み取り専用のサードパーティ REST API です。
「twitter api php」を検索して公式のサポートされたパッケージを期待していたなら、それは存在しません。X は2025年後半に Python と TypeScript 向けのファーストパーティ SDK を出荷し、PHP はコミュニティに委ねました。このクエリでランキング上位にあるほとんどの PHP チュートリアルは、OAuth を通じた投稿を教えるか、X が廃止した古い v1.1エンドポイントを、もう存在しない料金に対して使います。
当社は代替の Twitter/X API である Sorsa API をビルドして運用しており、読み取り専用の経路は PHP にきれいに合います。json_decode が素の配列に変える JSON として、ApiKey ヘッダーの中の1つの API キーで、OAuth フローも、待つべき開発者アカウントの承認もなく、プロフィール、ツイート、検索結果、フォロワーを返します。読み取りの多い作業では、公式 X API の最大50分の1の安さで動き、すべてのプランで一律の毎秒20リクエストを保ち、バッチエンドポイントで1,000ツイートあたり$0.02、1,000プロフィールあたり$0.01になり、10,000リクエストで月額$49からのフラットなプランです。100回分の無料リクエストで始められ、クレジットカード不要で、40個のエンドポイントすべてをカバーします。どのプロジェクトもその型に合うわけではありません。投稿が必要なものもあれば、コンプライアンスのために公式 API が必要なものもあります。本ガイドは、動作するコード(cURL、Guzzle、WordPress)、現行の料金、そしてページネーションしてリトライするコレクターとともに、すべての PHP の経路を扱います。コードを書かずに呼び出しをテストすることも playground でできます。
目次
- 何が変わったか:2026年の X API と PHP のツール
- X API に最適な PHP ライブラリ
- どのアプローチを使うべきか?
- 方法1:コミュニティライブラリ(twitteroauth)
- 方法2:ベアラートークンでの素の cURL または Guzzle
- 方法3:読み取り専用の REST API
- X API 向けの公式 PHP SDK はある?
- WordPress から X API を呼ぶ
- PHP でデータコレクターを作る
- 比較:3つの経路を並べて
- API 認証情報の取得方法
- 実践:PHP 連携のコストを削る
- よくある質問
- 始め方
何が変わったか:2026年の X API と PHP のツール {#what-changed-the-x-api-and-php-tooling-in-2026}
古いチュートリアルが書かれて以来、PHP 開発者にとって3つのことが変わりました。X API は無料枠のない従量課金に移り、リソースの読み取り単位で課金します。書き込みは2026年4月の更新後により高くなりました。そして X は最初の公式 SDK を出荷しましたが、Python と TypeScript 向けだけなので、PHP 開発者は依然としてコミュニティライブラリか素の HTTP に頼ります。
従量課金がデフォルト。 新規登録に無料枠も月次の Basic プランもありません。クレジットを買い、リソース単位で支払います。投稿の読み取りあたり$0.005、ユーザープロフィールあたり$0.010、フォロワーまたはフォロー中のレコードあたり$0.010です。自分のアカウントのデータの読み取りはリソースあたり$0.001で、標準アカウントは月間200万投稿読み取りに制限されます。実際の予算の背後にある数字は、X API 料金の内訳 と なぜ X API の料金が上がったか の解説にあります。
書き込みはより高くなった。 2026年4月の更新後、標準の投稿はリクエストあたり$0.015、URL を含む投稿は$0.20かかります。フォロー、いいね、引用投稿のアクションはセルフサーブの層から引き上げられ、今は Enterprise 契約を必要とします。
公式 SDK は Python と TypeScript のみに登場した。 2025年後半、X はその2つの言語向けにファーストパーティ SDK を発表しました。公式 PHP SDK はありません。コミュニティライブラリがギャップを埋め、最も広く使われているのは、API バージョンを設定すれば v2エンドポイントをサポートする twitteroauth のままです。
オンラインのほとんどの PHP の例は古い。 大きな割合が、X が廃止した statuses/update や search/tweets のような v1.1 の呼び出しを教えるか、投稿だけに焦点を当てています。v2 を通じた公開データの読み取りは異なる経路で、それが本ガイドの取る経路です。
X API に最適な PHP ライブラリ {#the-best-php-library-for-the-x-api}
ほとんどの PHP プロジェクトには、twitteroauth がいまだにデフォルトです。最も広く使われている PHP クライアントで、Composer 経由でインストールし、setApiVersion('2') と汎用の get・post 呼び出しで v2エンドポイントに到達します。メンテナンスモード(新機能の開発なし)ですが、動きます。v2 ネイティブのラッパーには、twitter-api-v2-php や bird-elephant のようなコミュニティパッケージが v2 API を直接対象とします。読み取り専用のデータ収集には、多くのチームがライブラリを飛ばして、素の cURL または Guzzle でサードパーティの REST API を呼び、OAuth を完全に取り除きます。
主要な選択肢の比較は次のとおりです。
| ライブラリ / ツール | API バージョン | 最適な用途 | 備考 |
|---|---|---|---|
| twitteroauth | v1.1 と v2 | ほとんどのプロジェクト、最も広い利用 | Composer でインストール。setApiVersion と汎用の get/post で v2 に到達。メンテナンスモードだが機能する。 |
| twitter-api-v2-php | v2 | モダンな v2 ネイティブのアクセス | v2エンドポイントに焦点を当てたラッパー。twitteroauth より小さいコミュニティ。 |
| bird-elephant | v2 | v2エンドポイントのカバレッジ | v2 API 向けのコミュニティ PHP クライアント。 |
| cURL または Guzzle(ラッパーなし) | 任意 | 最小限の依存、完全な制御 | リクエストとページネーションを自分で作る。サードパーティ API とよく合う。 |
| 読み取り専用の REST API | 該当なし | 読み取りの多いデータ収集 | ヘッダーの中の1つのキー、OAuth なし、フラットなリクエスト単位の課金。読み取り専用。 |
公式 API にどのライブラリを選んでも、X が自身の側でライブラリ単位ではなくリソース単位で課金するため、コストは同じです。制御できる変数は何件のリソースを取得するかで、そこがバッチエンドポイントとフラットレートの API が計算を変えるところです。
どのアプローチを使うべきか? {#which-approach-should-you-use}
コードを書く前に経路を選びます。最も一般的なライブラリで v2 API に対して読み書きするには、twitteroauth を使います。最小限のセットアップで量のある読み取り専用データには、サードパーティの REST API が OAuth と審査待ちの行列を取り除きます。ラッパーなしの完全な制御には、素の cURL または Guzzle で十分です。決定はほぼ、読み取り対書き込みと、どれだけの量を取得するかです。
| 必要なもの… | 使うもの… |
|---|---|
| 人気のライブラリでの読み書き | twitteroauth |
| 規模のある読み取り専用データ、最小限のセットアップ | 読み取り専用のサードパーティ REST API |
| 完全な制御、ラッパーなし | ベアラートークンでの素の cURL または Guzzle |
| 投稿、いいね、またはフォロー | twitteroauth または公式 API(OAuth 必須) |
プロジェクトが公開データを読むだけなら、サードパーティ API が OAuth フローを取り除きます。ヘッダーの中の1つのキーで、開発者アカウントの申請もクレジットの購入もなく、データの取得を始められます。投稿や書き込みアクションが必要なら、twitteroauth を通じた公式 API が経路です。ユーザーの代わりに投稿するサードパーティのプロバイダーはありません。別の言語で作業していますか。本ガイドの Python 版 をご覧ください。
方法1:コミュニティライブラリ(twitteroauth) {#method-1-a-community-library-twitteroauth}
twitteroauth は、X API 向けの最も広く使われている PHP クライアントです。Composer 経由でインストールし、認証を扱い、setApiVersion('2') を呼べば v2エンドポイントに到達します。公開データの読み取りには、アプリケーション専用のベアラートークンで十分です。
インストールします。
composer require abraham/twitteroauth
アプリ専用の接続を作り、直近7日間を検索します。
<?php
require 'vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
// App-only auth: API key, API secret, null, bearer token
$connection = new TwitterOAuth(
getenv('X_API_KEY'),
getenv('X_API_SECRET'),
null,
getenv('X_API_BEARER_TOKEN')
);
$connection->setApiVersion('2');
$tweets = $connection->get('tweets/search/recent', [
'query' => 'php lang:en',
'max_results' => 20,
'tweet.fields' => 'created_at,public_metrics',
]);
foreach ($tweets->data as $tweet) {
echo $tweet->text . "\n";
}
同じ汎用の get 呼び出しでプロフィールを照会します。
$user = $connection->get('users/by/username/elonmusk', [
'user.fields' => 'public_metrics,created_at',
]);
printf(
"@%s has %d followers\n",
$user->data->username,
$user->data->public_metrics->followers_count
);
twitteroauth はデコードされたオブジェクトを返すため、ツイートのテキストは $tweet->text、プロフィールの指標は $user->data->public_metrics です。同じ get と post のメソッドは、フォロワー(users/:id/followers)やタイムライン(users/:id/tweets)を含む任意の v2エンドポイントに、パスで到達します。最も文書化された PHP の選択肢が欲しく、書き込みもするかもしれないときの正しい選択です。トレードオフは、活発に開発されるのではなくメンテナンスモードであること、依然として有料の X 開発者アカウントが必要なこと、そしてすべての呼び出しで X のリソース単位の料金を支払うことです。
方法2:ベアラートークンでの素の cURL または Guzzle {#method-2-plain-curl-or-guzzle-with-a-bearer-token}
ライブラリもラッパーもありません。PHP の組み込みの cURL 拡張、または Guzzle HTTP クライアントは、Authorization ヘッダーの中のベアラートークンで X API v2 を直接呼べます。この経路は、リクエストの完全な制御が欲しい開発者や、Twitter 固有の依存を避けたい人に向いています。
cURL でプロフィールを照会します。
<?php
$ch = curl_init('https://api.x.com/2/users/by/username/elonmusk?user.fields=public_metrics');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . getenv('X_API_BEARER_TOKEN'),
]);
$response = curl_exec($ch);
curl_close($ch);
$user = json_decode($response, true);
printf(
"@%s has %d followers\n",
$user['data']['username'],
$user['data']['public_metrics']['followers_count']
);
公式 API はレスポンスの meta の中の next_token で検索をページネーションします。幅広いクエリがクォータを使い果たさないようにガードを付けて、すべての結果をページネーションします。
<?php
function searchRecent(string $token, string $query, int $maxPages = 10): array
{
$all = [];
$nextToken = null;
$pages = 0;
do {
$params = [
'query' => $query,
'max_results' => 100,
'tweet.fields' => 'created_at,public_metrics',
];
if ($nextToken) {
$params['next_token'] = $nextToken;
}
$url = 'https://api.x.com/2/tweets/search/recent?' . http_build_query($params);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $token]);
$response = curl_exec($ch);
curl_close($ch);
$body = json_decode($response, true);
$all = array_merge($all, $body['data'] ?? []);
$nextToken = $body['meta']['next_token'] ?? null;
$pages++;
} while ($nextToken && $pages < $maxPages);
return $all;
}
これは、最小限の依存が欲しいときや、API の挙動をデバッグしているときに動きます。欠点は、ページネーション、ステータスコードの処理、レート制限、リトライを自分で所有することです。単発のスクリプトにはそれで問題ありませんが、本番の連携には、結局小さなクライアントを書くことになります。この経路も開発者アカウントと従量課金クレジットを必要とします。
方法3:読み取り専用の REST API {#method-3-a-read-only-rest-api}
PHP アプリケーションが公開の Twitter データを読むだけなら、サードパーティの REST API が公式 API を完全に飛ばします。OAuth も、申請のステップも、クレジット購入のワークフローもなく、ヘッダーの中の1つのキーと、配列にまっすぐデコードされる JSON だけです。
これが 開発者アカウントなしで X データを取得する 実用的な経路です。cURL だけを使った Sorsa での見え方は次のとおりです。
ユーザープロフィールを取得します。
<?php
$ch = curl_init('https://api.sorsa.io/v3/info?username=elonmusk');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['ApiKey: ' . getenv('SORSA_API_KEY')]);
$response = curl_exec($ch);
curl_close($ch);
$user = json_decode($response, true);
echo "@{$user['username']} ({$user['display_name']}): {$user['followers_count']} followers\n";
完全なウェブのコマンドセットでツイートを検索します。検索エンドポイントは1ページあたり約20ツイートと、次のページ用の next_cursor を返します。
<?php
$ch = curl_init('https://api.sorsa.io/v3/search-tweets');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'ApiKey: ' . getenv('SORSA_API_KEY'),
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'query' => 'php lang:en',
'order' => 'latest',
]));
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
foreach ($data['tweets'] as $tweet) {
echo "{$tweet['likes_count']} likes: {$tweet['full_text']}\n";
}
フォロワーリストを取得します。1回のリクエストが最大200件のプロフィールを返すため、1,000フォロワーのアカウントは、ページネーションの10ページではなく5リクエストです。
<?php
$ch = curl_init('https://api.sorsa.io/v3/followers?username=elonmusk');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['ApiKey: ' . getenv('SORSA_API_KEY')]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
echo 'Got ' . count($data['users']) . " followers in one request\n";
プロジェクトがすでに Guzzle を使っているなら、同じ呼び出しはより短いです。バルクエンドポイントで最大100ツイートを1回のリクエストで取得します。これは1リクエストと数え、完全なツイートオブジェクトを返します。
<?php
$client = new GuzzleHttp\Client();
$res = $client->post('https://api.sorsa.io/v3/tweet-info-bulk', [
'headers' => ['ApiKey' => getenv('SORSA_API_KEY')],
'json' => ['tweet_links' => ['1782368585664626774', '1782368585664626775']],
]);
$data = json_decode((string) $res->getBody(), true);
複雑なクエリには、高度な検索と同じ方法でコマンドを組み合わせます。完全なリストは 検索コマンドのリファレンス にあり、エンドポイントは 完全なツイートアーカイブ に遡って到達します。すべてのツイートレスポンスは作者プロフィールと公開指標を運ぶため、エンゲージメントの数字を取得したり フォロワーリストを取得したり することに追加の呼び出しはかかりません。ヘッダーは ApiKey、ベース URL は https://api.sorsa.io/v3、そしてフィールド名は API ドキュメント に正確に一致します。
X API 向けの公式 PHP SDK はある? {#is-there-an-official-php-sdk-for-the-x-api}
いいえ。2026年時点で X は公式 SDK を Python と TypeScript にのみ公開しており、公式 PHP SDK はありません。X 自身のツールとライブラリのページは、その2つのファーストパーティ SDK と開発者ツールを列挙しており、そのオープンソースの SDK ジェネレーターは現在、Python と TypeScript 向けのテンプレートのみを出荷しています。
PHP には、それが上で扱った選択肢を残します。最も広く使われるクライアントとしての twitteroauth(setApiVersion 経由の v2)、twitter-api-v2-php や bird-elephant のような v2 ネイティブのコミュニティパッケージ、完全な制御のための素の cURL または Guzzle、あるいは読み取りの多い作業のための読み取り専用のサードパーティ API です。これらより優先すべきファーストパーティのパッケージはなく、twitteroauth 自身がメンテナンスモードなので、選ぶときは長期のメンテナンスを比較検討してください。
PHP SDK がいつか登場するとしても、それは Python と TypeScript のものと同じ OpenAPI 仕様から生成される可能性が高いでしょう。それまでは、「公式 PHP SDK」を主張するどのチュートリアルも不正確として扱ってください。
WordPress から X API を呼ぶ {#calling-the-x-api-from-wordpress}
X API に触れる PHP の大きな割合が WordPress の中で動き、プラグインも外部ライブラリも必要ありません。WordPress は自身の HTTP API を出荷するため、wp_remote_get が任意の REST エンドポイントを呼び、認証ヘッダーを直接渡せます。読み取り専用のデータには、それは1つの関数で OAuth なしを意味します。
<?php
// In a theme's functions.php or a small plugin
$response = wp_remote_get('https://api.sorsa.io/v3/info?username=elonmusk', [
'headers' => ['ApiKey' => getenv('SORSA_API_KEY')],
'timeout' => 15,
]);
if (is_wp_error($response)) {
return;
}
$user = json_decode(wp_remote_retrieve_body($response), true);
echo esc_html("@{$user['username']}: {$user['followers_count']} followers");
同じパターンは、URL を入れ替え、ApiKey ヘッダーの代わりにベアラートークンを持つ Authorization ヘッダーを使えば、公式 API に対しても動きます。結果を WordPress の Transients API(set_transient)でキャッシュして、ページの読み込みが表示ごとに API に当たらないようにします。それはページを高速化し、リクエスト量も抑えます。フォロワー数や最近のツイートのブロックのような読み取り専用のウィジェットには、これが連携のすべてです。
PHP でデータコレクターを作る {#building-a-data-collector-in-php}
本番のコレクターは、単一の呼び出しを超えて3つのものを必要とします。最初のページを超えて進むカーソルページネーション、幅広いクエリがクォータを使い果たさないためのページガード、そしてレート制限でのリトライです。以下は、検索エンドポイントに対する完全な読み取り専用コレクターで、next_cursor でページネーションし、429 でバックオフします。
<?php
function collectTweets(string $apiKey, string $query, int $maxPages = 20): array
{
$collected = [];
$cursor = null;
$pages = 0;
while ($pages < $maxPages) {
$payload = ['query' => $query, 'order' => 'latest'];
if ($cursor) {
$payload['next_cursor'] = $cursor;
}
$ch = curl_init('https://api.sorsa.io/v3/search-tweets');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'ApiKey: ' . $apiKey,
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Flat 20 requests per second limit: on a 429, wait a second and retry
if ($status === 429) {
sleep(1);
continue;
}
$data = json_decode($response, true);
$collected = array_merge($collected, $data['tweets'] ?? []);
$cursor = $data['next_cursor'] ?? null;
$pages++;
if (!$cursor) {
break;
}
}
return $collected;
}
Sorsa 側でコレクターを作り直したとき、フラットな毎秒の制限は、エンドポイント別の窓よりもペース配分が簡単だと分かりました。エンドポイントごとのリセットのタイムスタンプを追う代わりに、429 で1秒待ちます。カーソルの仕組みは ページネーションガイド で、公式側は X API レート制限 のリファレンスで扱っています。並行の読み取りが必要なら、Guzzle のプールが、制限内に留まるように並行度を抑えつつ、複数のリクエストを一度に実行させます。同じループは、エンドポイントとペイロードを変えるだけで /user-tweets や /followers に入れ替わります。
比較:3つの経路を並べて {#comparison-three-routes-side-by-side}
3つの PHP の経路は2つの軸で分かれます。書き込めるかどうかと、どう課金されるかです。両方の公式 API の経路は開発者アカウントを必要とし、リソース単位で課金します。読み取り専用の API は、書き込みアクセスを、単一のキーとフラットなリクエスト単位の課金と引き換えにします。
| 経路 | セットアップ | 認証 | 読み取り | 書き込み | 課金 |
|---|---|---|---|---|---|
| twitteroauth(コミュニティライブラリ) | 開発者アカウント、クレジット | ベアラー / OAuth | あり | あり | リソース単位 |
| 素の cURL または Guzzle | 開発者アカウント、クレジット | ベアラー / OAuth | あり | あり | リソース単位 |
| 読み取り専用の REST API | API キー、約3分 | 単一の ApiKey ヘッダー | あり | なし(読み取り専用) | フラットなリクエスト単位 |
この分かれ方が、どれを選ぶべきかを教えます。投稿や書き込みアクションの実行が必要なら、それは twitteroauth を通じた公式 API の領分です。フラットで予測しやすい価格での読み取りの多いアクセスには、読み取り専用の API が安く単純な経路で、同じ公開データを返します。
読み取りのコスト差は課金単位から来ます。公式 API はレスポンスの中のすべての投稿とすべての作者プロフィールに課金します。フラットレートの API は、何件の項目を返そうと1リクエストに課金します。
| ワークロード | 公式 X API | 読み取り専用 API(Sorsa Pro) |
|---|---|---|
| 20ツイートを返す検索、作者データ込み | $0.30(20 × $0.005に20 × $0.010を加算) | 1リクエスト、約$0.002(作者込み) |
| 1,000件のフォロワープロフィール | 約$10(プロフィール単位) | 約$0.01(1ページ200件で5リクエスト) |
| ID による100ツイート、作者データ込み | $1.50(100 × $0.005に100 × $0.010を加算) | 1リクエスト、約$0.002(バルクエンドポイント) |
| 月次上限 | 200万投稿読み取り | プランによる(10,000〜500,000リクエスト) |
| レート制限 | 15分あたり300〜900(変動) | 毎秒20リクエスト、フラット |
読み取りの多い作業には、リソース単位のモデルは単純な仕事をする高価な方法で、それが、月およそ10,000読み取りを越えるとフラットなリクエスト単位のレートが勝つ理由です。書き込みは例外です。投稿と DM は公式 API にのみあるため、書き込みの多い連携は、読み取りコストにかかわらずそこに属します。
API 認証情報の取得方法 {#how-to-get-your-api-credentials}
公式 API には、developer.x.com で開発者アカウントを作り、開発者規約に同意し、ユースケースを記述し、Project と App を作って API キー、API シークレット、ベアラートークンを生成します。無料枠がないため、最初の呼び出しの前にクレジットを買います。読み取り専用のサードパーティ API には、サインアップし、キーを生成し、それをヘッダーで渡します。申請も承認のステップもありません。
どちらの認証情報も、ソースの中ではなく環境から読みます。
# .env or your server environment
X_API_KEY=your-x-api-key
X_API_SECRET=your-x-api-secret
X_API_BEARER_TOKEN=your-x-bearer-token
SORSA_API_KEY=your-sorsa-api-key
PHP では、上で示したように getenv でそれらを読むか、開発では vlucas/phpdotenv のようなパッケージで .env ファイルを読み込みます。既存の公式 API のコードを移植しているなら、移行ガイド が公式のエンドポイントとフィールド名をそのフラットレートの相当物に対応付けるため、ロジックを書き直さずにトランスポートを変えられます。
実践:PHP 連携のコストを削る {#in-practice-cutting-the-cost-of-a-php-integration}
およそ12人のエージェンシーが、公式 API 上で twitteroauth を通じて追跡アカウントのデータを取得する WordPress ベースのクライアントダッシュボードを動かして相談に来ました。コードは動いていましたが、すべてのダッシュボードの更新が投稿の読み取りと作者プロフィールごとに支払い、OAuth トークンの処理が可動部を加え、月間200万投稿読み取りの上限が、クライアントをオンボードするにつれて量を見張らせました。
修正は書き直しではなく、トランスポートの入れ替えでした。WordPress 側とレンダリングを保ち、リクエストを検索と /followers のエンドポイントに向け、OAuth を、wp_remote_get を通じて読む単一の ApiKey ヘッダーに落としました。各リクエストが、リソース単位で課金する代わりに最大20ツイートまたは200フォロワープロフィールを返すため、同じ更新が以前の何分の1か、読み取りの多い部分で最大50分の1のコストになり、そして毎秒の制限が、ペースを配分すべき唯一のものとして月次上限に取って代わりました。レスポンスを transients でキャッシュしたため、ほとんどのページの読み込みは API にまったく当たりませんでした。読み取り専用のワークロードには、リソース単位のモデルは単純な仕事をする高価な方法だったのです。
よくある質問 {#faq}
PHP 向けの公式 X(Twitter)API SDK はある?
いいえ。2026年時点で X は公式 SDK を Python と TypeScript にのみ公開しており、公式 PHP SDK はありません。最も広く使われる PHP クライアントは twitteroauth で、setApiVersion と汎用の get・post メソッドを通じて v2エンドポイントに到達しますが、メンテナンスモードです。twitter-api-v2-php や bird-elephant のような新しい v2 ネイティブのコミュニティパッケージも存在するため、どの「公式 PHP SDK」の主張も不正確として扱ってください。
Twitter API に最適な PHP ライブラリは?
ほとんどのプロジェクトには、twitteroauth が実用的なデフォルトです。最も広く使われる PHP クライアントで、Composer 経由でインストールし、API バージョンを設定すれば v2 をサポートしますが、メンテナンスモードです。v2 ネイティブのコードには、twitter-api-v2-php と bird-elephant が v2エンドポイントを直接対象とします。量のある読み取り専用データには、多くの PHP チームがライブラリを飛ばして、素の cURL または Guzzle でサードパーティの REST API を呼びます。
開発者アカウントなしで PHP でツイートをどう取得する?
読み取り専用のサードパーティ REST API を呼びます。Sorsa では、サインアップし、API キーを取得し、それを ApiKey ヘッダーで渡し、cURL または Guzzle のリクエストを送ります。json_decode がレスポンスを素の配列に変えます。OAuth フローも、アプリ審査も、クレジット購入もなく、各ツイートレスポンスは作者プロフィールと公開指標を含むため、1回のリクエストが完全なデータを返します。
2026年に PHP アプリで X API はいくらかかる?
公式 X API ではリソース単位で支払います。投稿の読み取りあたり$0.005、ユーザープロフィールあたり$0.010、標準の投稿あたり$0.015、URL 付きの投稿は$0.20で、月間200万投稿読み取りの上限があります。20ツイートを返す検索は、作者プロフィールを含めると$0.30かかります。Sorsa はリクエスト単位で課金し、それはバッチエンドポイントで1,000ツイートあたり$0.02、1,000プロフィールあたり$0.01になり、10,000リクエストで月額$49からのフラットなプランで、100回分の無料リクエストが支払う前のテストを可能にします。各リクエストは最大20ツイートまたは200フォロワープロフィールを返します。
WordPress から X API を呼べる?
はい、そしてプラグインは必要ありません。WordPress は HTTP API を出荷するため、wp_remote_get が X API やサードパーティ API を呼び、認証ヘッダーを直接渡せます。公式 API にはベアラートークン、読み取り専用のプロバイダーには ApiKey ヘッダーです。ボディを json_decode でデコードし、Transients API でキャッシュして、ページの読み込みが表示ごとに API に当たらないようにします。
PHP で X API のレート制限をどう扱う?
公式 API は15分の窓ごとにリクエストを制限し(エンドポイントによって通常300〜900)、達すると429 を返します。cURL または Guzzle では、ステータスコードを確認してリトライ前に待ちます。Sorsa のようなフラットレートの API は毎秒20リクエストの制限を使うため、429 で1秒待って同じ呼び出しをリトライし、Guzzle のプールが並行の読み取りのために並行度を抑えさせます。
twitteroauth は X API v2 をサポートする?
はい。twitteroauth は、setApiVersion を値2で呼べば v2エンドポイントに到達し、その後 tweets/search/recent のような v2 のパスで汎用の get・post メソッドを使います。公開データの読み取りには、アプリケーション専用のベアラートークンで十分です。有料の X 開発者アカウントを必要とし、ライブラリはメンテナンスモードなので、新機能は計画されていません。
始め方 {#getting-started}
経路を選んで、上の例の1つを実行します。
- 読み取り専用のデータ: Sorsa のダッシュボード からキーを取得し、
SORSA_API_KEYとして設定し、任意の方法3の例を実行します。クレジットカード不要で100回分の無料リクエストで始まり、40個のエンドポイントすべてをカバーするため、プランを選ぶ前にテストできます。構造化された X データが1分以内にスクリプトに届き、クイックスタート が最初の呼び出しを案内します。プランと制限は 料金ページ にあります。 - 読み書き: developer.x.com で開発者アカウントを作り、クレジットを買い、ベアラートークンで twitteroauth か cURL の例を実行します。
- プロバイダーの比較: 読み取り専用の選択肢のより広い見方は Twitter API の代替の比較 を、マネージドスクレイピングのトレードオフは X のスクレイピング ガイドをご覧ください。
監修:Keksich(Sorsa創業者、マーケター兼X APIリサーチャー)
本ガイドの検証方法 {#how-we-verified-this-guide}
当チームは、API を毎日運用しながら2026年6月に本ガイドを執筆し検証しました。公式 PHP SDK の不在と、Python と TypeScript の SDK の存在は、X の ツールとライブラリのドキュメント に対して確認しました。twitteroauth の v2 の使い方(アプリケーション専用のベアラーの構築、setApiVersion、v2 のパスに対する汎用の get/post)とそのメンテナンスモードの状態は、その プロジェクトのリポジトリ に対して確認しました。X API の料金は、2026年4月の書き込みコストの変更を含む現行の従量課金モデルを反映しています。Sorsa のエンドポイントの挙動、リクエスト単位のバッチ処理、プランの料金は Sorsa API のドキュメントから来ており、チームについての詳細は 会社概要ページ にあります。ライブラリのバージョン番号は動くため、固定せずに記述しています。現行の価格には、製品内のドキュメントが信頼できる情報源です。