RT の Favorite 数
gem を用いた場合に限った話ではなく API そのものの制限だとは思うのですが、念のためこのような標題にします。
結論
API でリツイートを取得した場合は、元のツイートの Fav 数は取得できない ということです(正確には 0 が返ってくる)。なお、RT 数は取得できます*1。
取得する方法(前置き)
このような場合に Fav 数を取得するにはどうしたらいいでしょうか。具体例を用いて考えてみます。
元ツイートの ID が878826249413566467
のツイートがあります。このツイートを RT したツイートの ID が878826633854992384
です。これら 2つ のツイートの情報を API で取得してみます。コードは一部省略し、tweet
に Twitter::Tweet オブジェクトが入っているものとします。
tweet = client.status(id) puts "id: #{tweet.id}, rt_count: #{tweet.retweet_count}, fav_count: #{tweet.favorite_count}, tweeted_at: #{tweet.created_at}"
結果は以下のようになりました。
id: 878826249413566467, rt_count: 16, fav_count: 15, tweeted_at: 2017-06-25 04:04:40 +0000 id: 878826633854992384, rt_count: 16, fav_count: 0, tweeted_at: 2017-06-25 04:06:11 +0000
見事にリツイートされたツイートでは Fav 数が 0 になっています。
もし後者のツイートだけが取得できたとして、正しく Fav 数を取得するにはどうしたらいいでしょうか。いや、もっと広い意味で、「リツイートされたツイートのオブジェクトが取得できたとき、その元ツイートのオブジェクトはどのようにしたら取得できるのか」という問題が浮かび上がってきます。
取得する方法(結論)
retweeted_tweet
メソッドを用いる
具体例
ツイートID が878826633854992384
のツイートのオブジェクトに対して、retweeted_tweet
メソッドを用いてみましょう。以下のようなコードになります(一部省略)。
tweet = client.status(878826633854992384)
p tweet.retweeted_tweet
結果は以下のようになり、ちゃんとリツイート元のツイートオブジェクトが取得できました。
#<Twitter::Tweet id=878826249413566467>
補足
最後に書くのもなんですが、リツイートされたツイートは、見た目の内容は元ツイートですが、単体ではユニークなツイートIDや、いつリツイートしたか、などの元ツイートとは異なる情報を持っています。そのため、今回のようなことになっているのだと考えられます。
ただ、このような仕様ということは、「リツイートされたツイートがリツイートされたり Fav されたりした場合はその情報を取得できるのか」ということが問題になるのですが、できなさそうな気がします*2。
あと、retweeted_tweet
メソッドを、リツイートされたツイートではないツイート(要はオリジナルのツイート)に対して実行すると、例外になるわけではなく、空っぽの値が返ってきます。