Skip to content

Instantly share code, notes, and snippets.

@Marchino
Created October 19, 2011 10:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Marchino/1297900 to your computer and use it in GitHub Desktop.
Save Marchino/1297900 to your computer and use it in GitHub Desktop.
Typoheus example with multilpe simultaneous requests and caching enabled
class PagesController < ApplicationController
require 'nokogiri' # or wathever parses the responses
def home
@blog_responses = make_requests ["http://url_to_first.blog", "http://url_to_second.blog"]
end
protected
def make_requests(urls = [])
hydra = setup_hydra
requests = urls.collect{|url| setup_request(url)}
requests.each do |request|
hydra.queue(request)
end
hydra.run
return requests.collect{|r| r.handled_response[rand(r.handled_response.size)]}
end
def setup_hydra
hydra = Typhoeus::Hydra.new
hydra.cache_getter do |request|
Rails.cache.read(request.cache_key) rescue nil
end
hydra.cache_setter do |request|
Rails.cache.write(request.cache_key,request.response,expires_in: request.cache_timeout)
end
return hydra
end
def setup_request(url = '')
request = Typhoeus::Request.new(url,cache_timeout: 1.day)
request.on_complete do |response|
if response.success?
# whatever parses the response
end
end
return request
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment