rubyのtweetstreamでリプライを取得する方法
久々です。細かいことですがあまり他に情報が見当たらなかったのでご紹介。
先日、@today_prime_botと@today_pi_botにリプライによる数字の素数判定/円周率から検索機能を追加しました。
tweetstreamで取得する際にはこちらを参考にさせていただきました。
rubyのTweetStreamでリプライを取得 - かいはつメモ http://eee-nbnb.hatenablog.com/entry/2013/10/30/120446
が、この方法には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