Inicio rápido
Conéctate a Listings API, obtén la lista de tus ubicaciones, crea una con una sola llamada y responde a una reseña.
1. Configura tu clave de API
Obtén tu clave en Claves de API → Nueva clave en el panel para desarrolladores de Listings API. El SDK la lee automáticamente de la variable de entorno LISTINGSAPI_KEY.
export LISTINGSAPI_KEY="your-api-key"2. Enumera tus ubicaciones
import listingsapi client = listingsapi.ListingsAPI() page = client.locations.list(first=5)for loc in page: print(loc.name, "--", loc.city, loc.stateIso) print(f"\nShowing {len(page)} locations, has_more={page.has_more}")python quickstart.pySalida esperada:
Acme Dental Downtown -- New York NYAcme Dental Midtown -- New York NYAcme Dental Brooklyn -- Brooklyn NY Showing 3 locations, has_more=FalsePara solicitar todas las páginas automáticamente, usa client.locations.list(first=100).auto_paging_iter(); recorre las páginas mediante cursores para que nunca tengas que gestionarlos manualmente.
3. Crea una ubicación en una sola llamada
locations.add() recibe cada campo obligatorio como argumento por nombre y los valida en el cliente (longitud del nombre, descripción de al menos 200 caracteres, categoría, país, ciudad) antes de realizar cualquier llamada de red, de modo que los datos no válidos provocan un fallo inmediato con un ValidationError claro.
import listingsapi client = listingsapi.ListingsAPI() result = client.locations.add( name="Acme Dental Uptown", description=( "Acme Dental Uptown is a family-owned dental practice on the Upper " "West Side of New York offering preventive care, cosmetic dentistry, " "orthodontics, and emergency appointments. Our board-certified team " "combines modern equipment with a gentle, patient-first approach." ), sub_category_id=1432, country_iso="US", city="New York", street="482 Columbus Ave", state_iso="NY", postal_code="10024", phone="6443859313",) print(result.location.id)print(result.location.name)Las plataformas de publicación usan la descripción como texto principal de la ficha, por lo que la API exige al menos 200 caracteres. Obtén valores válidos de sub_category_id en client.subcategories().
El nuevo ID se devuelve como una cadena en base64, como TG9jYXRpb246MTY4MDg=. Los ID numéricos y en base64 son intercambiables en todos los casos en los que el SDK acepta un ID de ubicación, por lo que client.locations.retrieve(16808) y client.locations.retrieve("TG9jYXRpb246MTY4MDg=") obtienen la misma ubicación.
4. Responde a una reseña
Enumera las reseñas de una ubicación y luego responde usando el interactionId de la reseña:
import listingsapi client = listingsapi.ListingsAPI() reviews = client.reviews.list(16808, first=10, rating_filters=[4, 5])for review in reviews: print(review.rating, "-", review.get("content")) # A page can come back empty, and not every review is repliable: some sites# allow one owner reply per review, and some are read-only for the account.repliable = [r for r in reviews if r.get("canRespond")]if not repliable: print("nothing to reply to")else: client.reviews.respond( interaction_id=repliable[0].interactionId, content="Thank you for the kind review! We look forward to seeing you again soon.", )Comprueba canRespond antes de responder y nunca accedas a un elemento de una página por su índice sin comprobar primero que no esté vacía: reviews[0] en una página vacía genera IndexError, y responder a una reseña que la plataforma de origen ha cerrado provoca un fallo en la plataforma de publicación en lugar de en la API.
Si la plataforma rechaza la respuesta, el SDK genera ValidationError incluso cuando el estado HTTP es 200; nunca tienes que comprobar los indicadores success por tu cuenta.
5. Gestiona los errores
import listingsapi try: client = listingsapi.ListingsAPI(api_key="bad-key") client.locations.list()except listingsapi.AuthenticationError as e: print("Invalid key:", e.code)Las claves no válidas dan lugar a una respuesta HTTP 401 con el código de plataforma SY90005; el SDK genera AuthenticationError. Como medida preventiva, también gestiona el mismo código de error si llega dentro de un cuerpo 200. Consulta Gestión de errores para ver la jerarquía completa de excepciones y la referencia de códigos de error para ver la matriz de estados HTTP.
Siguientes pasos
- Configuración: tiempos de espera y reintentos personalizados
- Casos de uso: ejemplos completos
- Recurso de ubicaciones: crear, actualizar, buscar