Skip to content

Instantly share code, notes, and snippets.

@siegy22
Last active August 19, 2016 12:23
Show Gist options
  • Save siegy22/c8e97828c9debbec8789de92c485aab3 to your computer and use it in GitHub Desktop.
Save siegy22/c8e97828c9debbec8789de92c485aab3 to your computer and use it in GitHub Desktop.

EAir16 Bot

A little ruby bot to win Energy Air 2016 Tickets.

Dependencies

  • ruby (preffered 2.2.2)
  • poltergeist
  • capybara

Usage

$ 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment