Skip to content

Instantly share code, notes, and snippets.

@mojaray2k
Forked from sosedoff/opentable_client.rb
Created August 11, 2013 07:00
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 mojaray2k/6203786 to your computer and use it in GitHub Desktop.
Save mojaray2k/6203786 to your computer and use it in GitHub Desktop.
Unofficial OpenTable API
# Unofficial OpenTable API
This project was created for one purpose — to make OpenTable data easily accesible to developers. No longer do you have to download XLS file, parse it and insert into your app's database. That shit is annoying.
It is absolutely free and open for everyone to use.
Created by @dan_sosedoff while drinking beers with @alwaysunday in Austin, TX.
## Usage
- API Endpoint: http://opentable.heroku.com/api
- Response Format: JSON
### Find restaurants
```
GET /api/restaurants
```
Parameters: (at least one required)
- ```name``` - Name of the restaurant (optional)
- ```address``` - Address line. Should not contain state or city or zip. (optional)
- ```state``` - State code (ex.: IL) (optional)
- ```city``` - City name (ex.: Chicago) (optional)
- ```zip``` - Zipcode (ex: 60601) (optional)
Returns response:
```json
{
"count": 521,
"per_page": 25,
"current_page": 1,
"restaurants": [ ... ]
}
```
### Find single restaurant
```
GET /api/restaurants/:id
```
Returns a single restaurant record, see reference for details.
## Reference
```json
{
"id": 55807,
"name": "ALC Steaks (Austin Land & Cattle)",
"address": "1205 N. Lamar Blvd",
"city": "Austin",
"state": "TX",
"area": "Austin",
"postal_code": "78703",
"country": "US",
"phone": "5124721813",
"token": "D70F992E",
"reserve_url": "http://www.opentable.com/single.aspx?rid=55807",
"mobile_reserve_url": "http://mobile.opentable.com/opentable/?restId=55807"
}
```
To generate a proper reservation link just ref parameter with your affiliate ID to reserve_url or mobile_reserve_url
## Consuming API
You can use simple client library i wrote — https://gist.github.com/2504683
Example:
```ruby
api = OpenTable::Client.new
# Find restaurants
resp = api.restaurants(:city => "Chicago")
# Process response
resp['count'] # => records found
resp['restaurants'] # => restaurant records
# Fetch a single record
api.restaurant(81169)
```
require 'faraday'
require 'faraday_middleware'
module OpenTable
class Error < StandardError ; end
module Request
API_BASE = 'http://opentable.heroku.com'
def connection(url)
connection = Faraday.new(url) do |c|
c.use(Faraday::Request::UrlEncoded)
c.use(Faraday::Response::ParseJson)
c.adapter(Faraday.default_adapter)
end
end
def request(method, path, params={}, raw=false)
headers = {'Accept' => 'application/json'}
path = "/api#{path}"
response = connection(API_BASE).send(method, path, params) do |request|
request.url(path, params)
end
if [404, 403, 400].include?(response.status)
raise OpenTable::Error, response.body['error']
end
raw ? response : response.body
end
def get(path, params={})
request(:get, path, params)
end
end
class Client
include Request
def restaurants(options={})
get("/restaurants", options)
end
def restaurant(id)
get("/restaurants/#{id}")
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment