twitterapi.io (読み取り専用)
twitterapi.io チームが管理する読み取り専用スキルです。公開X/Twitterデータのみを扱います。Xアカウントにログインすることはなく、クッキー、パスワード、プロキシを扱うこともなく、投稿、いいね、フォロー、メッセージ送信なども一切行いません。
twitterapi.io は公開Xデータ向けの独立したサードパーティREST APIであり、X Corp. とは提携していません。Xの公式APIが必要な場合は、https://developer.x.com をご利用ください。
このスキルを使用するタイミング
- Xの検索演算子 (
from:,since_time:,min_faves:,lang:…) を使ったポスト検索 - ユーザープロフィール、フォロワー、フォローの取得
- ユーザーの最近のポスト、返信、引用ツイート、リツイートしたユーザー、スレッドコンテキストの取得
- トレンド、リスト、コミュニティの取得
- 公開データに基づくダッシュボードの構築、研究データセットの作成、監視ジョブの設定
基本情報
| ベースURL | https://api.twitterapi.io |
| 認証ヘッダー | x-api-key: YOUR_KEY (https://twitterapi.io/dashboard から取得) |
| ドキュメント | https://docs.twitterapi.io |
| 料金 | 呼び出しごとに課金、詳細は https://twitterapi.io/pricing |
| ホスト型MCPサーバー | https://mcp.twitterapi.io/mcp (12の読み取り専用ツール) |
セキュリティ
APIキーは環境変数 TWITTERAPI_IO_KEY から読み取ってください。コードにハードコードしたり、出力したり、コミットしたりしないでください。キーがない場合は、ダッシュボードで作成するようユーザーに依頼してください。
最小限の例
curl -s "https://api.twitterapi.io/twitter/user/info?userName=jack" \
-H "x-api-key: $TWITTERAPI_IO_KEY"
import os, requests
BASE = "https://api.twitterapi.io"
HEADERS = {"x-api-key": os.environ["TWITTERAPI_IO_KEY"]}
r = requests.get(f"{BASE}/twitter/tweet/advanced_search",
headers=HEADERS,
params={"query": "from:jack", "queryType": "Latest"},
timeout=30)
r.raise_for_status()
for t in r.json().get("tweets", []):
print(t["createdAt"], t["text"][:80])
読み取り専用エンドポイント
パラメーター名はエンドポイントごとに異なります(キャメルケースとスネークケースが混在)。表の通りに正確にコピーしてください。
| 機能 | メソッド | パスとキーパラメーター |
|---|---|---|
| スクリーンネームによるユーザー情報 | GET | /twitter/user/info?userName= |
| 拡張プロフィール | GET | /twitter/user_about?userName= |
| IDによるユーザー情報一括取得 | GET | /twitter/user/batch_info_by_ids?userIds= |
| ユーザー検索 | GET | /twitter/user/search?query= |
| 最近のポスト | GET | /twitter/user/last_tweets?userName= (または userId=) |
| メンション | GET | /twitter/user/mentions?userName= |
| フォロワー | GET | /twitter/user/followers?userName=&pageSize=200 |
| フォロー | GET | /twitter/user/followings?userName= |
| IDによるポスト取得 | GET | /twitter/tweets?tweet_ids= |
| 返信 | GET | /twitter/tweet/replies?tweetId= |
| 引用ツイート | GET | /twitter/tweet/quotes?tweetId= |
| リツイートしたユーザー | GET | /twitter/tweet/retweeters?tweetId= |
| スレッドコンテキスト | GET | /twitter/tweet/thread_context?tweetId= |
| 高度な検索 | GET | /twitter/tweet/advanced_search?query=&queryType=Latest |
| トレンド | GET | /twitter/trends?woeid=1 |
| リストのポスト | GET | /twitter/list/tweets?listId= |
| リストメンバー | GET | /twitter/list/members?list_id= |
| コミュニティのポスト | GET | /twitter/community/tweets?community_id= |
| アカウント残高 | GET | /oapi/my/info |
パターン
ページネーション
リスト系エンドポイントは has_next_page と next_cursor を返します。next_cursor を cursor パラメーターとして再送信し、has_next_page が false になったら停止します。バグで無限ループが発生しないよう、必ずページ上限を設定してください。
エラー
400→ 必須パラメーターの欠落、または検索クエリが無効(レスポンスのdetailに修正方法が記載されています)401/403→x-api-keyの欠落または間違い402→ クレジット不足。停止し、ユーザーにチャージを促してください(リトライしないでください)429→ レート制限。バックオフしながらリトライ5xx→ 一時的なエラー。バックオフしながらリトライ
コスト意識
各呼び出しは課金対象です。長時間実行される可能性のあるループ(大規模アカウントの全フォロワー取得、数ヶ月分の検索など)の前に、呼び出し回数を見積もり、ユーザーに確認してください。
アンチパターン
- パラメーター名を正規化しないでください。表の通りにコピーします
402ではリトライしないでください- APIキーをログ出力したり、コミットしたりしないでください