Skip to content

Repository files navigation

API Restaurant Scraper - Jangri

API para scrappear información de restaurantes desde Google Maps, especializada en múltiples comunas de Santiago, Chile.

🎯 Objetivo

Extraer información detallada de restaurantes de las principales comunas de Santiago para el proyecto Jangri, enfocado en estrategias de descuentos y promociones para restaurantes.

🏙️ Comunas Soportadas

  • Las Condes
  • Santiago Centro
  • Vitacura
  • Ñuñoa
  • Providencia

🚀 Características

✅ Datos Extraídos por Restaurante

  • Información básica: Nombre, Descripción, Dirección
  • Contacto: Teléfono, Email, Sitio web
  • Enlaces: Reservas, Menú, Pedidos, Compartir
  • Ubicación: Plus code, Coordenadas
  • Horarios: Horarios de apertura/cierre por día
  • Reviews: Puntuación, Número total de reseñas
  • Precios: Rango de precios ($, $$, $$$)
  • URLs: Link de Google Maps

🔧 Funcionalidades

  • Scraping por comuna individual
  • Scraping de todas las comunas
  • Generación de archivos JSON separados por comuna
  • API REST con múltiples endpoints
  • Autenticación con API Key
  • Logging detallado

📊 Endpoints Disponibles

1. Health Check

GET /health
GET /scraper/health

2. Obtener Comunas Disponibles

GET /scraper/comunas

3. Scraping de Comuna Individual

POST /scraper/restaurants/comuna

Body:

{
  "comuna": "Santiago Centro",
  "max_results": 5
}

4. Scraping de Todas las Comunas

POST /scraper/restaurants/all-comunas

Body:

{
  "max_results_per_comuna": 5
}

5. Generar Solo Archivos JSON

POST /scraper/restaurants/generate-json-files

Body:

{
  "max_results_per_comuna": 5
}

🔧 Instalación y Configuración

Requisitos

Python 3.8+
FastAPI
Selenium
Pydantic

Instalación

# 1. Navegar al directorio
cd apis/api_restaurant_scraper

# 2. Crear entorno virtual
python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate   # Windows

# 3. Instalar dependencias
pip install -r requirements.txt

# 4. Configurar variables de entorno
cp .env.example .env
# Editar .env con tu API_KEY

Variables de Entorno

API_KEY=tu_api_key_secreta_aqui
LOG_LEVEL=INFO

🚀 Uso

1. Ejecutar la API

# Desarrollo
python main.py

# Con uvicorn
uvicorn main:app --reload --port 8000

2. Probar con Script Local

# Prueba completa de todas las comunas
python test_multi_comuna_scraper.py

# Prueba del scraper original
python test_scraper_local.py

3. Llamadas a la API

Ejemplo: Scraping de Santiago Centro

curl -X POST "http://localhost:8000/scraper/restaurants/comuna" \
  -H "X-API-Key: tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "comuna": "Santiago Centro",
    "max_results": 5
  }'

Ejemplo: Scraping de Todas las Comunas

curl -X POST "http://localhost:8000/scraper/restaurants/all-comunas" \
  -H "X-API-Key: tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "max_results_per_comuna": 5
  }'

📁 Estructura de Archivos JSON Generados

{
  "metadata": {
    "comuna": "Santiago Centro",
    "total_restaurants": 5,
    "scraped_at": "2024-01-15T10:30:00",
    "generated_by": "Jangri Restaurant Scraper API"
  },
  "restaurants": [
    {
      "name": "Restaurant Central",
      "description": "Restaurante tradicional en Santiago Centro",
      "location": {
        "address": "Compañía 1063, Santiago Centro, Santiago",
        "city": "Santiago",
        "plus_code": "47RG+23 Santiago"
      },
      "contact": {
        "phone": "+56 2 2664 8200",
        "website": "https://centralrestaurant.cl"
      },
      "links": {
        "reservation_link": "https://example.com/reservas",
        "menu_link": "https://example.com/menu",
        "website_link": "https://centralrestaurant.cl",
        "order_link": "https://example.com/pedidos"
      },
      "hours": [
        {
          "day_of_week": "Lunes",
          "opening_time": "12:00",
          "closing_time": "22:00",
          "is_closed": false
        }
      ],
      "reviews": {
        "rating": 4.5,
        "total_reviews": 342
      },
      "pricing": {
        "price_range": "$$",
        "currency": "CLP"
      },
      "scraped_at": "2024-01-15T10:30:00",
      "google_maps_url": "https://maps.google.com/place/Restaurant+Central"
    }
  ]
}

📂 Estructura del Proyecto

apis/api_restaurant_scraper/
├── main.py                          # Aplicación FastAPI principal
├── requirements.txt                 # Dependencias
├── .env.example                     # Variables de entorno ejemplo
├── dependencies.py                  # Dependencias y autenticación
├── test_multi_comuna_scraper.py     # Script de prueba múltiples comunas
├── test_scraper_local.py            # Script de prueba original
├── scraped_data/                    # Directorio de archivos JSON generados
├── schemas/
│   └── restaurant_schema.py         # Modelos Pydantic
├── services/
│   ├── google_maps_scraper.py       # Scraper original
│   └── multi_comuna_scraper.py      # Scraper múltiples comunas
└── routers/
    └── scraper_router.py            # Endpoints de la API

🔍 Ejemplos de Archivos Generados

Los archivos JSON se generan automáticamente en el directorio scraped_data/ con nombres como:

  • restaurantes_las_condes_20240115_103000.json
  • restaurantes_santiago_centro_20240115_103005.json
  • restaurantes_vitacura_20240115_103010.json
  • restaurantes_nunoa_20240115_103015.json
  • restaurantes_providencia_20240115_103020.json

🧪 Testing

Script de Prueba Completo

python test_multi_comuna_scraper.py

Tests Individuales

# Probar una comuna específica
curl -X POST "http://localhost:8000/scraper/restaurants/comuna" \
  -H "X-API-Key: test_key" \
  -H "Content-Type: application/json" \
  -d '{"comuna": "Providencia", "max_results": 3}'

# Verificar comunas disponibles
curl "http://localhost:8000/scraper/comunas"

🐛 Troubleshooting

Problemas Comunes

  1. Error: python command not found

    # Usar python3 en lugar de python
    python3 test_multi_comuna_scraper.py
  2. Error: No module named 'selenium'

    # Activar entorno virtual e instalar dependencias
    source venv/bin/activate
    pip install -r requirements.txt
  3. Error: API Key requerida

    # Configurar .env o usar header
    export API_KEY=tu_api_key
    # O en requests: -H "X-API-Key: tu_api_key"

📝 Logs

Los logs se guardan en:

  • Consola (stdout)
  • scraper_test.log (para pruebas)
  • Logs de FastAPI en consola

🤝 Integración con Jangri

Esta API está diseñada para integrarse con el ecosistema Jangri:

  • Supabase: Los datos pueden ser almacenados en la base de datos
  • Apps Frontend: Consumo de datos para mostrar restaurantes
  • API Descuentos: Integración para aplicar descuentos por zona

🔄 Próximas Mejoras

  • Scraping real con Selenium
  • Integración directa con Supabase
  • Más comunas de Santiago
  • Cache de resultados
  • Rate limiting
  • Scraping incremental

📞 Soporte

Para dudas o problemas, contactar al equipo de desarrollo de Jangri.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages