[Twitter API] リツイートを100件より多く取得する方法

特定のツイートのリツイートを100件より多く Twitter API で取得する方法です。制限はありますが、API で用意されている statuses/retweets/:id より多く取得できる場合があります。

retweet

リツイート直後のツイートを表示するやつ では、リツイート数が100より大きい場合、最大で最新100件分しか情報を取得できないのですが、この方法を使ってより多くのリツイート数に対応しました。

関連: 「リツイート直後のツイートを表示するやつ」が公開されています

※ リツイートは、Twitter 公式クライアントでは元ツイートしか表示されませんが、リツイートした人のツイートとして個別にツイートの ID が割り当てられています。

最大100件問題

リツイートした人を調べようとしても、公式クライアントでは最大100人しか表示されず、Twitter API を利用しても最大100件しか取得できません。

関連する API は、GET statuses/retweets/:idGET statuses/retweeters/ids です。

  • GET statuses/retweets/:id: 特定のツイートのリツイートを最近の最大100件取得
  • GET statuses/retweeters/ids: 特定のツイートをリツイートした人の ID を最大100件取得

statuses/retweeters/ids は、パラメーターに cursor があり ユーザー ID のコレクションを数回のアクセスで取得する方法も想定されているようですが、取得できる総数は最大100件で、通常1回のアクセスですべて取得できます。

ワークアラウンド

検索 API(GET search/tweets)を使います。ようは、元ツイートのテキストを検索して、その中からリツイートを探すという方法です。公式クライアントの検索結果は、リツイートされたツイートしか表示されませんので、Twitter API 限定です。

API でユーザータイムラインの取得は最新3,200件までで、検索結果もユーザーの最新3,200件までしか得られないようですが、1回の呼び出しで最大100件の結果が得られ、since_id, max_id パラメーターで100件より多くさかのぼって結果を得られます。よって、最近のリツイートであれば、次の検索方法で100件より多くリツイートを取得できます。

検索方法

検索クエリーは、元ツイートのテキストと、元ツイートのユーザーを「@user」の形で含めます。さらに、リツイートのみ取得する条件「filter:retweets」を指定します。

リツイートはリプライではありませんが、API でツイートを取得した場合、リツイートした人のツイートのテキストは「RT @user: 元ツイートのテキスト」という書式のため「@user」も検索でき、絞り込みできるのではないかと思います。

パラメーター

まとめるとこうなります。since_id も使って絞り込みます。

  • q: 「元ツイートのテキスト」+「filter:retweets」+「@user(元ツイートのユーザー)」
  • since_id: 元ツイートの ID(リツイートは、必ず元ツイートの後なので、ID により絞り込み)

max_id を指定して、繰り返し検索します。

注意

検索結果は、元ツイートのリツイートであるかチェックする必要があります。

元ツイートに検索結果に影響を与えるフィルタリング条件などがあると期待した結果になりませんが、ほとんどの場合問題ないツイートですよね。より精度を上げるには、「filter:~」「-filter:~」「exclude:~」「include:~」などは元ツイートから削除して検索すると良さそうです。

フィルタリング条件以外に、どんな元ツイートのテキストでも、検索できるかは不明。いくつか試した感じでは、うまく検索できています。テキストをダブルクォーテーションでくくると検索できない場合があります。

検索で使える条件

公式で公開されていない? Twitter で使えるフィルタリング条件などは、下記サイトが参考になりました。