読者です 読者をやめる 読者になる 読者になる

クフでダローバルな日記

タフでもグローバルもない

rubyのtweetstreamでリプライを取得する方法

久々です。細かいことですがあまり他に情報が見当たらなかったのでご紹介。

先日、@today_prime_botと@today_pi_botにリプライによる数字の素数判定/円周率から検索機能を追加しました。
tweetstreamで取得する際にはこちらを参考にさせていただきました。
rubyのTweetStreamでリプライを取得 - かいはつメモ http://eee-nbnb.hatenablog.com/entry/2013/10/30/120446
が、この方法には2つの問題点があるらしいことに気づきました。

  1. 検索によるリプライ検出なので、鍵アカウントからのリプライを拾えない。
  2. userstreamなど、他のstreaming APIと並列できない。

前者が特に重要だと思うのですが、僕の場合はふぁぼ・フォロー検知をuserstreamによって行っていたので、trackを使ってしまうと他のbot用アプリ登録が必要になり、面倒です。
そこでuserstreamと併用できるようにしたのがこちら。

client.userstream do |status|
  if status.in_reply_to_screen_name == "today_pi_bot" #リプライ先がtoday_pi_bot
    p status.text
  end
end

つまり、client.userstream によってホームTLに流れるツイートについて、status.in_reply_to_screen_nameはそのツイートのリプライ先を判定するので検出できるわけです。
in_reply_to_screen_nameの代わりにin_reply_to_user_idを使ってユーザーを表すid(数字)を指定することも可能です。
リプライはフォローしていなくてもuserstreamに流れてくるので、FF外からのリプも拾うことが出来るようです。(これはTLを見ていれば分かりますね)

ただし、この方法の問題としては、「userstreamでは全てのツイートを完全に拾うことができない」というものがあります。これはどうやらTwitter側の問題らしいので、解決するのは難しいです。ただ、これはtrackでも同じことでしょうから、多分userstreamの方が良いと思います。

後からの感謝になりますが、eee_nbnbさん、ありがとうございました。( o_ _)o