basyura's blog

あしたになったらほんきだす。

rubytter で cursor を指定する

cursor=-1 または cursor=カーソル位置  (オプション)
  指定した(データベースの)カーソル位置以降の friend の一覧を100人分取得する
  -1 を指定した場合、先頭からの100人分を取得する。
  応答本体に next_cursor がある場合は、「次のページ」(のカーソル位置)、
  previous_cursor がある場合は、
  「前のページ」(のカーソル位置)がそれぞれ存在することを示す。

  本APIの次回実行時に、この next_cursor や previous_cursor の
  示すカーソル位置を使用することで、friend の一覧の「次のページ」や
  「前のページ」相当分(100人分)を取得することができる。

  例:
    http://api.twitter.com/1/statuses/friends/barackobama.xml?cursor=-1
      ユーザ名 barackobama の friend の一覧を先頭から100人分取得する

    http://api.twitter.com/1/statuses/friends/barackobama.xml?cursor=1300794057949944903
      ユーザ名 barackobama の friend の一覧をカーソル位置 1300794057949944903 から
      100人分取得する
Twitter API 仕様書

ページめくりする場合のオプション。

何も考えず、friends API を使う場合

config = {・・・}
consumer = OAuth::Consumer.new(
  config[:consumer_key]    ,
  config[:consumer_secret] ,
  :site  => 'https://api.twitter.com' ,
)
access_token = OAuth::AccessToken.new(
  consumer ,
  config[:access_token] ,
  config[:access_token_secret]
)
client = OAuthRubytter.new(access_token)
client.friends("basyura").each do |user|
  puts user.screen_name
end

先頭の 100 件しか取れない。

cursor を使って全件取得する場合

cursor = -1
while cursor != 0
  ret = client.friends("basyura" , {:cursor => cursor})
  ret.users.each do |user|
    puts user.screen_name
  end
  cursor = ret.next_cursor
end

cursor を指定すると next_cursor が取れるようになる。next_cursor が 0 になるまで取得し続けると全件とれる。
けど、レスポンスのオブジェクトがちょっと変わる。