-
-
Save sosedoff/2504683 to your computer and use it in GitHub Desktop.
# 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 |
Can you please create a jsonp service, so we can just consume with javascript api without running into cross domain request issues? All you'd have to do is accept an additional argument, 'jsoncallback' and then wrap the data in a function call whose name is specified in that argument, returning content type application/javascript. No need for proxies.
Example jquery usage:
$.getJSON("[YOURDOMAIN]/opentable.php?jsoncallback=?",{name:place.name,zip:zip}).done(function(data) {
if(data.count>0) {
//process data
}
});
opentable.php file:
I'm currently using this, but having to host the php file on my server.
Is there any search available?
send back all restaurants with 7pm reservation for a given date
I presume this is just a search API. There are no API's for locking a slot or making a reservation. Correct?
Is there a way to get descriptions back for the restaurants?
Is there any search available?
Why does the opentable link show only reservations until 9.30?
I have ref_id and I need to pass datetime and party size parameter into the request so that i can get same results on openTable.Please respond on this soon. .Thanks
Is there any API to get the customer details who have done a reservation or book a table of particular a restaurant.
Hey for all restaurants the image url are not working....
Hi, the restaurants images (image_url) are not working, it shows the same image for all.
Want to query restaurants within a GEO Square, FROM/TO Lat/Long
1 - Restaurant image is always the same. Can this be fixed?
2 - Cuisine Type filter doesn't seem available. Is this something that can be added?
is there is any api for open table for getting reviews of business .