Skip to content

Instantly share code, notes, and snippets.

@damon
Created February 5, 2009 06:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save damon/58578 to your computer and use it in GitHub Desktop.
Save damon/58578 to your computer and use it in GitHub Desktop.
Compute shared followers between two Twitter accounts
#!/usr/bin/env ruby
# Author: Damon Clinkscales
require 'rubygems'
require 'hpricot'
require 'net/http'
require 'yaml'
def get_followers(user)
xml,url = "",""
result = []
http = Net::HTTP.new('twitter.com', 80)
http.start do |http|
url = "/followers/ids/#{user}.xml"
req = Net::HTTP::Get.new(url)
req.basic_auth(CONFIG["USERNAME"], CONFIG["PASSWORD"])
response = http.request(req)
xml = response.body
doc = Hpricot(xml)
followers = doc.search("//id")
followers.each do |id|
result << id.inner_text
end
end
result.uniq
end
def shared_followers(user1,user2)
puts "Computing shared follower % between #{user1} and #{user2}...\n"
user1_followers = get_followers(user1)
user2_followers = get_followers(user2)
puts "#{user1} has #{user1_followers.size} followers."
puts "#{user2} has #{user2_followers.size} followers."
shared_followers = (user1_followers & user2_followers)
puts "They share #{shared_followers.size} followers."
puts "#{sprintf("%.2f", (shared_followers.size / user1_followers.size.to_f*100).to_s)}% of #{user1}"
puts "#{sprintf("%.2f", (shared_followers.size / user2_followers.size.to_f*100).to_s)}% of #{user2}"
end
####################################################################
## shared_followers test ##
####################################################################
CONFIG = YAML::load(IO.read(File.dirname(__FILE__) + '/config.yml'))
if (ARGV[0] && ARGV[1])
user1 = ARGV[0]
user2 = ARGV[1]
else
user1 = "jasonfried"
user2 = "37signals"
end
shared_followers(user1,user2)
####################################################################
## example run ##
####################################################################
# $ shared_followers.rb
# Computing shared follower % between jasonfried and 37signals...
# jasonfried has 6104 followers.
# 37signals has 10308 followers.
# They share 2804 followers.
# 45.94% of jasonfried
# 27.20% of 37signals
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment