(Ruby)(Twitter)(フォロワー一覧を取得する)(100人オーバー対応版)(ただしBasic認証版)
以前 書いた RubyGemsの「Twitter」を利用して フォロワー一覧を取得するサンプルは
実は100人以内でないときちんと取得してくれないことが判明 笑)
ということで今回は 「Gemsを使わずに 自力で取得するならば」というのを目標に書いてみました
ただ OAuth認証版で書いてみたかったんですが まだまだ 勉強不足なので
Basic認証版と言う事になります、 いっ いずれは OAuth版をば・・・・
実は100人以内でないときちんと取得してくれないことが判明 笑)
ということで今回は 「Gemsを使わずに 自力で取得するならば」というのを目標に書いてみました
ただ OAuth認証版で書いてみたかったんですが まだまだ 勉強不足なので
Basic認証版と言う事になります、 いっ いずれは OAuth版をば・・・・
#!ruby -Ku # このファイルの文字コードは UTF-8 で作成してます # # WindowsXP Pro 32bit # ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mswin32] # の環境で作成しました require 'open-uri' require 'rexml/document' # ログイン ID と パスワードを設定します ID_PASS = ['TwitterID', 'TwitterPass'] # 予想外のエラーで無限ループに陥らないようにするため ループ回数制限をしてます # 一度のリクエストで取得できるメンバは100人までで # 100人を超える場合は何度かに分けて取得する必要があります # よって 「指定した回数×100」 が 取得できる最大人数になります # 現在のフォロワーの人数に応じて適切な値にしてください MaxLoop = 2 # フォロワーの情報を一時保存するバッファです buf = '' # cursorの値を元に フォロワー一覧のページを辿っていきます # 最初は -1 を渡すと 次のページのcursorの値が XMLに含まれて返ってきます # XML内の next_cursor が その値になります # 次のページが無い場合は 0 が返ってきます c = '-1' # Twiterへアクセスし フォロワー一覧を取得します MaxLoop.times{ begin # フォロワー一覧を取得し RubyでXMLのデータとして扱えるようにします xml = REXML::Document.new( open( '[]http://twitter.com/statuses/followers.xml?cursor=[]' << c, { :http_basic_authentication => ID_PASS } ).read() ) # 次のページの cursor を取得します c = xml.elements['users_list/next_cursor'].text # id と screen_name と name を 取得します # TSV(TabSeparateValue)で保存されます xml.elements.each('users_list/users/user'){|usr| buf << usr.elements['id'].text << "\t" << usr.elements['screen_name'].text << "\t" << usr.elements['name'].text << "\n" } rescue # Twitterへのアクセス中 や xmlの処理中にエラーが発生した場合 # 完全なデータは得られないと考えられますので # buf に 「Error」、c に 「0」 を セットして # ループから抜けるようにします buf = 'Error' c = '0' end # cursor が 0 になったらループから抜けます if c == '0' break end # 連続アクセスするのでウエイトを入れます sleep(3) } # リストを標準出力します、 リダイレクトすればファイルに保存できます # または 必要に応じて ファイルへ書き出したりなどの処理を書き足してください puts(buf)OAuth認証版は → http://d.hatena.ne.jp/morakana/20100802/1280691220