A little ruby bot to win Energy Air 2016 Tickets.
- ruby (preffered 2.2.2)
- poltergeist
- capybara
$ git clone https://gist.github.com/c8e97828c9debbec8789de92c485aab3.git bin
$ bin/ear16_bot "telephone_number"
#!/usr/bin/env ruby | |
begin | |
require 'capybara' | |
require 'capybara/dsl' | |
require 'capybara/poltergeist' | |
rescue LoadError | |
puts "You need to have capybara as well as poltergeist installed:\n\n$ gem install capybara\n$ gem install poltergeist" | |
exit | |
end | |
Capybara.run_server = false | |
Capybara.current_driver = :poltergeist | |
class EnergyAirBot | |
include Capybara::DSL | |
def initialize(number) | |
if number.nil? || number.empty? | |
puts "A telephone number is required to claim the ticket.\nPlease provide it with: bin/energy_air \"0791231212\"" | |
exit | |
else | |
@number = number | |
end | |
end | |
def run | |
visit 'https://game.energy.ch' | |
start | |
answer_question(question) until finished? | |
proceed_to_bubbles | |
choose_random_bubble | |
if won? | |
claim_with_tel_number(@number) | |
print("√") | |
else | |
print("-") | |
end | |
page.driver.clear_cookies | |
run | |
end | |
def answer_question(q) | |
answer_id = QUESTIONS[q] | |
find("label[for=\"option#{answer_id}\"]").trigger("click") | |
click_next | |
end | |
def choose_random_bubble | |
all("#wingame a").sample.click | |
end | |
def proceed_to_bubbles | |
find("#decision > div > div > form > button").click | |
end | |
def start | |
find("body > div.container > div > div > div.round-button > div").click | |
end | |
def finished? | |
all("#decision").any? | |
end | |
def won? | |
all("#wingame h1").empty? | |
end | |
def claim_with_tel_number(number) | |
find("#wingame > form > fieldset > div:nth-child(1) > div > input").set(number) | |
find("#wingame > form > fieldset > div:nth-child(3) > button").click | |
end | |
def click_next | |
click_button "Weiter" | |
end | |
def question | |
find("body > div.container > div > div > form > h1").text | |
end | |
QUESTIONS = { | |
"Wie heisst Dua Lipas neuster Hit?" => 2, | |
"In welchem Jahr wurde Kungs geboren?" => 3, | |
"Wo findet das Energy Air dieses Jahr statt?" => 1, | |
"Woher stammen Dua Lipas Eltern?" => 3, | |
"Wie heisst der Frontsänger von OneRepublic?" => 3, | |
"Wie viel Technikmaterial wurde letztes Jahr für die Show benötigt?" => 3, | |
"Mit welchem Hit gelang Kungs der europaweite Durchbruch?" => 1, | |
"In welcher Stadt findet das Energy Air 2016 statt?" => 1, | |
"In welchem Kanton findet das Gampel Openair statt?" => 3, | |
"Wie heisst der neue Song von Kungs?" => 2, | |
"Wo findet das grösste Jazz-Festival Europas statt?" => 2, | |
"Was gehört für viele bei einem Festival auf den Kopf?" => 3, | |
"Wo ist Rapper Manillio aufgewachsen?" => 1, | |
"Aus wie vielen Musikern besteht OneRepublic?" => 2, | |
"Wie war der Slogan des legendären Woodstock Festival?" => 1, | |
"Welches Sujet taucht rund ums Energy Air immer wieder auf?" => 3, | |
"Welches Festival findet in der gleichen Stadt statt wie Energy Air?" => 2, | |
"Woher stammt das DJ-Duo Filatov & Karas?" => 2, | |
"Wie lautet Manillios bürgerlicher Name?" => 1, | |
"Welche Sängerin singt im Remix «Dont Be So Shy» von Filatov & Karas?" => 3, | |
"Die wievielte Ausgabe des Energy Air findet 2016 statt?" => 2, | |
"Woher stammt Kungs?" => 1, | |
"Was ist ein Line-Up?" => 2, | |
"Wie lautet der offizielle Hashtag für das Energy Air 2016?" => 1, | |
"Wie heisst der offizielle Energy Air Song 2015?" => 2, | |
"Welcher Energy Air Act trat schon mal am Tomorrowland auf?" => 1, | |
"Als was arbeitete Dua Lipa vor ihrer Musikkarriere?" => 2, | |
"Wie heisst Manillios aktuelles Album?" => 1, | |
"Wie viele Konzertliebhaber feiern das Energy Air jedes Jahr?" => 3, | |
"Woher kommt das «Holi Festival of Colours» ursprünglich?" => 2, | |
"Welche Energy Radiostation existiert nicht?" => 3, | |
"Wer stand letztes Jahr bei Energy Air als erstes auf der Bühne?" => 3, | |
"Wie lautet der Slogan des Energy Air?" => 3, | |
"Welche Acts kommen ans Energy Air?" => 1, | |
"In welchem Bundesstaat feiern Musikbegeisterte das Coachella Festival?" => 2, | |
"Welcher dieser Acts war am letzten Energy Air nicht dabei?" => 1 | |
} | |
end | |
puts "==== Energy Air 2016 Quiz bot ====" | |
puts "Use Ctrl + c to stop" | |
puts "'-' means: Quiz played without winning a ticket." | |
puts "'√' means: Quiz played and won a ticket!" | |
puts | |
EnergyAirBot.new(ARGV.first).run |