|
#!/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
|
|
|