Skip to content

Instantly share code, notes, and snippets.

Created July 25, 2013 04:32
Star You must be signed in to star a gist
Save diogomonica/6076911 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'mechanize'
EMAIL = ''
SCHEDULE_RANGE = { :start_time => '19:00', :end_time => '20:30' }
def start_url(restaurant=2086)
return "{restaurant}"
def to_minutes(time)
hour, minutes = time.split(':')
raise "Malformed time: #{time}. Should be in the HH:MM format." if hour.nil? || minutes.nil?
return (hour.to_i * 60) + minutes.to_i
url = start_url()
agent = { |agent|
agent.user_agent_alias = 'Mac Safari'
# Get the start page
start_page = agent.get(url)
# Bail if there are no reservations
exit if start_page.forms.count != 1
# Fill in the details for the reservation
start_form = start_page.forms.first
start_form.size = PARTY_SIZE
# Verify if the available times are in the allowed range
available_times = start_form.field_with(:name => 'seating_time').options
possible_times = do |time|
# Select the first of the possible times for the reservation
start_form.seating_time = possible_times.first
# Submit the details and get back the contact form
contact_info_page = start_form.submit
# Check for the existence and get the contact form
exit if contact_info_page.forms.count != 1
contact_form = contact_info_page.forms.first
# Fill in the contact details
contact_form["user[first_name]"] = FIRST_NAME
contact_form["user[last_name]"] = LAST_NAME
contact_form["user[phone]"] = PHONE
contact_form["user[email]"] = EMAIL
# Submit the contact details and get confirmation page
confirmation_page = contact_form.submit
# Confirm the reservation
exit if confirmation_page.forms.count != 1
confirmation_form = confirmation_page.forms.first
final_page = confirmation_form.submit
puts "Got reservation for: #{start_form.seating_time}"
Copy link

claps awesome

Copy link

Genius idea! If only UrbanSpoon was programmed to be completely botproof... :P

Copy link

cheers :)

Copy link

Do you have similar code for OpenTable?

Copy link

Copy link

plc commented Jul 29, 2013

how often did you run this?

Copy link

I started out by doing it once a minute. That seemed enough to get reservations initially (it was a once a minute crontab).

The new bot that I'm developing does checks every 5 seconds.

Copy link

ghost commented Jul 29, 2013


Copy link

Great! It would be interesting powershell script or .NET :-)

Copy link

So how does this work? Is a cron job constantly running in the background? Is this running locally or on a server?

Copy link

ghost commented Aug 17, 2013


Copy link

I love this. Did something similar in Python for registering for high-demand classes in college. This is a great time to be a programmer.

Copy link

Can someone tell me how to use this? Also does it work on ticketmaster as i might try to get some tickets for minecon. Also should i make 1 bot on a computer and one on the other to buy tickets for 2 people such as me and my friend? Help.

Copy link

boranova commented Jul 1, 2021

Does anyone have a similar script for Resy?

Copy link

ekimball commented Feb 1, 2024

Anyone have a script for Tock or Sevenrooms?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment