Example
Call the Places API from Python.
This example uses the Python standard library, keeps the API key server-side, and parses either a result body or a structured error code.
Python example.
import json
import os
import urllib.error
import urllib.parse
import urllib.request
api_key = os.environ["OPEN_PLACES_API_KEY"]
params = urllib.parse.urlencode({
"q": "coffee",
"lat": "40.7128",
"lon": "-74.0060",
"radius_mi": "25",
"limit": "10",
"min_confidence": "0.85",
})
request = urllib.request.Request(
f"https://api.openplacesapi.com/v1/places?{params}",
headers={
"Authorization": f"Bearer {api_key}",
# Cloudflare rejects Python's default "Python-urllib" User-Agent (403, error code 1010).
"User-Agent": "my-app/1.0",
},
)
try:
with urllib.request.urlopen(request, timeout=10) as response:
body = json.loads(response.read().decode("utf-8"))
except urllib.error.HTTPError as error:
raw = error.read().decode("utf-8", "replace")
try:
code = json.loads(raw)["error"]["code"]
except (ValueError, KeyError, TypeError):
code = f"HTTP {error.code}: {raw[:200]}"
raise RuntimeError(code) from error
for place in body["results"]:
categories = place.get("categories") or []
print({
"name": place["name"],
"category": categories[0] if categories else None,
"distance_mi": place["distance_mi"],
"confidence": place["confidence"],
"phone": place.get("phone"),
"website": place.get("website"),
})