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

【Ruby】【twitter】フォローしている相手一覧取得 メモ 修正・追加:2010/11/01

ruby twitter

フォローしている相手の一覧が一度に取得できるようになりましたが…
変なところで、うまく取得できていなかったのでメモです。

色々検索してみると、幾つかのアドレスから、フォロワーのidのlistが取れるようです
jsonでもokです。

https://api.twitter.com/1/friends/名前.xml?cursor=数字

参考:http://d.hatena.ne.jp/rubellum/20100911/1284195203
※追記20100914:↑のアドレスでは、Basic認証を求められてしまうため、本当に取得出来ているのかよく分かりませんでした…。↓を利用したほうが無難そうです…。

https://api.twitter.com/1/friends/ids.xml?screen_name=名前&cursor=数字

参考:http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt
(friends/idsでページ内検索をかけると早いです。)

cursorの指定をしないときは、その時のtwitterの状態によって返ってくるidの数が変わってくるらしいです…。
cursorの指定をすると、毎回5000件程取れてきます。(kamijouさんとshuumaiくんで試したところ、50025000件取れてきました)

cursor 引数を省略した場合、全ユーザ(friends)のID一覧を返す(タイムアウトが発生するか、不完全な一覧が返る可能性が高い)
[将来、上記のcursor 引数省略時の挙動は廃止し、cursor 引数の指定を必須とする予定]

http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt


OAuth認証後で、access_tokenを取得したあとに以下のような形で、idのリストを取得しようとしました。
Nokogiriでxmlを切り分けます。

response = access_token.get("/1/friends/ids.xml?screen_name=#{name}&cursor=#{cursor}")
doc = Nokogiri::HTML(response.body,nil,"utf-8")

※アドレスの指定をhttps://api.twitter.com/からいれてしまうと、データが取ってこれないので注意です…。
なぜ…?

この後、

doc.css("取りたいデータ名").text

で値を取得することが出来ます。
例えば、doc.css("screen_name").textとすると、ユーザのスクリーンname一覧がくっついて表示されます。
.textを付けないと、自体も表示されます。

doc.css("screen_name").each do |user|
  print user.text+"\n"
end

などとすると、綺麗にscreen_nameが表示されるはずです。
css("")で指定する、ノード名は以下を参照です。
http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt


※単にフォローをしている相手の一覧取得は認証がいらないようです。鍵付きユーザを取るために、OAuth認証を通しました。

(13:20 修正しました!ご指摘ありがとうございます!)

OAuth関連

request_tokenやaccess_tokenの中身がどのようになっているのか、分かりやすく・見やすくまとめられているサイトです!
http://d.hatena.ne.jp/fulsat9/20100505/1273064674
本当に助かりました…!