Skip to main content
Sorsa APIでは、2006年3月までさかのぼるX(旧Twitter)の公開データの全アーカイブにアクセスできます。過去のデータも最新のデータと同じエンドポイント、認証、ページネーションで取得します。専用の「全アーカイブ」プランやエンタープライズ契約は不要で、検索期間の制限もありません。通常の呼び出しと同じ割り当て量を消費するため、新規アカウントに付与されるカード不要の無料リクエスト100件でも試せます。 このページでは、過去のデータに使う2つのエンドポイント、取得できる情報とできない情報、大規模収集で使えるパターンを説明します。
注: 手法の比較表、CSV出力パイプライン、追加のコード例は、ブログの過去のTwitterデータ:APIで古いツイートを検索する方法を参照してください。

エンドポイント

/search-tweetsは、since:until:from:to:min_faves:min_retweets:lang:filter:を含むすべてのX検索演算子を、query内に指定できます。/user-tweetsはアカウント識別子(user_linkusernameuser_id)のみを受け付け、検索条件による絞り込みなしでタイムライン全体を返します。

キーワードでアーカイブを検索する

期間内に条件と一致する全ユーザーのツイートを取得するには、/search-tweetsを使います。日付条件を含む検索文字列をJSON本文に渡します。
orderには"latest"(時系列順)または"popular"(エンゲージメント順)を指定します。期間を指定したアーカイブ収集には"latest"を使ってください。内容の調査には、反応の大きい投稿から返す"popular"が便利です。

アカウントのタイムライン全体

1アカウントの投稿履歴を、新しい順に3,200ツイートの上限なしで取得するには、/user-tweetsを使います。
user_linkusernameuser_idのいずれか1つだけを指定します。next_cursorがnullになるまで繰り返すと、新しい投稿から古い投稿へ順に取得できます。 特定アカウントの期間内のツイートを取得する場合は、代わりに/search-tweetsfrom:を使います(例:from:naval since:2020-01-01 until:2021-01-01)。/user-tweetsは日付フィルターに対応していません。

取得できる情報

過去のツイートも最新のツイートと同じフィールドを返します。
  • 全文(省略なし、URLの置換なし)
  • 6種類のエンゲージメント指標:likes_countretweet_countreply_countquote_countview_countbookmark_count
  • 投稿者の完全なプロフィールを含むuserオブジェクト
  • メディアURL(写真、動画、GIF)とリンクのプレビューを含むentities配列
  • 会話の情報:conversation_id_strin_reply_to_tweet_idis_replyis_quote_status
  • 言語タグ(lang
全フィールドはレスポンス形式を参照してください。

プラットフォーム側の制限

次はSorsa固有ではなくX側の制限です。公開APIで回避することはできません。
  • 削除されたツイートはXの検索インデックスから除去されるため、取得できません。
  • 非公開アカウントは公開検索とタイムラインの結果から除外されます。
  • プロフィールは過去のスナップショットではありません。 2014年のツイートでも、自己紹介、ユーザー名、フォロワー数は2014年時点ではなく現在の値です。
  • エンゲージメント指標も過去のスナップショットではありません。 「いいね」、リツイート、表示回数は現在の合計です。過去の特定時点の指標が必要な場合は、リアルタイム監視で継続的に取得し、自分で保存してください。

推奨事項

長い期間を分割する

複数年を1つの条件で検索すると、再試行しにくく、期間ごとの確認も困難です。年単位の収集は月ごとに、変動の激しい出来事の調査は週ごとに分けてください。

リツイートのノイズを除く

過去の人気投稿の検索では、大量のネイティブリツイートがオリジナルの投稿を埋もれさせます。感情、意見、投稿パターンの調査には-filter:nativeretweetsを追加してください。旧式のRT @user:も除くには-filter:retweetsを使います。

エンゲージメントと日付の条件を組み合わせる

since:until:min_faves:またはmin_retweets:を組み合わせると、ノイズとリクエスト数を大幅に減らせます。例:

世界的な話題は言語ごとに分ける

世界的な出来事では、言語を混ぜず、lang:ごとに検索すると各言語・地域のデータを整理しやすくなります。

カーソルがなくなるまで続ける

next_cursorがnull、空、または存在しない場合にだけ終了してください。ページの件数が少ないという理由で止めないでください。完全なパターンはページネーションにあります。

関連ガイド