Los periodistas de investigación necesitan reseñas masivas en Google para descubrir patrones (reseñas falsas, bombardeo de reseñas, quejas por robo de salarios). La API oficial de Google tiene un límite de 5 reseñas por lugar. Este tutorial utiliza la búsqueda de Mapas/Lugares de Scavio para obtener miles de reseñas por empresa a escala periodística.
Requisitos previos
- Python 3.10+
- Una clave API de Scavio
- Una lista de nombres de empresas objetivo o ID de lugares
- pandas para análisis
Guia paso a paso
Paso 1: Encuentra el ID del lugar
La búsqueda de Scavio Maps devuelve place_id para cada negocio.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def find_place(name):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google_maps', 'query': name})
return r.json().get('local_results', [{}])[0].get('place_id')Paso 2: Extraer reseñas por place_id
Hojee todas las reseñas.
def reviews(place_id, max_pages=10):
all_reviews, token = [], None
for _ in range(max_pages):
body = {'platform': 'google_reviews', 'query': place_id}
if token: body['next_token'] = token
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY}, json=body).json()
all_reviews += r.get('reviews', [])
token = r.get('next_token')
if not token: break
return all_reviewsPaso 3: Almacenar en pandas
Una fila por revisión para análisis.
import pandas as pd
def to_df(reviews):
return pd.DataFrame(reviews)[['author', 'rating', 'date', 'text']]Paso 4: Ejecutar análisis de patrones
Palabras clave frecuentes, distribuciones de calificación, ráfagas de velocidad.
def burst_days(df):
return df.groupby('date').size().sort_values(ascending=False).head(10)Paso 5: Exportación para la redacción
CSV para editores, extractos de rebajas para citas.
def export(df, business):
df.to_csv(f'reviews_{business}.csv', index=False)Ejemplo en Python
import os, requests, pandas as pd
API_KEY = os.environ['SCAVIO_API_KEY']
def pull(business):
pid = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google_maps', 'query': business}).json()['local_results'][0]['place_id']
revs = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google_reviews', 'query': pid}).json().get('reviews', [])
return pd.DataFrame(revs)
print(pull('Joe Coffee Brooklyn').head())Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
async function pull(business) {
const mapR = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ platform: 'google_maps', query: business })
});
const pid = (await mapR.json()).local_results[0].place_id;
const revR = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ platform: 'google_reviews', query: pid })
});
return (await revR.json()).reviews;
}Salida esperada
Thousands of reviews per business in minutes. Pandas dataframe with date, rating, author, text. Ready for burst-day detection and keyword analysis.