Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get more than 20 members of a list with ruby, twitter gem

Tags:

ruby

twitter

I am using Twitter gem (1.7.1) in ruby. I want to get my member of my list on Twitter but I just get last twenty members. How can I get more than twenty members?

listmembers = client.list_members(username, listname)
listmembers.users.each do |lmname| 
              p lmname.screen_name
            end
like image 298
yagmurdursun Avatar asked Feb 01 '26 05:02

yagmurdursun


2 Answers

First, pass an argument "cursor=-1". You then get the first 20. The Twitter API will return a field called "next_cursor" - pass this to the cursor and you get the next 20.

Example (pseudocode):

cursor = -1
do {
    # get data, using the cursor
    data = {}

    cursor = data.next_cursor
} while (len(data) > 0) # Loop while we're still getting data back

More info on https://dev.twitter.com/docs/api/1/get/lists/members

like image 113
Tom van der Woerdt Avatar answered Feb 03 '26 18:02

Tom van der Woerdt


I solved my problem with using "cursor". This solution helped me quite. How to use Twitter Api To Get more than 20 list Members in a single request?

I edited the code for ruby. My code is that; I kept an integer value,

pagevalue = 0
if (listmembers.next_cursor == 0) # it means we have only one page
  listmembers.users.each do |lmname| 
     p lmname.screen_name
  end
end
else # it means we have pages more than one
  while (listmembers.next_cursor != 0)
     listmembers.users.each do |lmname| 
        p lmname.screen_name # check screen_name is nil or not
      end
   end
   pagevalue = listmembers.next_cursor
   listmembers = client.list_members(username, listname, :cursor => pagevalue)
   if (listmembers.next_cursor == 0) # for last page
     listmembers.users.each do |lmname|
     p lmname.screen_name
   end
  end
end

if you get screen_name nil in while it won't work. So, check your screen_name if it exists or not.

like image 25
yagmurdursun Avatar answered Feb 03 '26 19:02

yagmurdursun