前提
retweeters_ids
メソッド、あるいはretweeters_of
メソッドを用いる場合は自分のツイートでなければ取得できません。
なのでこれらのメソッドは用いないで、最後に書くようにretweets
メソッドを用いるべきです。すなわち、この記事の途中の大半はスルーして構わなかったりします。
方法
まずは例によってクライアントを以下のように生成します。
client = Twitter::REST::Client.new do |config| config.consumer_key = "CONSUMER_KEY" config.consumer_secret = "CONSUMER_SECRET" config.access_token = "ACCESS_TOKEN" config.access_token_secret = "ACCESS_TOKEN_SECRET" end
そうしたら知りたいツイートを指定して retweeters_ids
またはretweeters_of
のメソッドを実行するだけです。2つのメソッドの違いは以下のとおりです。
retweeters_ids メソッドの場合
引数には「ツイートID」を取ります。メソッドの返り値はTwitter::Cursor
クラスになります。ドキュメントはこちらになります。attrs
メソッドで生の値を取得できますが、普通にループさせて「ユーザID」を取得するのが良いと思います。そのためのコードは以下のとおりです。
rt_user_ids = client.retweeters_ids(878826249413566467) rt_user_ids.each do |rt_user_id| puts rt_user_id end
結果は以下のようになります。
133256291 630624713 812918959309623300 1468904413 238613609 235992043 375552231 3837967872 114230059 125667313 4210949119 3811083012 101411562 852859752279228417 3545395213
retweeters_of メソッドの場合
引数には「ツイートID」を取ります。メソッドの返り値はArray
クラスになります*1。Array
の一つ一つの中身はTwitter::User
クラスです。
Twitter::User
で使えるメソッドはこちらになります。こちらは直感的ですね。具体的なコードを書くと以下のようになるでしょうか。ここではメソッドはlocation
を用いて、ユーザプロフィール内の「居住地」を表示させています。
rt_users = client.retweeters_of(878826249413566467) rt_users.each do |rt_user| puts rt_user.location end
結果は以下のようになります。
ルルノイエの地下室 大和国⇔煌めきの向こう 銀さんの谷間 現実と非現実の境(現実逃避気味) 福島県 ハルモニア神聖国 ミャアタウン 魚釣島 T: 25.74387,123.47335 トランの古城 ハルモニア神聖国 ビュッデヒュッケ
retweets メソッドを使う
たぶんこれが直感的で普通だし、上の2つのメソッドを使う理由も特にないと思います。返り値は Twitter::Tweet オブジェクトになります。以下のようなコードになるでしょうか。なおメソッド名は複数形であるretweets
ですので注意が必要です。
rt_tweets = client.retweets(878826249413566467) rt_tweets.each do |rt_tweet| puts "screen_name: #{rt_tweet.id}, location: #{rt_tweet.user.location}" end
結果は以下のようになります。
tweet_id: 880262952099561473, location: 千葉県千葉市 tweet_id: 878948240338558976, location: ルルノイエの地下室 tweet_id: 878895590758797312, location: 大和国⇔煌めきの向こう tweet_id: 878888620441993216, location: tweet_id: 878886067574775810, location: 銀さんの谷間 tweet_id: 878881252685750272, location: 現実と非現実の境(現実逃避気味) tweet_id: 878877672348065793, location: 福島県 tweet_id: 878877565162725376, location: ハルモニア神聖国 tweet_id: 878867713942106112, location: ミャアタウン tweet_id: 878846822600425472, location: 魚釣島 T: 25.74387,123.47335 tweet_id: 878842922799570944, location: tweet_id: 878830403540275200, location: tweet_id: 878830306282713088, location: tweet_id: 878827922294923264, location: トランの古城 tweet_id: 878827263751409665, location: ハルモニア神聖国 tweet_id: 878826633854992384, location: ビュッデヒュッケ
補足
retweeters_ids
メソッドも、retweeters_of
メソッドも、retweets
メソッドも、引数に「ツイートID」を与えていますが、Twitter::Tweet
オブジェクトでも大丈夫ですretweeters_ids
メソッドも、retweeters_of
メソッドも、retweets
メソッドも、取得数の上限は 100 です- ツイートの検索メソッドとは異なり、「範囲」を一意に取得したり指定したりするオプションが無いため、100 を超えた値を取得するのは不可能だと思います(短い間隔でぐるぐる回して重複する値を除外する、という方法なら理論上はいけそうですが……)
- リツイートされたツイートがまたリツイートされたときに、その値をうまく取得できるのか、ということはまだ試していません(もし可能ならば、いわゆるインフルエンサーを探すのに役立ちそうですね)
*1:ids_only のオプションに true を指定すれば、ユーザIDがそのまま返ります