Skip to content

Instantly share code, notes, and snippets.

@mattdsteele
Created November 24, 2011 05:52
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mattdsteele/1390711 to your computer and use it in GitHub Desktop.
Save mattdsteele/1390711 to your computer and use it in GitHub Desktop.
Of the people I follow, who do they follow that I don't follow? (sorted by count of people I follow)
require 'rubygems'
require 'json'
user = ARGV[0]
if user == nil
puts "usage: who-should-i-follow.rb screen_name"
exit 1
end
followers_to_check = 100
def get_followers(screen_name)
JSON.parse `curl -s http://api.twitter.com/1/friends/ids.json?screen_name=#{screen_name}`
end
def followers_of(id)
JSON.parse `curl -s http://api.twitter.com/1/friends/ids.json?user_id=#{id}`
end
def get_user_names(ids)
JSON.parse `curl -s http://api.twitter.com/1/users/lookup.json?user_id=#{ids.join(",")}`
end
f = get_followers(user)
followers_of_followers = f['ids'].first(followers_to_check).map do |id|
followers_of(id)['ids']
end
followers_of_followers.flatten!
followers_i_dont_follow = followers_of_followers - f['ids']
sorted = followers_i_dont_follow.group_by {|i| i}.sort{|a,b| b[1].size <=> a[1].size}
hash_ids = {}
sorted[1..10].each {|i| hash_ids[i[0]] = i[1]}
user_names = get_user_names(hash_ids.keys).map {|user| [user['screen_name'],user['id']]}
puts "You should follow (since x of your users follow):"
user_names.each do |name|
puts "#{name[0]} (#{hash_ids[name[1]].size})"
end
@zachleat
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment