Skip to content

Instantly share code, notes, and snippets.

@pachacamac
Created June 28, 2018 17:59
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 pachacamac/f058ab74260950cede2e81474f2ee577 to your computer and use it in GitHub Desktop.
Save pachacamac/f058ab74260950cede2e81474f2ee577 to your computer and use it in GitHub Desktop.
get current factory berlin events
require 'mechanize'
require 'open-uri'
require 'json'
require 'time'
def mechanize_session
browser = Mechanize.new
#browser.history_added = Proc.new { sleep 0.5 }
browser.user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
yield(browser)
end
def events_for_month(d = Date.today)
mechanize_session do |agent|
page = agent.get("https://factoryberlin.com/events/#{d.year}-#{d.month.to_s.rjust(2,'0')}")
venues = Hash.new('unknown').merge(
page.css('input[name="tribe_venues[]"], input[name="tribe_venues[]"] + span').each_slice(2).map{|k,v|
[k.attribute('value').value, v.text]
}.to_h)
page.css('.tribe_events').
map{|e| JSON.parse(e.attribute('data-tribejson').value, symbolize_names: true)}.
map{|e|
e[:categoryClasses] = e[:categoryClasses].split
venue_class = e[:categoryClasses].find{|c| c =~ /\Atribe-events-venue-/}
e[:venue] = venues[venue_class.split('-').last] if venue_class
e[:startTime] = Time.parse(e[:startTime])
e[:endTime] = Time.parse(e[:endTime])
e[:membersOnly] = !!e[:categoryClasses].find{|c| c =~ /members-only/i}
e
}
end
end
puts JSON.pretty_generate(events_for_month)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment