Skip to content

Instantly share code, notes, and snippets.

@kejadlen
Created November 22, 2012 02:10
Show Gist options
  • Save kejadlen/4129043 to your computer and use it in GitHub Desktop.
Save kejadlen/4129043 to your computer and use it in GitHub Desktop.
require 'pstore'
require 'yaml'
require 'letters'
require 'twitter'
require_relative './user'
Twitter.configure do |config|
YAML.load(File.open('twitter.yml')).each do |k,v|
config.send("#{k}=", v)
end
end
graph = PStore.new(File.expand_path('../graph.pstore', __FILE__))
def auto_retry
yield
rescue Twitter::Error::TooManyRequests => e
seconds = e.rate_limit.reset_in
puts "Too many requests! Waiting for #{seconds} seconds"
sleep(seconds)
retry
end
user = nil
friends = nil
auto_retry { Twitter.friend_ids.all }.each do |id|
graph.transaction(true) do
user = graph[id]
end
if user and ((Time.now - user.updated_at) < (24 * 60 * 60))
puts "Skipping #{user.screen_name}"
next
end
user = auto_retry { Twitter.user(id) }
auto_retry do
puts "Downloading friends for #{user.screen_name}"
friends = Twitter.friend_ids(id).all
end
graph.transaction do
graph[id] = User.new(user.name, user.screen_name, friends, Time.now)
end
sleep(60)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment