-
-
Save jchiotaka/58112cbb5cfbcb12cd4a to your computer and use it in GitHub Desktop.
BurgerBot Extended (Optimized for Mac)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# modified from https://gist.github.com/pbock/3ab260f3862c350e6b5f # | |
# Be aware that all scripts are run at your own risk and while every script has been written with the intention of minimising the potential for unintended consequences, the owners, hosting providers and contributers cannot be held responsible for any misuse or script problems. | |
require 'watir-webdriver' | |
require 'colorize' | |
class BurgerBot | |
def initialize | |
@attempt_count = 0 | |
@date = Time.now.to_i | |
print 'Enter your name: ' | |
@name = gets.chomp | |
print 'Enter your e-mail: ' | |
@email = gets.chomp | |
print 'Extended search? (y/n): ' | |
@extendSearch = (gets.chomp.downcase == 'y') | |
print 'Auto-book? (y/n): ' | |
@autoBook = (gets.chomp.downcase == 'y') | |
end | |
def run | |
puts '' | |
puts 'BurgerBot+ Started'.yellow | |
puts '-' * 10 | |
puts "Appointments will be booked for: #{@name} (#{@email})"; | |
puts '' | |
until appointment_available? | |
puts '' | |
sleep 2 | |
end | |
end | |
private | |
def appointment_available? | |
browser.cookies.clear | |
puts "> ##{@attempt_count += 1}".blue | |
print '- Loading Page: ' | |
browser.goto url | |
puts 'Done'.green | |
begin | |
print '- Searching for appointment: ' | |
link = browser.element css: '.calendar-month-table:first-child td.buchbar a' | |
link_next = browser.element css: '.calendar-month-table:last-child .next a' | |
if link.exists? | |
puts 'Available Appointment found'.green | |
link.click | |
print '- Checking available appointment: ' | |
link_frei = browser.element css: '.frei a' | |
if link_frei.exists? | |
puts 'Appointment exists'.green | |
`afplay sound_alert.mp3` | |
print '* Book the appointment? (y/n): '.light_magenta | |
if @autoBook | |
book = true | |
puts 'y'; | |
else | |
book = gets.chomp.downcase == 'y' | |
end | |
if book | |
link_frei.click | |
sleep 1 | |
browser.text_field(:id => "Nachname").set @name | |
browser.text_field(:id => "EMail").set @email | |
submit = browser.element css: '#sendbutton' | |
terms = browser.element css: '#agbbestaetigung' | |
terms.click | |
sleep 1 | |
submit.click | |
browser.alert.ok | |
end | |
else | |
puts 'Failed booking appointment (already booked or server error?)'.red | |
break; | |
end | |
puts " " | |
print "* Search for another one? (y/n): ".light_magenta | |
return gets.chomp.downcase != 'y' | |
else | |
puts 'Nothing found'.red | |
if link_next.exists? | |
if @extendSearch | |
puts '- Loading next page'.yellow | |
sleep 1 | |
link_next.click | |
else | |
break | |
end | |
else | |
break | |
end | |
end | |
end until false | |
puts "< ##{@attempt_count}".blue | |
return false; | |
rescue StandardError => e | |
puts 'Error encountered. Pausing for 60 seconds.'.red | |
puts e.inspect | |
browser.close | |
browser = Watir::Browser.new :chrome | |
sleep 60 | |
return false | |
end | |
def browser | |
@browser ||= Watir::Browser.new :chrome | |
end | |
def url | |
'https://service.berlin.de/terminvereinbarung/termin/tag.php'\ | |
'?id=&buergerID=&buergername=&absagecode='\ | |
"&Datum=#{@date}"\ | |
'&anliegen%5B%5D=120686'\ | |
'&dienstleister%5B%5D=122210'\ | |
'&dienstleister%5B%5D=122217'\ | |
'&dienstleister%5B%5D=122219'\ | |
'&dienstleister%5B%5D=122227'\ | |
'&dienstleister%5B%5D=122231'\ | |
'&dienstleister%5B%5D=122243'\ | |
'&dienstleister%5B%5D=122252'\ | |
'&dienstleister%5B%5D=122260'\ | |
'&dienstleister%5B%5D=122262'\ | |
'&dienstleister%5B%5D=122254'\ | |
'&dienstleister%5B%5D=122271'\ | |
'&dienstleister%5B%5D=122273'\ | |
'&dienstleister%5B%5D=122277'\ | |
'&dienstleister%5B%5D=122280'\ | |
'&dienstleister%5B%5D=122282'\ | |
'&dienstleister%5B%5D=122284'\ | |
'&dienstleister%5B%5D=122285'\ | |
'&dienstleister%5B%5D=122286'\ | |
'&dienstleister%5B%5D=122296'\ | |
'&dienstleister%5B%5D=150230'\ | |
'&dienstleister%5B%5D=122301'\ | |
'&dienstleister%5B%5D=122297'\ | |
'&dienstleister%5B%5D=122294'\ | |
'&dienstleister%5B%5D=122312'\ | |
'&dienstleister%5B%5D=122314'\ | |
'&dienstleister%5B%5D=122304'\ | |
'&dienstleister%5B%5D=122311'\ | |
'&dienstleister%5B%5D=122309'\ | |
'&dienstleister%5B%5D=317869'\ | |
'&dienstleister%5B%5D=324433'\ | |
'&dienstleister%5B%5D=325341'\ | |
'&dienstleister%5B%5D=324434'\ | |
'&dienstleister%5B%5D=122281'\ | |
'&dienstleister%5B%5D=324414'\ | |
'&dienstleister%5B%5D=122283'\ | |
'&dienstleister%5B%5D=122279'\ | |
'&dienstleister%5B%5D=122276'\ | |
'&dienstleister%5B%5D=122274'\ | |
'&dienstleister%5B%5D=122267'\ | |
'&dienstleister%5B%5D=122246'\ | |
'&dienstleister%5B%5D=122251'\ | |
'&dienstleister%5B%5D=122257'\ | |
'&dienstleister%5B%5D=122208'\ | |
'&dienstleister%5B%5D=122226' | |
end | |
end | |
BurgerBot.new.run |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
autobook = killer feature :D