Skip to content

Instantly share code, notes, and snippets.

@lstejskal
Created February 2, 2013 11:26
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 lstejskal/4696928 to your computer and use it in GitHub Desktop.
Save lstejskal/4696928 to your computer and use it in GitHub Desktop.
Poll scraper - scrapes poll results from website and publishes them on Twitter. PS: extracted from production, might require some tuning
require 'rubygems'
require 'open-uri'
require 'nokogiri'
require 'twitter'
class Kohoutovice
def self.scrape_poll_results
website = 'http://www.kohoutovice.cz/modules/xoopspoll/pollresults.php?poll_id=29'
doc = Nokogiri::HTML(open(website))
option_aliases = [ 'ano', 'ano_ale', 'ne', 'nevim' ]
poll_results = []
doc.css('div.poll-results//div.box//table//tr').each_with_index do |option, i|
option_text, option_nr = option.css('td').map { |col| col.text.strip }
option_nr =~ /^(\d+)\s+\%\s\((\d+)\)/
option_percents, option_nr = $1.to_i, $2.to_i
poll_results << {
alias: option_aliases[i],
name: option_text,
nr: option_nr,
percents: option_percents
}
end
poll_results
end
def self.tweet_poll_results!(poll_results)
Twitter.configure do |config|
config.consumer_key = 'CONSUMER KEY'
config.consumer_secret = 'CONSUMER SECRET'
config.oauth_token = 'TOKEN'
config.oauth_token_secret = 'TOKEN SECRET'
end
tweet = poll_results.map { |option| "%s: %s (%s%%)" % [option[:alias], option[:nr], option[:percents]] }.join(', ')
Twitter.update(tweet)
end
end
poll_results = Kohoutovice.scrape_poll_results
Kohoutovice.tweet_poll_results!(poll_results)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment