Zomatopy
A Python wrapper for the Zomato API.
Install / Use
/learn @sharadbhat/ZomatopyREADME
Zomatopy
A Python wrapper for the Zomato API v2.1
Installation
pip install zomatopy
Or download the source code from here, and then just install the package using
python setup.py install
Getting Started
Python Version
This wrapper was written for Python 3 and might not work well with Python 2.
Adding Zomatopy to your application
For use with only user based authentication we can create the following configuration:
import zomatopy
config={
"user_key":"ZOMATO_API_KEY"
}
zomato = zomatopy.initialize_app(config)
Methods
Common
Getting all Category IDs and the category names
- Takes no inputs.
- Returns a dictionary of Category IDs and corresponding Category Names.
category_dictionary = zomato.get_categories()
Getting ID for a particular city
- Takes City Name as input.
- Returns the City ID of the city.
- Can raise
InvalidCityNameexception.
# city_name must be a string without numbers or special characters.
city_ID = zomato.get_city_ID(city_name)
Getting Name for a particular City ID
- Takes City ID as input.
- Returns name of the city with that ID.
- Can raise
InvalidCityIdexception.
# city_ID must be an integer.
city_name = zomato.get_city_name(city_ID)
Getting the Zomato Collections in a city
- Takes City ID and number of collections as input.
- If number of collections is not specified, returns all Zomato Collections.
- Returns a dictionary of Collection Name and Collection URL.
- Can raise
InvalidCityIdandLimitNotIntegerexceptions.
# city_ID must be an integer.
# limit must be an integer.
# Returns all the Zomato Collections in a city
collections_dictionary = zomato.get_collections(city_ID)
# Returns 'limit' number of collections.
collections_dictionary = zomato.get_collections(city_ID, limit=number_of_collections)
Getting the cuisines in a city
- Takes City ID as input.
- Returns a dictionary of Cuisine ID and corresponding Cuisine Names.
- Can raise
InvalidCityIdexception.
# city_ID must be an integer.
cuisine_dictionary = get_cuisines(city_ID)
Getting all establishment types in a city.
- Takes City ID as input.
- Returns a dictionary of Establishment Type ID and corresponding Establishment Type Name.
- Can raise
InvalidCityIdexception.
# city_ID must be an integer.
establishment_types_dictionary = get_establishment_types(city_ID)
Restaurant
Getting the nearby restaurants
- Takes Latitude and Longitude as inputs.
- Returns a dictionary of Restaurant IDs and their corresponding Zomato URLs.
- Can raise
InvalidLatitudeOrLongitudeexception.
# latitude and longitude must be float or string representation of a float.
restaurant_dictionary = get_nearby_restaurants(latitude, longitude)
Getting the details of a particular restaurant
- Takes Restaurant ID as input.
- Returns a dictionary of restaurant details.
- Can raise a
InvalidRestaurantIdexception.
# restaurant_ID must be an integer.
restaurant_details = get_restaurant(restaurant_ID)
# restaurant_details.name gives the restaurant name.
# restaurant_details.url gives the restaurant Zomato URL.
# restaurant_details.location gives the restaurant location.
# restaurant_details.city gives the restaurant city name.
# restaurant_details.city_ID gives the restaurant city's ID.
# restaurant_details.user_rating gives the restaurant rating.
Searching restaurants based on query, latitude/longitude and/or cuisine IDs
- Takes either query, latitude and longitude or cuisine as input (at least one is necessary).
- limit can be specified to give only those many restaurant results (limit=5 by default).
- Returns a list of Restaurant IDs.
- Can raise a
LimitNotIntegerexception.
# latitude and longitude must be float or string representation of a float.
# multiple cuisine IDs can be specified by separating with commas. Must be a string.
restaurant_list = restaurant_search(query="Buffet", cuisines="1, 25")
Exceptions
InvalidKey
- If the key is not a valid Zomato API Key.
ValueError: InvalidKey
InvalidCityId
- If the City ID contains an alphabet or special characters.
- If the City ID is not present in the Zomato database.
ValueError: InvalidCityId
InvalidCityName
- If the City Name consists of numbers or special characters.
- If the City Name is not present in the Zomato database.
ValueError: InvalidCityName
InvalidRestaurantId
- If the Restaurant ID consists of alphabets or special characters.
- If the Restaurant ID is not present in the Zomato database.
ValueError: InvalidRestaurantId
InvalidLatitudeOrLongitude
- If the latitude or longitude value provided in not a number or string representation of a number.
ValueError: InvalidLatitudeOrLongitude
LimitNotInteger
- If the limit parameter provided for the
get_collections()orrestaurant_search()methods is not an integer.
ValueError: LimitNotInteger
ApiLimitExceeded
- If the daily call limit of the API Key is exceeded.
Exception: ApiLimitExceeded
Related Skills
node-connect
346.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
107.6kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
107.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
346.8kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
