-
-
Save mojaray2k/6203786 to your computer and use it in GitHub Desktop.
Unofficial OpenTable API
This file contains 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
# 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) | |
``` |
This file contains 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
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