From f395d6713618d4714af36807c075900e79838a10 Mon Sep 17 00:00:00 2001 From: consultoria-as Date: Mon, 19 Jan 2026 08:45:03 +0000 Subject: [PATCH] Initial commit: Sistema Autoparts DB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Base de datos SQLite con información de vehículos - Dashboard web con Flask y Bootstrap - Scripts de web scraping para RockAuto - Interfaz CLI para consultas - Documentación completa del proyecto Incluye: - 12 marcas de vehículos - 10,923 modelos - 10,919 especificaciones de motores - 12,075 combinaciones modelo-año-motor --- .gitignore | 53 +++ DASHBOARD_GUIDE.md | 103 ++++ FINAL_SUMMARY.md | 126 +++++ QUICK_START.sh | 53 +++ README.md | 306 ++++++++++++ add_abarth_data.py | 177 +++++++ add_ac_data.py | 178 +++++++ add_acura_additional_data.py | 200 ++++++++ add_acura_data.py | 317 +++++++++++++ add_acura_historical_data.py | 188 ++++++++ add_alfa_romeo_data.py | 308 ++++++++++++ add_american_motors_data.py | 279 +++++++++++ add_aston_martin_data.py | 445 ++++++++++++++++++ add_asuna_data.py | 167 +++++++ add_audi_data.py | 372 +++++++++++++++ add_audi_data_extended.py | 379 +++++++++++++++ add_audi_data_extended2.py | 367 +++++++++++++++ add_crosley_data.py | 177 +++++++ add_historical_data.py | 255 ++++++++++ check_and_remove_brands.py | 127 +++++ dashboard/README.md | 79 ++++ dashboard/dashboard.js | 440 +++++++++++++++++ dashboard/index.html | 367 +++++++++++++++ dashboard/requirements.txt | 1 + dashboard/server.py | 248 ++++++++++ dashboard/start_dashboard.sh | 30 ++ docs/API.md | 270 +++++++++++ docs/DATABASE.md | 425 +++++++++++++++++ docs/INSTALLATION.md | 326 +++++++++++++ fix_arra_data.py | 180 +++++++ integration_demo.py | 95 ++++ remove_brands_and_cleanup.py | 141 ++++++ remove_brands_and_cleanup_final.py | 105 +++++ remove_old_vehicles.py | 102 ++++ remove_old_vehicles_auto.py | 98 ++++ requirements.txt | 4 + scrape_toyota_windows.py | 185 ++++++++ test_dashboard.sh | 54 +++ vehicle_database/GETTING_STARTED.md | 82 ++++ vehicle_database/README.md | 106 +++++ vehicle_database/data/brands.csv | 6 + vehicle_database/data/engines.csv | 5 + vehicle_database/data/models.csv | 5 + vehicle_database/scripts/csv_importer.py | 152 ++++++ vehicle_database/scripts/database_manager.py | 323 +++++++++++++ vehicle_database/scripts/query_interface.py | 193 ++++++++ vehicle_database/scripts/vehicle_database.db | 0 vehicle_database/setup.sh | 29 ++ vehicle_database/sql/schema.sql | 66 +++ vehicle_database/vehicle_database.db | Bin 0 -> 2273280 bytes vehicle_scraper/manual_input.py | 175 +++++++ vehicle_scraper/manual_input_simple.py | 171 +++++++ vehicle_scraper/requirements.txt | 3 + vehicle_scraper/rockauto_scraper.py | 292 ++++++++++++ vehicle_scraper/rockauto_scraper_enhanced.py | 400 ++++++++++++++++ vehicle_scraper/rockauto_scraper_v2.py | 350 ++++++++++++++ .../scrape_nissan_ford_chevrolet.py | 393 ++++++++++++++++ vehicle_scraper/scrape_toyota.py | 163 +++++++ vehicle_scraper/scrape_toyota_windows.py | 240 ++++++++++ 59 files changed, 10881 insertions(+) create mode 100644 .gitignore create mode 100644 DASHBOARD_GUIDE.md create mode 100644 FINAL_SUMMARY.md create mode 100755 QUICK_START.sh create mode 100644 README.md create mode 100644 add_abarth_data.py create mode 100644 add_ac_data.py create mode 100644 add_acura_additional_data.py create mode 100644 add_acura_data.py create mode 100644 add_acura_historical_data.py create mode 100644 add_alfa_romeo_data.py create mode 100644 add_american_motors_data.py create mode 100644 add_aston_martin_data.py create mode 100644 add_asuna_data.py create mode 100644 add_audi_data.py create mode 100644 add_audi_data_extended.py create mode 100644 add_audi_data_extended2.py create mode 100644 add_crosley_data.py create mode 100644 add_historical_data.py create mode 100644 check_and_remove_brands.py create mode 100644 dashboard/README.md create mode 100644 dashboard/dashboard.js create mode 100644 dashboard/index.html create mode 100644 dashboard/requirements.txt create mode 100644 dashboard/server.py create mode 100755 dashboard/start_dashboard.sh create mode 100644 docs/API.md create mode 100644 docs/DATABASE.md create mode 100644 docs/INSTALLATION.md create mode 100644 fix_arra_data.py create mode 100644 integration_demo.py create mode 100644 remove_brands_and_cleanup.py create mode 100644 remove_brands_and_cleanup_final.py create mode 100644 remove_old_vehicles.py create mode 100644 remove_old_vehicles_auto.py create mode 100644 requirements.txt create mode 100644 scrape_toyota_windows.py create mode 100755 test_dashboard.sh create mode 100644 vehicle_database/GETTING_STARTED.md create mode 100644 vehicle_database/README.md create mode 100644 vehicle_database/data/brands.csv create mode 100644 vehicle_database/data/engines.csv create mode 100644 vehicle_database/data/models.csv create mode 100644 vehicle_database/scripts/csv_importer.py create mode 100644 vehicle_database/scripts/database_manager.py create mode 100644 vehicle_database/scripts/query_interface.py create mode 100644 vehicle_database/scripts/vehicle_database.db create mode 100755 vehicle_database/setup.sh create mode 100644 vehicle_database/sql/schema.sql create mode 100644 vehicle_database/vehicle_database.db create mode 100644 vehicle_scraper/manual_input.py create mode 100644 vehicle_scraper/manual_input_simple.py create mode 100644 vehicle_scraper/requirements.txt create mode 100644 vehicle_scraper/rockauto_scraper.py create mode 100644 vehicle_scraper/rockauto_scraper_enhanced.py create mode 100644 vehicle_scraper/rockauto_scraper_v2.py create mode 100644 vehicle_scraper/scrape_nissan_ford_chevrolet.py create mode 100644 vehicle_scraper/scrape_toyota.py create mode 100644 vehicle_scraper/scrape_toyota_windows.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d773489 --- /dev/null +++ b/.gitignore @@ -0,0 +1,53 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual environments +venv/ +ENV/ +env/ +.venv/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log + +# Local configuration +.claude/ +*.local.json + +# Temporary files +*.tmp +*.temp + +# Backup files +*.bak +*.backup diff --git a/DASHBOARD_GUIDE.md b/DASHBOARD_GUIDE.md new file mode 100644 index 0000000..c59c665 --- /dev/null +++ b/DASHBOARD_GUIDE.md @@ -0,0 +1,103 @@ +# Vehicle Database Dashboard - Complete Solution + +## Overview + +I have created a complete web-based dashboard for searching and filtering your vehicle database with the following components: + +1. **Web Dashboard Interface** - A responsive, modern UI built with HTML, CSS, and JavaScript +2. **Flask Backend** - API server that connects to your SQLite database +3. **Filtering System** - Search by brand, model, year, and engine +4. **Data Visualization** - Display vehicle details in an attractive card layout + +## Features + +- **Four-way Filtering**: Filter vehicles by brand, model, year, and engine type +- **Responsive Design**: Works on desktop, tablet, and mobile devices +- **Real-time Updates**: Filters update immediately when selections change +- **Detailed Information**: Shows power, displacement, cylinders, fuel type, trim, drivetrain, and transmission +- **Modern UI**: Bootstrap-based interface with cards, badges, and icons + +## Architecture + +### Frontend +- `index.html`: Main dashboard page with Bootstrap styling +- `dashboard.js`: JavaScript for UI interactions and API calls + +### Backend +- `server.py`: Flask application serving the dashboard and API +- API endpoints for brands, models, years, engines, and vehicles + +## How to Use + +### Starting the Dashboard +1. Navigate to the dashboard directory: + ```bash + cd /home/Autopartes/dashboard + ``` + +2. Start the server: + ```bash + python3 server.py + ``` + +3. Open your web browser and go to: `http://localhost:5000` + +### Using the Dashboard +1. On the left panel, use the dropdowns to select filters: + - Brand: Select a vehicle manufacturer + - Model: Select a model (updates based on selected brand) + - Year: Select a production year + - Engine: Select an engine type + +2. Click "Search Vehicles" to apply filters + +3. Results appear in the right panel with detailed information + +4. Use "Reset Filters" to clear all selections + +## API Endpoints + +The dashboard uses these API endpoints: +- `GET /api/brands` - Get all vehicle brands +- `GET /api/models?brand=[brand]` - Get models for a specific brand +- `GET /api/years` - Get all years +- `GET /api/engines` - Get all engines +- `GET /api/vehicles?[filters]` - Search vehicles with optional filters + +## Files Created + +``` +dashboard/ +├── index.html # Main dashboard page +├── dashboard.js # Frontend JavaScript +├── server.py # Flask backend +├── requirements.txt # Python dependencies +├── start_dashboard.sh # Startup script +├── README.md # Documentation +└── static/ # Static files directory (created by Flask) +``` + +## Customization + +You can customize the dashboard by: +- Modifying the CSS styles in index.html +- Adding more filters in the JavaScript +- Changing the layout in index.html +- Adding more vehicle details in the display + +## Troubleshooting + +- If the server won't start, ensure Flask is installed: `sudo apt-get install python3-flask` +- If filters don't populate, check that your vehicle database has data +- If the page doesn't load, verify that the database file exists at `../vehicle_database/vehicle_database.db` +- Check the browser console for JavaScript errors +- Check the terminal for server errors + +## Next Steps + +1. Start the dashboard server +2. Browse your vehicle data using the intuitive interface +3. Add more data to your database using the manual input tools +4. Customize the dashboard to meet your specific needs + +The dashboard is now ready to use and provides a powerful interface for exploring your vehicle database! \ No newline at end of file diff --git a/FINAL_SUMMARY.md b/FINAL_SUMMARY.md new file mode 100644 index 0000000..c5ef080 --- /dev/null +++ b/FINAL_SUMMARY.md @@ -0,0 +1,126 @@ +# Vehicle Database with RockAuto Data Integration + +## Project Overview + +This project combines two components: +1. A comprehensive vehicle database system +2. A data extraction system for RockAuto.com vehicle information + +Due to anti-bot measures on RockAuto.com, a manual extraction approach is recommended for collecting vehicle data. + +## System Components + +### 1. Vehicle Database +- SQLite database with normalized schema +- Tables for brands, models, years, engines, and their relationships +- Python API for managing the database +- Interactive query interface + +### 2. Data Extraction Tools +- Automated scraper (for sites without anti-bot measures) +- Manual extraction guide for RockAuto.com +- Data import functionality + +## Database Schema + +The database consists of five main tables: + +- **brands**: Vehicle manufacturers (Toyota, Ford, etc.) +- **models**: Vehicle models (Camry, F-150, etc.) +- **engines**: Engine specifications (2JZ-GTE, EcoBoost, etc.) +- **years**: Calendar years for vehicle production +- **model_year_engine**: Junction table linking all entities with trim levels and specifications + +## Using the System + +### Initial Setup +```bash +cd vehicle_database +./setup.sh +``` + +### Querying the Database +```bash +python3 scripts/query_interface.py +``` + +### Adding More Data Manually +```python +from ../vehicle_scraper/manual_input import ManualDataInput +input_tool = ManualDataInput() + +# Add a single vehicle +input_tool.add_vehicle_data("Toyota", "Corolla", 2021, "1.8L 4-Cylinder") + +# Add multiple vehicles +vehicles = [ + {"make": "Nissan", "model": "Altima", "year": 2020, "engine": "2.5L 4-Cylinder"}, + {"make": "Hyundai", "model": "Elantra", "year": 2019, "engine": "2.0L 4-Cylinder"} +] +input_tool.add_multiple_vehicles(vehicles) +``` + +## Manual Data Extraction from RockAuto.com + +Since RockAuto has anti-bot measures, follow this process: + +1. Open your web browser and go to: https://www.rockauto.com +2. Click on the "Catalog" link in the navigation menu +3. You will see a list of vehicle manufacturers (makes) +4. For each manufacturer: + - Click on the manufacturer name + - You'll see a page with vehicle models organized by year + - Note down the models and years you see +5. To find engine information: + - Click on a specific model/year combination + - You'll see parts categories for that vehicle + - Look for "Engine" or "Engine Mechanical" category + - Note down the engine type/specifications +6. Use the ManualDataInput class to add the collected data to your database + +## File Structure +``` +vehicle_database/ # Main database system +├── sql/ +│ └── schema.sql # Database schema +├── scripts/ +│ ├── database_manager.py # Main database manager +│ ├── query_interface.py # Interactive query interface +│ └── csv_importer.py # CSV import functionality +├── data/ # Sample CSV data files +├── vehicle_database.db # SQLite database file +├── setup.sh # Setup script +├── README.md # Project documentation +└── GETTING_STARTED.md # Getting started guide + +vehicle_scraper/ # Data extraction tools +├── rockauto_scraper.py # Automated scraper (for other sites) +├── rockauto_scraper_enhanced.py # Enhanced scraper +├── manual_input.py # Manual input tool +├── manual_input_simple.py # Simplified manual input +└── requirements.txt # Python dependencies +``` + +## Extending the Database + +To add more vehicle data: +1. Collect data manually from RockAuto.com using the provided guide +2. Use the ManualDataInput class to add data to the database +3. Or prepare CSV files in the required format and use the CSV importer + +## Future Enhancements + +- Web scraping capabilities for other automotive parts sites +- Export functionality to share data +- Advanced search and filtering options +- Data validation and cleaning tools + +## Troubleshooting + +If you encounter issues: +1. Check that Python 3.x is installed +2. Ensure all required packages are installed (`pip3 install -r requirements.txt`) +3. Verify database file permissions +4. Check that the schema matches the expected structure + +The system is now ready to use. You can start by exploring the existing data through the query interface and then add more data as needed. \ No newline at end of file diff --git a/QUICK_START.sh b/QUICK_START.sh new file mode 100755 index 0000000..a8420fb --- /dev/null +++ b/QUICK_START.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Quick Start Script for Vehicle Database with RockAuto Integration + +echo "===========================================" +echo "Vehicle Database & RockAuto Data Integration" +echo "===========================================" +echo "" +echo "Welcome! This system allows you to create a comprehensive vehicle database" +echo "with information from RockAuto.com (via manual extraction)." +echo "" +echo "STEP 1: Explore the existing database" +echo "-------------------------------------" +echo "Start the query interface to see existing data:" +echo " cd vehicle_database" +echo " python3 scripts/query_interface.py" +echo "" +echo "STEP 2: Add more data from RockAuto.com" +echo "---------------------------------------" +echo "Since RockAuto.com has anti-bot measures, you'll need to manually" +echo "extract data. Here's how:" +echo "" +echo "1. Visit https://www.rockauto.com/catalog/" +echo "2. Browse through manufacturers, models, years, and engines" +echo "3. Note down the information you find" +echo "4. Add it to your database using Python:" +echo "" +echo " from vehicle_scraper.manual_input_simple import ManualDataInput" +echo " input_tool = ManualDataInput(db_path='vehicle_database/vehicle_database.db')" +echo " input_tool.add_vehicle_data('Make', 'Model', Year, 'Engine')" +echo "" +echo "STEP 3: Database structure" +echo "--------------------------" +echo "The database contains these tables:" +echo "- brands: Vehicle manufacturers" +echo "- models: Vehicle models" +echo "- years: Production years" +echo "- engines: Engine specifications" +echo "- model_year_engine: Links between all the above" +echo "" +echo "STEP 4: Sample queries" +echo "----------------------" +echo "Try these queries in the interface:" +echo "- Search for all Toyotas: Brand = 'Toyota'" +echo "- Find 2020 models: Year = 2020" +echo "- Look for turbo engines: Engine = 'Turbo'" +echo "" +echo "Your database is located at: vehicle_database/vehicle_database.db" +echo "" +echo "To see all available scripts:" +echo " ls -la vehicle_database/scripts/" +echo "" +echo "Ready to start building your vehicle database!" +echo "==============================================" \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e8759a7 --- /dev/null +++ b/README.md @@ -0,0 +1,306 @@ +# Autoparts DB + +Sistema completo de gestión de base de datos de vehículos y autopartes con dashboard web, herramientas de web scraping y múltiples interfaces de consulta. + +## Descripción + +**Autoparts DB** es una solución integral para la gestión de información de vehículos que incluye: + +- Base de datos SQLite normalizada con información de marcas, modelos, motores y años +- Dashboard web moderno y responsivo para consultar y explorar datos +- Herramientas de web scraping para recopilar datos de RockAuto.com +- Interfaces de línea de comandos (CLI) y programática +- Scripts de utilidad para gestión y mantenimiento de datos + +## Estadísticas de la Base de Datos + +| Elemento | Cantidad | +|----------|----------| +| Marcas | 12 | +| Modelos | 10,923 | +| Motores | 10,919 | +| Combinaciones modelo-año-motor | 12,075 | + +## Tecnologías Utilizadas + +### Backend +- **Python 3** - Lenguaje principal +- **SQLite 3** - Base de datos +- **Flask 2.3.3** - Framework web +- **BeautifulSoup4** - Web scraping +- **requests** - HTTP client +- **lxml** - Parser XML/HTML + +### Frontend +- **HTML5** - Estructura +- **Bootstrap 5.3.0** - Framework CSS +- **JavaScript (ES6+)** - Lógica cliente +- **Font Awesome 6.0.0** - Iconos + +## Estructura del Proyecto + +``` +Autopartes/ +├── vehicle_database/ # Sistema principal de base de datos +│ ├── sql/ +│ │ └── schema.sql # Esquema de la base de datos +│ ├── scripts/ +│ │ ├── database_manager.py # Gestión de la BD +│ │ ├── query_interface.py # Interfaz CLI +│ │ └── csv_importer.py # Importador CSV +│ ├── data/ +│ │ ├── brands.csv # Datos de marcas +│ │ ├── engines.csv # Datos de motores +│ │ └── models.csv # Datos de modelos +│ ├── vehicle_database.db # Base de datos SQLite +│ └── setup.sh # Script de inicialización +│ +├── dashboard/ # Interfaz web +│ ├── server.py # Backend Flask +│ ├── index.html # Frontend HTML +│ ├── dashboard.js # Lógica JavaScript +│ └── start_dashboard.sh # Script de inicio +│ +├── vehicle_scraper/ # Herramientas de web scraping +│ ├── rockauto_scraper.py # Scraper RockAuto +│ ├── rockauto_scraper_v2.py # Scraper mejorado +│ ├── scrape_toyota.py # Scraper Toyota +│ ├── scrape_nissan_ford_chevrolet.py +│ └── manual_input.py # Ingreso manual +│ +├── add_*.py # Scripts para agregar datos +├── remove_*.py # Scripts de limpieza +└── QUICK_START.sh # Guía rápida de inicio +``` + +## Instalación + +### Requisitos Previos + +- Python 3.8 o superior +- pip (gestor de paquetes de Python) + +### Pasos de Instalación + +1. **Clonar el repositorio** + ```bash + git clone https://git.consultoria-as.com/[usuario]/Autoparts-DB.git + cd Autoparts-DB + ``` + +2. **Instalar dependencias** + ```bash + pip install flask requests beautifulsoup4 lxml + ``` + +3. **Inicializar la base de datos (opcional - ya incluye datos)** + ```bash + cd vehicle_database + ./setup.sh + ``` + +## Uso + +### Iniciar el Dashboard Web + +```bash +cd dashboard +python3 server.py +``` + +El dashboard estará disponible en: `http://localhost:5000` + +### Usar la Interfaz CLI + +```bash +cd vehicle_database/scripts +python3 query_interface.py +``` + +### Ejecutar Web Scraping + +```bash +cd vehicle_scraper +python3 rockauto_scraper_v2.py +``` + +### Agregar Datos Manualmente + +```bash +cd vehicle_scraper +python3 manual_input.py +``` + +## API REST + +El dashboard expone los siguientes endpoints: + +| Endpoint | Método | Descripción | +|----------|--------|-------------| +| `/api/brands` | GET | Obtiene todas las marcas | +| `/api/models?brand=X` | GET | Obtiene modelos por marca | +| `/api/years` | GET | Obtiene años disponibles | +| `/api/engines` | GET | Obtiene motores disponibles | +| `/api/vehicles` | GET | Búsqueda con filtros | + +### Ejemplo de Uso + +```bash +# Obtener todas las marcas +curl http://localhost:5000/api/brands + +# Buscar vehículos por marca y año +curl "http://localhost:5000/api/vehicles?brand=Toyota&year=2020" +``` + +## Esquema de Base de Datos + +### Tablas + +#### brands +| Campo | Tipo | Descripción | +|-------|------|-------------| +| id | INTEGER | Clave primaria | +| name | TEXT | Nombre de la marca | +| country | TEXT | País de origen | +| founded_year | INTEGER | Año de fundación | + +#### models +| Campo | Tipo | Descripción | +|-------|------|-------------| +| id | INTEGER | Clave primaria | +| brand_id | INTEGER | FK a brands | +| name | TEXT | Nombre del modelo | +| body_type | TEXT | Tipo de carrocería | +| generation | TEXT | Generación | +| production_start_year | INTEGER | Año inicio producción | +| production_end_year | INTEGER | Año fin producción | + +#### engines +| Campo | Tipo | Descripción | +|-------|------|-------------| +| id | INTEGER | Clave primaria | +| name | TEXT | Nombre del motor | +| displacement_cc | INTEGER | Cilindrada en cc | +| cylinders | INTEGER | Número de cilindros | +| fuel_type | TEXT | Tipo de combustible | +| power_hp | INTEGER | Potencia en HP | +| torque_nm | INTEGER | Torque en Nm | +| engine_code | TEXT | Código del motor | + +#### years +| Campo | Tipo | Descripción | +|-------|------|-------------| +| id | INTEGER | Clave primaria | +| year | INTEGER | Año | + +#### model_year_engine +| Campo | Tipo | Descripción | +|-------|------|-------------| +| id | INTEGER | Clave primaria | +| model_id | INTEGER | FK a models | +| year_id | INTEGER | FK a years | +| engine_id | INTEGER | FK a engines | +| trim_level | TEXT | Nivel de equipamiento | +| drivetrain | TEXT | Tracción | +| transmission | TEXT | Transmisión | + +### Diagrama de Relaciones + +``` +brands ──┐ + │ + ├──< models ──┐ + │ │ +years ───┼─────────────┼──< model_year_engine + │ │ +engines ─┴─────────────┘ +``` + +## Scripts Disponibles + +### Scripts de Datos + +| Script | Descripción | +|--------|-------------| +| `add_toyota_data.py` | Agrega datos de Toyota | +| `add_honda_data.py` | Agrega datos de Honda | +| `add_nissan_data.py` | Agrega datos de Nissan | +| `add_ford_data.py` | Agrega datos de Ford | +| `add_chevrolet_data.py` | Agrega datos de Chevrolet | +| `add_audi_data.py` | Agrega datos de Audi | +| `add_acura_data.py` | Agrega datos de Acura | +| ... | Y más marcas | + +### Scripts de Mantenimiento + +| Script | Descripción | +|--------|-------------| +| `remove_brands_and_cleanup.py` | Limpia marcas innecesarias | +| `check_and_remove_brands.py` | Verifica y elimina marcas | + +## Funcionalidades del Dashboard + +### Panel de Filtros +- Selección de marca +- Selección de modelo (dinámico según marca) +- Filtro por año +- Filtro por motor + +### Panel de Resultados +- Visualización en tarjetas +- Información detallada del vehículo +- Especificaciones del motor +- Datos de transmisión y tracción + +### Características +- Diseño responsivo +- Actualización en tiempo real +- Animaciones y transiciones suaves +- Soporte para múltiples idiomas + +## Arquitectura del Sistema + +``` +┌─────────────────┐ ┌──────────────────┐ +│ RockAuto.com │────>│ Web Scraper │ +└─────────────────┘ └────────┬─────────┘ + │ + v +┌─────────────────┐ ┌──────────────────┐ +│ Manual Input │────>│ SQLite Database │ +└─────────────────┘ └────────┬─────────┘ + │ + ┌───────────────────────┼───────────────────────┐ + │ │ │ + v v v +┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐ +│ Flask API │ │ CLI Interface │ │ CSV Importer │ +└────────┬────────┘ └──────────────────┘ └──────────────────┘ + │ + v +┌─────────────────┐ +│ Web Dashboard │ +│ (Browser) │ +└─────────────────┘ +``` + +## Contribuir + +1. Fork el repositorio +2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`) +3. Commit tus cambios (`git commit -am 'Agrega nueva funcionalidad'`) +4. Push a la rama (`git push origin feature/nueva-funcionalidad`) +5. Crea un Pull Request + +## Licencia + +Este proyecto es de uso interno. + +## Contacto + +Para más información, contactar al equipo de desarrollo. + +--- + +**Autoparts DB** - Sistema de Gestión de Base de Datos de Vehículos diff --git a/add_abarth_data.py b/add_abarth_data.py new file mode 100644 index 0000000..11a9624 --- /dev/null +++ b/add_abarth_data.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python3 +""" +Script para agregar datos de Abarth a la base de datos de vehículos +""" + +import sqlite3 +import os + +def add_abarth_data(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Agregando datos de Abarth a la base de datos...") + + try: + # Insertar la marca Abarth + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", ("Abarth",)) + cursor.execute("SELECT id FROM brands WHERE name = ?", ("Abarth",)) + brand_id = cursor.fetchone()[0] + print(f"Marca Abarth tiene ID: {brand_id}") + + # Insertar modelos de Abarth + models = [ + '1000', '1300', '2000', 'SIMCA', '850', '1150', '1600', '750', '204', '205' + ] + + for model in models: + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + print(f"Agregados {len(models)} modelos de Abarth") + + # Datos de años y motores para cada modelo + abarth_data = [ + # 1000 + ('1000', 1969, '982cc L4'), + ('1000', 1968, '982cc L4'), + ('1000', 1967, '982cc L4'), + ('1000', 1966, '982cc L4'), + ('1000', 1965, '982cc L4'), + ('1000', 1964, '982cc L4'), + ('1000', 1963, '982cc L4'), + ('1000', 1962, '982cc L4'), + + # 1300 + ('1300', 1969, '1.3L L4'), + ('1300', 1968, '1.3L L4'), + ('1300', 1967, '1.3L L4'), + ('1300', 1966, '1.3L L4'), + + # 2000 + ('2000', 1969, '1.9L L4'), + ('2000', 1968, '1.9L L4'), + ('2000', 1967, '1.9L L4'), + ('2000', 1966, '1.9L L4'), + + # SIMCA + ('SIMCA', 1969, '1.3L L4'), + ('SIMCA', 1969, '2.0L L4'), + ('SIMCA', 1968, '1.3L L4'), + ('SIMCA', 1968, '2.0L L4'), + ('SIMCA', 1967, '1.3L L4'), + ('SIMCA', 1967, '2.0L L4'), + ('SIMCA', 1966, '1.3L L4'), + ('SIMCA', 1966, '2.0L L4'), + ('SIMCA', 1965, '1.3L L4'), + ('SIMCA', 1965, '2.0L L4'), + ('SIMCA', 1964, '1.3L L4'), + ('SIMCA', 1964, '2.0L L4'), + ('SIMCA', 1963, '1.3L L4'), + ('SIMCA', 1963, '2.0L L4'), + ('SIMCA', 1962, '1.3L L4'), + ('SIMCA', 1962, '2.0L L4'), + + # 850 + ('850', 1966, '847cc L4'), + ('850', 1965, '847cc L4'), + ('850', 1964, '847cc L4'), + ('850', 1963, '847cc L4'), + ('850', 1962, '847cc L4'), + ('850', 1961, '833cc L4'), + ('850', 1960, '833cc L4'), + + # 1150 + ('1150', 1966, '1.1L L4'), + + # 1600 + ('1600', 1966, '1.6L L4'), + ('1600', 1965, '1.6L L4'), + ('1600', 1964, '1.6L L4'), + ('1600', 1963, '1.6L L4'), + ('1600', 1962, '1.6L L4'), + ('1600', 1961, '1.6L L4'), + ('1600', 1960, '1.6L L4'), + + # 750 + ('750', 1961, '747cc L4'), + ('750', 1960, '747cc L4'), + ('750', 1959, '747cc L4'), + ('750', 1958, '747cc L4'), + ('750', 1957, '747cc L4'), + ('750', 1956, '747cc L4'), + + # 204 + ('204', 1955, '1.1L L4'), + ('204', 1954, '1.1L L4'), + ('204', 1953, '1.1L L4'), + ('204', 1952, '1.1L L4'), + ('204', 1951, '1.1L L4'), + ('204', 1950, '1.1L L4'), + ('204', 1949, '1.1L L4'), + + # 205 + ('205', 1955, '1.1L L4'), + ('205', 1954, '1.1L L4'), + ('205', 1953, '1.1L L4'), + ('205', 1952, '1.1L L4'), + ('205', 1951, '1.1L L4'), + ('205', 1950, '1.1L L4'), + ('205', 1949, '1.1L L4'), + ] + + # Insertar años + years = list(set([data[1] for data in abarth_data])) # Obtener años únicos + for year in years: + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + print(f"Agregados {len(years)} años") + + # Insertar motores + engines = list(set([data[2] for data in abarth_data])) # Obtener motores únicos + for engine in engines: + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + print(f"Agregados {len(engines)} motores") + + # Crear combinaciones modelo-año-motor + for model_name, year, engine_name in abarth_data: + # Obtener IDs + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model_name)) + model_id = cursor.fetchone() + if model_id: + model_id = model_id[0] + else: + print(f"Advertencia: Modelo {model_name} no encontrado para la marca Abarth") + continue + + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_id = cursor.fetchone()[0] + + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + engine_id = cursor.fetchone()[0] + + # Insertar la combinación modelo-año-motor + cursor.execute( + """INSERT OR IGNORE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Se agregaron {len(abarth_data)} combinaciones modelo-año-motor para Abarth") + print("Datos de Abarth agregados exitosamente a la base de datos!") + + except Exception as e: + print(f"Error al agregar datos de Abarth: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + add_abarth_data() \ No newline at end of file diff --git a/add_ac_data.py b/add_ac_data.py new file mode 100644 index 0000000..a1c9b27 --- /dev/null +++ b/add_ac_data.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python3 +""" +Script para agregar datos de AC a la base de datos de vehículos +""" + +import sqlite3 +import os + +def add_ac_data(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Agregando datos de AC a la base de datos...") + + try: + # Insertar la marca AC + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", ("AC",)) + cursor.execute("SELECT id FROM brands WHERE name = ?", ("AC",)) + brand_id = cursor.fetchone()[0] + print(f"Marca AC tiene ID: {brand_id}") + + # Insertar modelos de AC + models = [ + '428', 'ACE', 'ACECA', 'GREYHOUND', 'TWO-LITRE' + ] + + for model in models: + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + print(f"Agregados {len(models)} modelos de AC") + + # Datos de años y motores para cada modelo + ac_data = [ + # 428 + ('428', 1973, '7.0L V8'), + ('428', 1972, '7.0L V8'), + ('428', 1971, '7.0L V8'), + ('428', 1970, '7.0L V8'), + ('428', 1969, '7.0L V8'), + ('428', 1968, '7.0L V8'), + ('428', 1967, '7.0L V8'), + + # ACE + ('ACE', 1963, '2.0L L6'), + ('ACE', 1963, '2.6L L6'), + ('ACE', 1962, '2.0L L6'), + ('ACE', 1962, '2.6L L6'), + ('ACE', 1961, '2.0L L6'), + ('ACE', 1961, '2.6L L6'), + ('ACE', 1960, '2.0L L6'), + ('ACE', 1960, '2.6L L6'), + ('ACE', 1959, '2.0L L6'), + ('ACE', 1958, '2.0L L6'), + ('ACE', 1957, '2.0L L6'), + ('ACE', 1956, '2.0L L6'), + ('ACE', 1955, '2.0L L6'), + ('ACE', 1954, '2.0L L6'), + ('ACE', 1953, '2.0L L6'), + + # ACECA + ('ACECA', 1963, '2.0L L6'), + ('ACECA', 1963, '2.6L L6'), + ('ACECA', 1962, '2.0L L6'), + ('ACECA', 1962, '2.6L L6'), + ('ACECA', 1961, '2.0L L6'), + ('ACECA', 1961, '2.6L L6'), + ('ACECA', 1960, '2.0L L6'), + ('ACECA', 1960, '2.6L L6'), + ('ACECA', 1958, '2.0L L6'), + ('ACECA', 1957, '2.0L L6'), + ('ACECA', 1956, '2.0L L6'), + ('ACECA', 1955, '2.0L L6'), + + # GREYHOUND + ('GREYHOUND', 1963, '2.0L L6'), + ('GREYHOUND', 1962, '2.0L L6'), + ('GREYHOUND', 1961, '2.0L L6'), + ('GREYHOUND', 1960, '2.0L L6'), + + # TWO-LITRE + ('TWO-LITRE', 1958, '2.0L L6'), + ('TWO-LITRE', 1957, '2.0L L6'), + ('TWO-LITRE', 1956, '2.0L L6'), + ('TWO-LITRE', 1955, '2.0L L6'), + ('TWO-LITRE', 1954, '2.0L L6'), + ('TWO-LITRE', 1953, '2.0L L6'), + ('TWO-LITRE', 1952, '2.0L L6'), + ('TWO-LITRE', 1951, '2.0L L6'), + ('TWO-LITRE', 1950, '2.0L L6'), + ('TWO-LITRE', 1949, '2.0L 122cid L6'), + ('TWO-LITRE', 1948, '2.0L 122cid L6'), + ('TWO-LITRE', 1947, '2.0L 122cid L6'), + ] + + # Insertar años + years = list(set([data[1] for data in ac_data])) # Obtener años únicos + for year in years: + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + print(f"Agregados {len(years)} años") + + # Insertar motores + engines = list(set([data[2] for data in ac_data])) # Obtener motores únicos + for engine in engines: + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + print(f"Agregados {len(engines)} motores") + + # Crear combinaciones modelo-año-motor + for model_name, year, engine_name in ac_data: + # Obtener IDs + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model_name)) + model_result = cursor.fetchone() + if model_result: + model_id = model_result[0] + else: + print(f"Advertencia: Modelo {model_name} no encontrado para la marca AC") + continue + + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_result = cursor.fetchone() + if year_result: + year_id = year_result[0] + else: + print(f"Advertencia: Año {year} no encontrado") + continue + + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + engine_result = cursor.fetchone() + if engine_result: + engine_id = engine_result[0] + else: + print(f"Advertencia: Motor {engine_name} no encontrado") + continue + + # Insertar la combinación modelo-año-motor + cursor.execute( + """INSERT OR REPLACE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Se agregaron {len(ac_data)} combinaciones modelo-año-motor para AC") + print("Datos de AC agregados exitosamente a la base de datos!") + + # Mostrar algunos resultados + print("\nAlgunos vehículos AC agregados:") + cursor.execute(""" + SELECT b.name, m.name, y.year, e.name + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + WHERE b.name = 'AC' + ORDER BY m.name, y.year DESC + LIMIT 10 + """) + + results = cursor.fetchall() + for brand, model, year, engine in results: + print(f" {year} {brand} {model} - {engine}") + + except Exception as e: + print(f"Error al agregar datos de AC: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + add_ac_data() \ No newline at end of file diff --git a/add_acura_additional_data.py b/add_acura_additional_data.py new file mode 100644 index 0000000..db7f21b --- /dev/null +++ b/add_acura_additional_data.py @@ -0,0 +1,200 @@ +#!/usr/bin/env python3 +""" +Script para agregar datos adicionales de Acura a la base de datos de vehículos +""" + +import sqlite3 +import os + +def add_acura_additional_data(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Agregando datos adicionales de Acura a la base de datos...") + + try: + # Asegurar que la marca Acura exista + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", ("ACURA",)) + cursor.execute("SELECT id FROM brands WHERE name = ?", ("ACURA",)) + brand_id = cursor.fetchone()[0] + print(f"Marca ACURA tiene ID: {brand_id}") + + # Insertar modelos adicionales de Acura que pueden faltar + additional_models = [ + 'CSX', 'MDX', 'RL', 'RSX', 'TL', 'TSX', 'EL', 'CL', 'NSX', 'SLX', 'INTEGRA' + ] + + for model in additional_models: + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + print(f"Agregados {len(additional_models)} modelos de Acura (existentes o nuevos)") + + # Datos adicionales de años y motores para cada modelo + acura_additional_data = [ + # 2006 + ('CSX', 2006, '2.0L L4'), + ('MDX', 2006, '3.5L V6'), + ('RL', 2006, '3.5L V6'), + ('RSX', 2006, '2.0L L4'), + ('TL', 2006, '3.2L V6'), + ('TSX', 2006, '2.4L L4'), + + # 2005 + ('EL', 2005, '1.7L L4'), + ('MDX', 2005, '3.5L V6'), + ('NSX', 2005, '3.0L V6'), + ('RSX', 2005, '3.2L V6'), + ('RL', 2005, '3.5L V6'), + ('RSX', 2005, '2.0L L4'), + ('TL', 2005, '3.2L V6'), + ('TSX', 2005, '2.4L L4'), + + # 2004 + ('EL', 2004, '1.7L L4'), + ('MDX', 2004, '3.5L V6'), + ('NSX', 2004, '3.0L V6'), + ('RSX', 2004, '3.2L V6'), + ('RL', 2004, '3.5L V6'), + ('TL', 2004, '3.2L V6'), + ('TSX', 2004, '2.4L L4'), + + # 2003 + ('CL', 2003, '3.2L V6'), + ('EL', 2003, '1.7L L4'), + ('MDX', 2003, '3.5L V6'), + ('NSX', 2003, '3.0L V6'), + ('RL', 2003, '3.5L V6'), + ('RSX', 2003, '2.0L L4'), + ('TL', 2003, '3.2L V6'), + + # 2002 + ('CL', 2002, '3.2L V6'), + ('EL', 2002, '1.7L L4'), + ('MDX', 2002, '3.5L V6'), + ('NSX', 2002, '3.0L V6'), + ('RL', 2002, '3.5L V6'), + ('RSX', 2002, '2.0L L4'), + ('TL', 2002, '3.2L V6'), + + # 2001 + ('CL', 2001, '3.2L V6'), + ('EL', 2001, '1.7L L4'), + ('INTEGRA', 2001, '1.8L L4'), + ('MDX', 2001, '3.5L V6'), + ('NSX', 2001, '3.0L V6'), + ('RL', 2001, '3.5L V6'), + ('TL', 2001, '3.2L V6'), + + # 2000 + ('EL', 2000, '1.6L L4'), + ('INTEGRA', 2000, '1.8L L4'), + ('NSX', 2000, '3.0L V6'), + ('RL', 2000, '3.5L V6'), + ('TL', 2000, '3.2L V6'), + + # 1999 + ('CL', 1999, '2.3L L4'), + ('CL', 1999, '3.0L V6'), + ('EL', 1999, '1.6L L4'), + ('INTEGRA', 1999, '1.8L L4'), + ('NSX', 1999, '3.0L V6'), + ('RL', 1999, '3.5L V6'), + ('SLX', 1999, '3.5L V6'), + ('TL', 1999, '3.2L V6'), + + # 1998 + ('CL', 1998, '2.3L L4'), + ('CL', 1998, '3.0L V6'), + ('EL', 1998, '1.6L L4'), + ('INTEGRA', 1998, '1.8L L4'), + ('NSX', 1998, '3.0L V6'), + ('RL', 1998, '3.5L V6'), + ('SLX', 1998, '3.5L V6'), + ('TL', 1998, '2.5L L5'), + ('TL', 1998, '3.2L V6') + ] + + # Insertar años adicionales + years = list(set([data[1] for data in acura_additional_data])) # Obtener años únicos + for year in years: + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + print(f"Agregados {len(years)} años adicionales") + + # Insertar motores adicionales + engines = list(set([data[2] for data in acura_additional_data])) # Obtener motores únicos + for engine in engines: + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + print(f"Agregados {len(engines)} motores adicionales") + + # Crear combinaciones modelo-año-motor adicionales + for model_name, year, engine_name in acura_additional_data: + # Obtener IDs + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model_name)) + model_result = cursor.fetchone() + if model_result: + model_id = model_result[0] + else: + print(f"Advertencia: Modelo {model_name} no encontrado para la marca ACURA") + continue + + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_result = cursor.fetchone() + if year_result: + year_id = year_result[0] + else: + print(f"Advertencia: Año {year} no encontrado") + continue + + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + engine_result = cursor.fetchone() + if engine_result: + engine_id = engine_result[0] + else: + print(f"Advertencia: Motor {engine_name} no encontrado") + continue + + # Insertar la combinación modelo-año-motor + cursor.execute( + """INSERT OR REPLACE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Se agregaron {len(acura_additional_data)} combinaciones modelo-año-motor adicionales para ACURA") + print("Datos adicionales de ACURA agregados exitosamente a la base de datos!") + + # Mostrar algunos resultados + print("\nAlgunos vehículos ACURA adicionales agregados:") + cursor.execute(""" + SELECT b.name, m.name, y.year, e.name + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + WHERE b.name = 'ACURA' AND y.year <= 2006 + ORDER BY m.name, y.year DESC + LIMIT 15 + """) + + results = cursor.fetchall() + for brand, model, year, engine in results: + print(f" {year} {brand} {model} - {engine}") + + except Exception as e: + print(f"Error al agregar datos adicionales de ACURA: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + add_acura_additional_data() \ No newline at end of file diff --git a/add_acura_data.py b/add_acura_data.py new file mode 100644 index 0000000..4018dad --- /dev/null +++ b/add_acura_data.py @@ -0,0 +1,317 @@ +#!/usr/bin/env python3 +""" +Script para agregar datos de Acura a la base de datos de vehículos +""" + +import sqlite3 +import os + +def add_acura_data(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Agregando datos de Acura a la base de datos...") + + try: + # Insertar la marca Acura + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", ("ACURA",)) + cursor.execute("SELECT id FROM brands WHERE name = ?", ("ACURA",)) + brand_id = cursor.fetchone()[0] + print(f"Marca ACURA tiene ID: {brand_id}") + + # Insertar modelos de Acura + models = [ + 'MDX', 'ADX', 'INTEGRA', 'RDX', 'TLX', 'ZDX', 'ILX', 'NSX', 'RLX', 'TL', 'TSX', 'CSX' + ] + + for model in models: + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + print(f"Agregados {len(models)} modelos de Acura") + + # Datos de años y motores para cada modelo + acura_data = [ + # 2026 + ('MDX', 2026, '3.0L V6 Turbocharged'), + ('MDX', 2026, '3.5L V6'), + + # 2025 + ('ADX', 2025, '1.5L L4 Turbocharged'), + ('INTEGRA', 2025, '1.5L L4 Turbocharged'), + ('INTEGRA', 2025, '2.0L L4 Turbocharged'), + ('MDX', 2025, '3.0L V6 Turbocharged'), + ('MDX', 2025, '3.5L V6'), + ('RDX', 2025, '2.0L L4 Turbocharged'), + ('TLX', 2025, '2.0L L4 Turbocharged'), + ('TLX', 2025, '3.0L V6 Turbocharged'), + + # 2024 + ('INTEGRA', 2024, '1.5L L4 Turbocharged'), + ('INTEGRA', 2024, '2.0L L4 Turbocharged'), + ('MDX', 2024, '3.0L V6 Turbocharged'), + ('MDX', 2024, '3.5L V6'), + ('RDX', 2024, '2.0L L4 Turbocharged'), + ('TLX', 2024, '2.0L L4 Turbocharged'), + ('TLX', 2024, '3.0L V6 Turbocharged'), + ('ZDX', 2024, 'ELECTRIC'), + + # 2023 + ('INTEGRA', 2023, '1.5L L4 Turbocharged'), + ('MDX', 2023, '3.0L V6 Turbocharged'), + ('MDX', 2023, '3.5L V6'), + ('RDX', 2023, '2.0L L4 Turbocharged'), + ('TLX', 2023, '2.0L L4 Turbocharged'), + ('TLX', 2023, '3.0L V6 Turbocharged'), + + # 2022 + ('ILX', 2022, '2.4L L4'), + ('MDX', 2022, '3.0L V6 Turbocharged'), + ('MDX', 2022, '3.5L V6'), + ('NSX', 2022, '3.5L V6 ELECTRIC/GAS Turbocharged'), + ('RDX', 2022, '2.0L L4 Turbocharged'), + ('TLX', 2022, '2.0L L4 Turbocharged'), + ('TLX', 2022, '3.0L V6 Turbocharged'), + + # 2021 + ('ILX', 2021, '2.4L L4'), + ('NSX', 2021, '3.5L V6 ELECTRIC/GAS Turbocharged'), + ('RDX', 2021, '2.0L L4 Turbocharged'), + ('TLX', 2021, '2.0L L4 Turbocharged'), + ('TLX', 2021, '3.0L V6 Turbocharged'), + + # 2020 + ('ILX', 2020, '2.4L L4'), + ('MDX', 2020, '3.0L V6 ELECTRIC/GAS'), + ('MDX', 2020, '3.5L V6'), + ('NSX', 2020, '3.5L V6 ELECTRIC/GAS Turbocharged'), + ('RDX', 2020, '2.0L L4 Turbocharged'), + ('RLX', 2020, '3.5L V6'), + ('RLX', 2020, '3.5L V6 ELECTRIC/GAS'), + ('TLX', 2020, '2.4L L4'), + ('TLX', 2020, '3.5L V6 DOHC'), + ('TLX', 2020, '3.5L V6 SOHC'), + + # 2019 + ('ILX', 2019, '2.4L L4'), + ('MDX', 2019, '3.0L V6'), + ('MDX', 2019, '3.0L V6 ELECTRIC/GAS'), + ('MDX', 2019, '3.5L V6'), + ('NSX', 2019, '3.5L V6 ELECTRIC/GAS Turbocharged'), + ('RDX', 2019, '2.0L L4 Turbocharged'), + ('RLX', 2019, '3.5L V6'), + ('RLX', 2019, '3.5L V6 ELECTRIC/GAS'), + ('TLX', 2019, '2.4L L4'), + ('TLX', 2019, '3.5L V6'), + + # 2018 + ('ILX', 2018, '2.4L L4'), + ('MDX', 2018, '3.0L V6 ELECTRIC/GAS'), + ('MDX', 2018, '3.5L V6'), + ('NSX', 2018, '3.5L V6 ELECTRIC/GAS Turbocharged'), + ('RDX', 2018, '3.5L V6'), + ('RLX', 2018, '3.5L V6'), + ('RLX', 2018, '3.5L V6 ELECTRIC/GAS'), + ('TLX', 2018, '2.4L L4'), + ('TLX', 2018, '3.5L V6'), + + # 2017 + ('ILX', 2017, '2.4L L4'), + ('MDX', 2017, '3.0L V6 ELECTRIC/GAS'), + ('MDX', 2017, '3.5L V6'), + ('NSX', 2017, '3.5L V6 ELECTRIC/GAS Turbocharged'), + ('RDX', 2017, '3.5L V6'), + ('RLX', 2017, '3.5L V6'), + ('RLX', 2017, '3.5L V6 ELECTRIC/GAS'), + ('TLX', 2017, '2.4L L4'), + ('TLX', 2017, '3.5L V6'), + + # 2016 + ('ILX', 2016, '2.4L L4'), + ('MDX', 2016, '3.5L V6'), + ('RDX', 2016, '3.5L V6'), + ('RLX', 2016, '3.5L V6'), + ('RLX', 2016, '3.5L V6 ELECTRIC/GAS'), + ('TLX', 2016, '2.4L L4'), + ('TLX', 2016, '3.5L V6'), + + # 2015 + ('ILX', 2015, '1.5L L4 ELECTRIC/GAS'), + ('ILX', 2015, '2.0L L4'), + ('ILX', 2015, '2.4L L4'), + ('MDX', 2015, '3.5L V6'), + ('RDX', 2015, '3.5L V6'), + ('RLX', 2015, '3.5L V6'), + ('RLX', 2015, '3.5L V6 ELECTRIC/GAS'), + ('TLX', 2015, '2.4L L4'), + ('TLX', 2015, '3.5L V6'), + + # 2014 + ('ILX', 2014, '1.5L L4 ELECTRIC/GAS'), + ('ILX', 2014, '2.0L L4'), + ('ILX', 2014, '2.4L L4'), + ('MDX', 2014, '3.5L V6'), + ('RDX', 2014, '3.5L V6'), + ('RLX', 2014, '3.5L V6'), + ('RLX', 2014, '3.5L V6 ELECTRIC/GAS'), + ('TL', 2014, '3.5L V6'), + ('TSX', 2014, '2.4L L4'), + ('TSX', 2014, '3.5L V6'), + + # 2013 + ('ILX', 2013, '1.5L L4 ELECTRIC/GAS'), + ('ILX', 2013, '2.0L L4'), + ('ILX', 2013, '2.4L L4'), + ('MDX', 2013, '3.7L V6'), + ('RDX', 2013, '3.5L V6'), + ('TL', 2013, '3.5L V6'), + ('TL', 2013, '3.7L V6'), + ('TSX', 2013, '2.4L L4'), + ('TSX', 2013, '3.5L V6'), + ('ZDX', 2013, '3.7L V6'), + + # 2012 + ('MDX', 2012, '3.7L V6'), + ('RDX', 2012, '2.3L L4 Turbocharged'), + ('RL', 2012, '3.7L V6'), + ('TL', 2012, '3.5L V6'), + ('TL', 2012, '3.7L V6'), + ('TSX', 2012, '2.4L L4'), + ('TSX', 2012, '3.5L V6'), + ('ZDX', 2012, '3.7L V6'), + + # 2011 + ('CSX', 2011, '2.0L L4'), + ('MDX', 2011, '3.7L V6'), + ('RDX', 2011, '2.3L L4 Turbocharged'), + ('RL', 2011, '3.7L V6'), + ('TL', 2011, '3.5L V6'), + ('TL', 2011, '3.7L V6'), + ('TSX', 2011, '2.4L L4'), + ('TSX', 2011, '3.5L V6'), + ('ZDX', 2011, '3.7L V6'), + + # 2010 + ('CSX', 2010, '2.0L L4'), + ('MDX', 2010, '3.7L V6'), + ('RDX', 2010, '2.3L L4 Turbocharged'), + ('RL', 2010, '3.7L V6'), + ('TL', 2010, '3.5L V6'), + ('TL', 2010, '3.7L V6'), + ('TSX', 2010, '2.4L L4'), + ('TSX', 2010, '3.5L V6'), + ('ZDX', 2010, '3.7L V6'), + + # 2009 + ('CSX', 2009, '2.0L L4'), + ('MDX', 2009, '3.7L V6'), + ('RDX', 2009, '2.3L L4 Turbocharged'), + ('RL', 2009, '3.7L V6'), + ('TL', 2009, '3.5L V6'), + ('TL', 2009, '3.7L V6'), + ('TSX', 2009, '2.4L L4'), + ('TSX', 2009, '3.5L V6'), + + # 2008 + ('CSX', 2008, '2.0L L4'), + ('MDX', 2008, '3.7L V6'), + ('RDX', 2008, '2.3L L4 Turbocharged'), + ('RL', 2008, '3.5L V6'), + ('TL', 2008, '3.2L V6'), + ('TL', 2008, '3.5L V6'), + ('TSX', 2008, '2.4L L4'), + ('TSX', 2008, '3.5L V6'), + + # 2007 + ('CSX', 2007, '2.0L L4'), + ('MDX', 2007, '3.7L V6'), + ('RDX', 2007, '2.3L L4 Turbocharged'), + ('RL', 2007, '3.5L V6'), + ('TL', 2007, '3.2L V6'), + ('TL', 2007, '3.5L V6'), + ('TSX', 2007, '2.4L L4') + ] + + # Insertar años + years = list(set([data[1] for data in acura_data])) # Obtener años únicos + for year in years: + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + print(f"Agregados {len(years)} años") + + # Insertar motores + engines = list(set([data[2] for data in acura_data])) # Obtener motores únicos + for engine in engines: + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + print(f"Agregados {len(engines)} motores") + + # Crear combinaciones modelo-año-motor + for model_name, year, engine_name in acura_data: + # Obtener IDs + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model_name)) + model_result = cursor.fetchone() + if model_result: + model_id = model_result[0] + else: + print(f"Advertencia: Modelo {model_name} no encontrado para la marca ACURA") + continue + + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_result = cursor.fetchone() + if year_result: + year_id = year_result[0] + else: + print(f"Advertencia: Año {year} no encontrado") + continue + + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + engine_result = cursor.fetchone() + if engine_result: + engine_id = engine_result[0] + else: + print(f"Advertencia: Motor {engine_name} no encontrado") + continue + + # Insertar la combinación modelo-año-motor + cursor.execute( + """INSERT OR REPLACE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Se agregaron {len(acura_data)} combinaciones modelo-año-motor para ACURA") + print("Datos de ACURA agregados exitosamente a la base de datos!") + + # Mostrar algunos resultados + print("\nAlgunos vehículos ACURA agregados:") + cursor.execute(""" + SELECT b.name, m.name, y.year, e.name + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + WHERE b.name = 'ACURA' + ORDER BY m.name, y.year DESC + LIMIT 15 + """) + + results = cursor.fetchall() + for brand, model, year, engine in results: + print(f" {year} {brand} {model} - {engine}") + + except Exception as e: + print(f"Error al agregar datos de ACURA: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + add_acura_data() \ No newline at end of file diff --git a/add_acura_historical_data.py b/add_acura_historical_data.py new file mode 100644 index 0000000..155992a --- /dev/null +++ b/add_acura_historical_data.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +""" +Script para agregar datos históricos adicionales de Acura a la base de datos de vehículos +""" + +import sqlite3 +import os + +def add_acura_historical_data(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Agregando datos históricos adicionales de Acura a la base de datos...") + + try: + # Asegurar que la marca Acura exista + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", ("ACURA",)) + cursor.execute("SELECT id FROM brands WHERE name = ?", ("ACURA",)) + brand_id = cursor.fetchone()[0] + print(f"Marca ACURA tiene ID: {brand_id}") + + # Insertar modelos adicionales de Acura + additional_models = ['CL', 'INTEGRA', 'NSX', 'RL', 'SLX', 'TL', 'LEGEND', 'VIGOR'] + + for model in additional_models: + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + print(f"Agregados {len(additional_models)} modelos adicionales de Acura") + + # Datos históricos de años y motores para cada modelo + acura_historical_data = [ + # 1997 + ('CL', 1997, '2.2L L4'), + ('CL', 1997, '3.0L V6'), + ('INTEGRA', 1997, '1.8L L4'), + ('NSX', 1997, '3.0L V6'), + ('NSX', 1997, '3.2L V6'), + ('RL', 1997, '3.5L V6'), + ('SLX', 1997, '3.2L V6'), + ('TL', 1997, '2.5L L5'), + ('TL', 1997, '3.2L V6'), + + # 1996 + ('INTEGRA', 1996, '1.8L L4'), + ('NSX', 1996, '3.0L V6'), + ('RL', 1996, '3.5L V6'), + ('SLX', 1996, '3.2L V6'), + ('TL', 1996, '2.5L L5'), + ('TL', 1996, '3.2L V6'), + + # 1995 + ('INTEGRA', 1995, '1.8L L4'), + ('LEGEND', 1995, '3.2L V6'), + ('NSX', 1995, '3.0L V6'), + ('TL', 1995, '2.5L L5'), + + # 1994 + ('INTEGRA', 1994, '1.8L L4'), + ('LEGEND', 1994, '3.2L V6'), + ('NSX', 1994, '3.0L V6'), + ('VIGOR', 1994, '2.5L L5'), + + # 1993 + ('INTEGRA', 1993, '1.7L L4'), + ('INTEGRA', 1993, '1.8L L4'), + ('LEGEND', 1993, '3.2L V6'), + ('NSX', 1993, '3.0L V6'), + ('VIGOR', 1993, '2.5L L5'), + + # 1992 + ('INTEGRA', 1992, '1.7L L4'), + ('INTEGRA', 1992, '1.8L L4'), + ('LEGEND', 1992, '3.2L V6'), + ('NSX', 1992, '3.0L V6'), + ('VIGOR', 1992, '2.5L L5'), + + # 1991 + ('INTEGRA', 1991, '1.8L L4'), + ('LEGEND', 1991, '3.2L V6'), + ('NSX', 1991, '3.0L V6'), + + # 1990 + ('INTEGRA', 1990, '1.8L L4'), + ('LEGEND', 1990, '2.7L V6'), + + # 1989 + ('INTEGRA', 1989, '1.6L L4'), + ('LEGEND', 1989, '2.7L V6'), + + # 1988 + ('INTEGRA', 1988, '1.6L L4'), + ('LEGEND', 1988, '2.7L V6'), + + # 1987 + ('INTEGRA', 1987, '1.6L L4'), + ('LEGEND', 1987, '2.5L V6'), + ('LEGEND', 1987, '2.7L V6'), + + # 1986 + ('INTEGRA', 1986, '1.6L L4'), + ('LEGEND', 1986, '2.5L V6'), + ('LEGEND', 1986, '2.7L V6') + ] + + # Insertar años históricos + years = list(set([data[1] for data in acura_historical_data])) # Obtener años únicos + for year in years: + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + print(f"Agregados {len(years)} años históricos adicionales") + + # Insertar motores históricos + engines = list(set([data[2] for data in acura_historical_data])) # Obtener motores únicos + for engine in engines: + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + print(f"Agregados {len(engines)} motores históricos adicionales") + + # Crear combinaciones modelo-año-motor históricas + for model_name, year, engine_name in acura_historical_data: + # Obtener IDs + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model_name)) + model_result = cursor.fetchone() + if model_result: + model_id = model_result[0] + else: + print(f"Advertencia: Modelo {model_name} no encontrado para la marca ACURA") + continue + + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_result = cursor.fetchone() + if year_result: + year_id = year_result[0] + else: + print(f"Advertencia: Año {year} no encontrado") + continue + + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + engine_result = cursor.fetchone() + if engine_result: + engine_id = engine_result[0] + else: + print(f"Advertencia: Motor {engine_name} no encontrado") + continue + + # Insertar la combinación modelo-año-motor + cursor.execute( + """INSERT OR REPLACE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Se agregaron {len(acura_historical_data)} combinaciones modelo-año-motor históricas adicionales para ACURA") + print("Datos históricos adicionales de ACURA agregados exitosamente a la base de datos!") + + # Mostrar algunos resultados + print("\nAlgunos vehículos ACURA históricos adicionales agregados:") + cursor.execute(""" + SELECT b.name, m.name, y.year, e.name + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + WHERE b.name = 'ACURA' AND y.year BETWEEN 1986 AND 1997 + ORDER BY y.year DESC, m.name + LIMIT 15 + """) + + results = cursor.fetchall() + for brand, model, year, engine in results: + print(f" {year} {brand} {model} - {engine}") + + except Exception as e: + print(f"Error al agregar datos históricos adicionales de ACURA: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + add_acura_historical_data() \ No newline at end of file diff --git a/add_alfa_romeo_data.py b/add_alfa_romeo_data.py new file mode 100644 index 0000000..2da47e9 --- /dev/null +++ b/add_alfa_romeo_data.py @@ -0,0 +1,308 @@ +#!/usr/bin/env python3 +""" +Script para agregar datos de Alfa Romeo a la base de datos de vehículos +""" + +import sqlite3 +import os + +def add_alfa_romeo_data(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Agregando datos de Alfa Romeo a la base de datos...") + + try: + # Insertar la marca Alfa Romeo + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", ("ALFA ROMEO",)) + cursor.execute("SELECT id FROM brands WHERE name = ?", ("ALFA ROMEO",)) + brand_id = cursor.fetchone()[0] + print(f"Marca ALFA ROMEO tiene ID: {brand_id}") + + # Insertar modelos de Alfa Romeo (incluyendo GIULIA que aparece en los datos) + models = [ + '4C', 'GIULIETTA', 'MITO', '159', '8C', 'BRERA', 'GT', 'SPIDER', + '147', '156', '166', 'SPORTWAGON', '164', 'MILANO', 'GTV-6', + 'STELVIO', 'TONALE', 'GIULIA' # Agregué GIULIA que aparece en los datos + ] + + for model in models: + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + print(f"Agregados {len(models)} modelos de Alfa Romeo") + + # Datos de años y motores para cada modelo + alfa_data = [ + # 2025 + ('GIULIA', 2025, '2.0L L4 Turbocharged'), + ('STELVIO', 2025, '2.0L L4 Turbocharged'), + ('TONALE', 2025, '1.3L L4 ELECTRIC/GAS Turbocharged SOHC'), + ('TONALE', 2025, '2.0L L4 Turbocharged'), + + # 2024 + ('GIULIA', 2024, '2.0L L4 Turbocharged'), + ('STELVIO', 2024, '2.0L L4 Turbocharged'), + ('TONALE', 2024, '1.3L L4 ELECTRIC/GAS Turbocharged'), + ('TONALE', 2024, '2.0L L4 Turbocharged'), + + # 2023 + ('GIULIA', 2023, '2.0L L4 Turbocharged'), + ('STELVIO', 2023, '2.0L L4 Turbocharged'), + ('STELVIO', 2023, '2.9L V6 Turbocharged'), + + # 2022 + ('GIULIA', 2022, '2.0L L4 Turbocharged'), + ('STELVIO', 2022, '2.0L L4 Turbocharged'), + ('STELVIO', 2022, '2.9L V6 Turbocharged'), + + # 2021 + ('GIULIA', 2021, '2.0L L4 Turbocharged'), + ('GIULIA', 2021, '2.9L V6 Turbocharged'), + ('GIULIETTA', 2021, '1.7L L4 Turbocharged'), + ('STELVIO', 2021, '2.0L L4 Turbocharged'), + ('STELVIO', 2021, '2.9L V6 Turbocharged'), + + # 2020 + ('4C', 2020, '1.7L L4 Turbocharged'), + ('GIULIA', 2020, '2.0L L4 Turbocharged'), + ('GIULIA', 2020, '2.9L V6 Turbocharged'), + ('GIULIETTA', 2020, '1.7L L4 Turbocharged'), + ('STELVIO', 2020, '2.0L L4 Turbocharged'), + ('STELVIO', 2020, '2.9L V6 Turbocharged'), + + # 2019 + ('4C', 2019, '1.7L L4 Turbocharged'), + ('GIULIA', 2019, '2.0L L4 Turbocharged'), + ('GIULIA', 2019, '2.9L V6 Turbocharged'), + ('GIULIETTA', 2019, '1.7L L4 Turbocharged'), + ('MITO', 2019, '1.4L L4 Turbocharged'), + ('STELVIO', 2019, '2.0L L4 Turbocharged'), + ('STELVIO', 2019, '2.9L V6 Turbocharged'), + + # 2018 + ('4C', 2018, '1.7L L4 Turbocharged'), + ('GIULIA', 2018, '2.0L L4 Turbocharged'), + ('GIULIA', 2018, '2.9L V6 Turbocharged'), + ('GIULIETTA', 2018, '1.7L L4 Turbocharged'), + ('MITO', 2018, '1.4L L4 Turbocharged'), + ('STELVIO', 2018, '2.0L L4 Turbocharged'), + ('STELVIO', 2018, '2.9L V6 Turbocharged'), + + # 2017 + ('4C', 2017, '1.7L L4 Turbocharged'), + ('GIULIA', 2017, '2.0L L4 Turbocharged'), + ('GIULIA', 2017, '2.9L V6 Turbocharged'), + ('GIULIETTA', 2017, '1.7L L4 Turbocharged'), + ('MITO', 2017, '1.4L L4 Turbocharged'), + ('STELVIO', 2017, '2.0L L4 Turbocharged'), + ('STELVIO', 2017, '2.9L V6 Turbocharged'), + + # 2016 + ('4C', 2016, '1.7L L4 Turbocharged'), + ('GIULIA', 2016, '2.0L L4 Turbocharged'), + ('GIULIA', 2016, '2.9L V6 Turbocharged'), + ('GIULIETTA', 2016, '1.7L L4 Turbocharged'), + ('MITO', 2016, '1.4L L4 Turbocharged'), + ('STELVIO', 2016, '2.0L L4 Turbocharged'), + ('STELVIO', 2016, '2.9L V6 Turbocharged'), + + # 2015 + ('4C', 2015, '1.7L L4 Turbocharged'), + ('GIULIETTA', 2015, '1.7L L4 Turbocharged'), + ('GIULIETTA', 2015, '1.8L L4 Turbocharged'), + ('MITO', 2015, '1.4L L4 Turbocharged'), + + # 2014 + ('GIULIETTA', 2014, '1.7L L4 Turbocharged'), + + # 2013 + ('GIULIETTA', 2013, '1.7L L4 Turbocharged'), + ('MITO', 2013, '1.4L L4 Turbocharged'), + + # 2012 + ('159', 2012, '2.2L L4'), + ('159', 2012, '3.2L V6'), + ('GIULIETTA', 2012, '1.8L L4 Turbocharged'), + ('MITO', 2012, '1.4L L4 Turbocharged'), + + # 2008 + ('159', 2008, '2.2L L4'), + ('8C', 2008, '4.7L V8'), + ('BRERA', 2008, '3.2L V6'), + ('GT', 2008, '2.0L L4'), + ('SPIDER', 2008, '3.2L V6'), + + # 2007 + ('147', 2007, '2.0L L4'), + ('159', 2007, '2.2L L4'), + ('159', 2007, '3.2L V6'), + ('BRERA', 2007, '3.2L V6'), + ('GT', 2007, '2.0L L4'), + ('SPIDER', 2007, '3.2L V6'), + + # 2005 + ('147', 2005, '2.0L L4'), + + # 2004 + ('147', 2004, '2.0L L4'), + + # 2003 + ('147', 2003, '2.0L L4'), + ('166', 2003, '3.0L V6'), + ('GTV', 2003, '3.0L V6'), # Nota: En los datos originales dice 'GTV', pero en modelos dice 'GTV-6' + ('SPIDER', 2003, '3.0L V6'), + + # 2002 + ('147', 2002, '2.0L L4'), + ('156', 2002, '2.0L L4'), + ('166', 2002, '3.0L V6'), + ('SPORTWAGON', 2002, '2.0L L4'), + + # 1995 + ('164', 1995, '3.0L V6'), + + # 1994 + ('164', 1994, '3.0L V6'), + ('SPIDER', 1994, '2.0L L4'), + + # 1993 + ('164', 1993, '3.0L V6'), + ('SPIDER', 1993, '2.0L L4'), + + # 1992 + ('164', 1992, '3.0L V6'), + ('SPIDER', 1992, '2.0L L4'), + + # 1991 + ('164', 1991, '2.0L L4'), + + # 1990 + ('SPIDER', 1990, '2.0L L4'), + + # 1989 + ('MILANO', 1989, '2.5L V6'), + ('MILANO', 1989, '3.0L V6'), + ('SPIDER', 1989, '2.0L L4'), + + # 1988 + ('MILANO', 1988, '2.5L V6'), + ('MILANO', 1988, '3.0L V6'), + ('SPIDER', 1988, '2.0L L4'), + + # 1987 + ('MILANO', 1987, '2.5L V6'), + ('MILANO', 1987, '3.0L V6'), + ('SPIDER', 1987, '2.0L L4'), + + # 1986 + ('GTV-6', 1986, '2.5L V6'), + ('SPIDER', 1986, '2.0L L4'), + + # 1985 + ('GTV-6', 1985, '2.5L V6'), + ('SPIDER', 1985, '2.0L L4'), + + # 1984 + ('GTV-6', 1984, '2.5L V6'), + ('SPIDER', 1984, '2.0L L4'), + + # 1983 + ('GTV-6', 1983, '2.5L V6'), + ('SPIDER', 1983, '2.0L L4'), + + # 1982 + ('GTV-6', 1982, '2.5L V6'), + ('SPIDER', 1982, '2.0L L4'), + + # 1981 + ('GTV-6', 1981, '2.5L V6'), + ('SPIDER', 1981, '2.0L L4'), + + # 1980 + ('SPIDER', 1980, '2.0L L4') + ] + + # Insertar años + years = list(set([data[1] for data in alfa_data])) # Obtener años únicos + for year in years: + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + print(f"Agregados {len(years)} años") + + # Insertar motores + engines = list(set([data[2] for data in alfa_data])) # Obtener motores únicos + for engine in engines: + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + print(f"Agregados {len(engines)} motores") + + # Crear combinaciones modelo-año-motor + for model_name, year, engine_name in alfa_data: + # Obtener IDs + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model_name)) + model_result = cursor.fetchone() + if model_result: + model_id = model_result[0] + else: + print(f"Advertencia: Modelo {model_name} no encontrado para la marca ALFA ROMEO") + continue + + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_result = cursor.fetchone() + if year_result: + year_id = year_result[0] + else: + print(f"Advertencia: Año {year} no encontrado") + continue + + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + engine_result = cursor.fetchone() + if engine_result: + engine_id = engine_result[0] + else: + print(f"Advertencia: Motor {engine_name} no encontrado") + continue + + # Insertar la combinación modelo-año-motor + cursor.execute( + """INSERT OR REPLACE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Se agregaron {len(alfa_data)} combinaciones modelo-año-motor para ALFA ROMEO") + print("Datos de ALFA ROMEO agregados exitosamente a la base de datos!") + + # Mostrar algunos resultados + print("\nAlgunos vehículos ALFA ROMEO agregados:") + cursor.execute(""" + SELECT b.name, m.name, y.year, e.name + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + WHERE b.name = 'ALFA ROMEO' + ORDER BY y.year DESC, m.name + LIMIT 15 + """) + + results = cursor.fetchall() + for brand, model, year, engine in results: + print(f" {year} {brand} {model} - {engine}") + + except Exception as e: + print(f"Error al agregar datos de ALFA ROMEO: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + add_alfa_romeo_data() \ No newline at end of file diff --git a/add_american_motors_data.py b/add_american_motors_data.py new file mode 100644 index 0000000..58a33c4 --- /dev/null +++ b/add_american_motors_data.py @@ -0,0 +1,279 @@ +""" +Script to add American Motors Corporation (AMC) vehicle data to the database. +This includes inserting the brand, models, and year/motor combinations. +""" +import sqlite3 +from typing import List, Tuple + + +def connect_db(db_path: str = "vehicle_database/vehicle_database.db") -> sqlite3.Connection: + """Connect to the vehicle database.""" + conn = sqlite3.connect(db_path) + conn.execute("PRAGMA foreign_keys = ON") # Enable foreign key constraints + return conn + + +def insert_brand(conn: sqlite3.Connection, brand_name: str) -> int: + """Insert a brand if it doesn't exist and return its ID.""" + cursor = conn.cursor() + + # Check if brand already exists + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new brand + cursor.execute("INSERT INTO brands (name) VALUES (?)", (brand_name,)) + conn.commit() + return cursor.lastrowid + + +def insert_models(conn: sqlite3.Connection, brand_id: int, models: List[str]) -> None: + """Insert models if they don't exist.""" + cursor = conn.cursor() + + for model_name in models: + # Check if model already exists for this brand + cursor.execute( + "SELECT id FROM models WHERE brand_id = ? AND name = ?", + (brand_id, model_name) + ) + result = cursor.fetchone() + + if not result: + # Insert new model + cursor.execute( + "INSERT INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model_name) + ) + + conn.commit() + + +def get_or_insert_engine(conn: sqlite3.Connection, engine_name: str) -> int: + """Get engine ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if engine already exists + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new engine + cursor.execute("INSERT INTO engines (name) VALUES (?)", (engine_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_year(conn: sqlite3.Connection, year: int) -> int: + """Get year ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if year already exists + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new year + cursor.execute("INSERT INTO years (year) VALUES (?)", (year,)) + conn.commit() + return cursor.lastrowid + + +def insert_versions(conn: sqlite3.Connection, versions: List[Tuple]) -> None: + """Insert vehicle versions if they don't exist.""" + cursor = conn.cursor() + + for model_name, year, engine in versions: + # Get model ID + cursor.execute( + "SELECT m.id FROM models m JOIN brands ma ON m.brand_id = ma.id " + "WHERE ma.name = 'AMERICAN MOTORS' AND m.name = ?", + (model_name,) + ) + model_result = cursor.fetchone() + + if model_result: + model_id = model_result[0] + + # Get or insert year + year_id = get_or_insert_year(conn, year) + + # Get or insert engine + engine_id = get_or_insert_engine(conn, engine) + + # Check if version relationship already exists + cursor.execute( + "SELECT id FROM model_year_engine WHERE model_id = ? AND year_id = ? AND engine_id = ?", + (model_id, year_id, engine_id) + ) + version_result = cursor.fetchone() + + if not version_result: + # Insert new version relationship + cursor.execute( + "INSERT INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + + conn.commit() + + +def main(): + """Main function to add American Motors Corporation data.""" + print("Adding American Motors Corporation data...") + + # Connect to database + conn = connect_db() + + # Insert brand + brand_id = insert_brand(conn, "AMERICAN MOTORS") + print(f"Brand 'AMERICAN MOTORS' inserted with ID: {brand_id}") + + # Define models + models = [ + 'GREMLIN', + 'HORNET', + 'MATADOR', + 'PACER', + 'AMX', + 'CONCORD', + 'EAGLE', + 'SPIRIT' + ] + + # Insert models + insert_models(conn, brand_id, models) + print(f"Models inserted for AMERICAN MOTORS: {', '.join(models)}") + + # Define versions (model, year, engine) + versions = [ + # 1988 + ('EAGLE', 1988, '4.2L 258cid L6'), + + # 1987 + ('EAGLE', 1987, '4.2L 258cid L6'), + + # 1986 + ('EAGLE', 1986, '4.2L 258cid L6'), + + # 1985 + ('EAGLE', 1985, '4.2L 258cid L6'), + + # 1984 + ('EAGLE', 1984, '2.5L 150cid L4'), + ('EAGLE', 1984, '4.2L 258cid L6'), + + # 1983 + ('CONCORD', 1983, '2.5L 151cid L4'), + ('CONCORD', 1983, '4.2L 258cid L6'), + ('EAGLE', 1983, '2.5L 151cid L4'), + ('EAGLE', 1983, '4.2L 258cid L6'), + ('SPIRIT', 1983, '2.5L 151cid L4'), + ('SPIRIT', 1983, '4.2L 258cid L6'), + + # 1982 + ('CONCORD', 1982, '2.5L 151cid L4'), + ('CONCORD', 1982, '4.2L 258cid L6'), + ('EAGLE', 1982, '2.5L 151cid L4'), + ('EAGLE', 1982, '4.2L 258cid L6'), + ('SPIRIT', 1982, '2.5L 151cid L4'), + ('SPIRIT', 1982, '4.2L 258cid L6'), + + # 1981 + ('CONCORD', 1981, '2.5L 151cid L4'), + ('CONCORD', 1981, '4.2L 258cid L6'), + ('EAGLE', 1981, '2.5L 151cid L4'), + ('EAGLE', 1981, '4.2L 258cid L6'), + ('SPIRIT', 1981, '2.5L 151cid L4'), + ('SPIRIT', 1981, '4.2L 258cid L6'), + + # 1980 + ('AMX', 1980, '4.2L 258cid L6'), + ('CONCORD', 1980, '2.5L 151cid L4'), + ('CONCORD', 1980, '4.2L 258cid L6'), + ('EAGLE', 1980, '2.5L 151cid L4'), + ('EAGLE', 1980, '4.2L 258cid L6'), + ('PACER', 1980, '4.2L 258cid L6'), + ('SPIRIT', 1980, '2.5L 151cid L4'), + ('SPIRIT', 1980, '4.2L 258cid L6'), + + # 1979 + ('AMX', 1979, '4.2L 258cid L6'), + ('CONCORD', 1979, '2.0L 121cid L4'), + ('CONCORD', 1979, '3.8L 232cid L6'), + ('CONCORD', 1979, '4.2L 258cid L6'), + ('EAGLE', 1979, '2.5L 151cid L4'), + ('EAGLE', 1979, '4.2L 258cid L6'), + ('PACER', 1979, '4.2L 258cid L6'), + ('SPIRIT', 1979, '2.5L 151cid L4'), + ('SPIRIT', 1979, '4.2L 258cid L6'), + + # 1978 + ('AMX', 1978, '4.2L 258cid L6'), + ('CONCORD', 1978, '2.0L 121cid L4'), + ('CONCORD', 1978, '3.8L 232cid L6'), + ('CONCORD', 1978, '4.2L 258cid L6'), + ('EAGLE', 1978, '2.5L 151cid L4'), + ('EAGLE', 1978, '4.2L 258cid L6'), + ('PACER', 1978, '4.2L 258cid L6'), + ('SPIRIT', 1978, '2.5L 151cid L4'), + ('SPIRIT', 1978, '4.2L 258cid L6'), + + # 1977 + ('GREMLIN', 1977, '2.0L 121cid L4'), + ('GREMLIN', 1977, '3.8L 232cid L6'), + ('GREMLIN', 1977, '4.2L 258cid L6'), + ('HORNET', 1977, '3.8L 232cid L6'), + ('HORNET', 1977, '4.2L 258cid L6'), + ('HORNET', 1977, '5.0L 304cid V8'), + ('MATADOR', 1977, '4.2L 258cid L6'), + ('MATADOR', 1977, '5.0L 304cid V8'), + ('MATADOR', 1977, '5.9L 360cid V8'), + ('PACER', 1977, '3.8L 232cid L6'), + ('PACER', 1977, '4.2L 258cid L6'), + + # 1976 + ('GREMLIN', 1976, '3.8L 232cid L6'), + ('GREMLIN', 1976, '4.2L 258cid L6'), + ('GREMLIN', 1976, '5.0L 304cid V8'), + ('HORNET', 1976, '3.8L 232cid L6'), + ('HORNET', 1976, '4.2L 258cid L6'), + ('HORNET', 1976, '5.0L 304cid V8'), + ('MATADOR', 1976, '4.2L 258cid L6'), + ('MATADOR', 1976, '5.0L 304cid V8'), + ('MATADOR', 1976, '5.9L 360cid V8'), + ('PACER', 1976, '3.8L 232cid L6'), + ('PACER', 1976, '4.2L 258cid L6'), + + # 1975 + ('GREMLIN', 1975, '3.8L 232cid L6'), + ('GREMLIN', 1975, '4.2L 258cid L6'), + ('GREMLIN', 1975, '5.0L 304cid V8'), + ('HORNET', 1975, '3.8L 232cid L6'), + ('HORNET', 1975, '4.2L 258cid L6'), + ('HORNET', 1975, '5.0L 304cid V8'), + ('MATADOR', 1975, '4.2L 258cid L6'), + ('MATADOR', 1975, '5.0L 304cid V8'), + ('MATADOR', 1975, '5.9L 360cid V8'), + ('PACER', 1975, '3.8L 232cid L6'), + ('PACER', 1975, '4.2L 258cid L6') + ] + + # Insert versions + insert_versions(conn, versions) + print(f"Inserted {len(versions)} versions for AMERICAN MOTORS vehicles") + + # Close connection + conn.close() + print("American Motors Corporation data added successfully!") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/add_aston_martin_data.py b/add_aston_martin_data.py new file mode 100644 index 0000000..757b75c --- /dev/null +++ b/add_aston_martin_data.py @@ -0,0 +1,445 @@ +""" +Script to add Aston Martin vehicle data to the database. +This includes inserting the brand, models, and year/motor combinations. +""" +import sqlite3 +from typing import List, Tuple + + +def connect_db(db_path: str = "vehicle_database/vehicle_database.db") -> sqlite3.Connection: + """Connect to the vehicle database.""" + conn = sqlite3.connect(db_path) + conn.execute("PRAGMA foreign_keys = ON") # Enable foreign key constraints + return conn + + +def get_or_insert_brand(conn: sqlite3.Connection, brand_name: str) -> int: + """Get brand ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if brand already exists + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new brand + cursor.execute("INSERT INTO brands (name) VALUES (?)", (brand_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_model(conn: sqlite3.Connection, brand_id: int, model_name: str) -> int: + """Get model ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if model already exists for this brand + cursor.execute( + "SELECT id FROM models WHERE brand_id = ? AND name = ?", + (brand_id, model_name) + ) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new model + cursor.execute( + "INSERT INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model_name) + ) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_engine(conn: sqlite3.Connection, engine_name: str) -> int: + """Get engine ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if engine already exists + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new engine + cursor.execute("INSERT INTO engines (name) VALUES (?)", (engine_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_year(conn: sqlite3.Connection, year: int) -> int: + """Get year ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if year already exists + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new year + cursor.execute("INSERT INTO years (year) VALUES (?)", (year,)) + conn.commit() + return cursor.lastrowid + + +def insert_version_relationship(conn: sqlite3.Connection, model_id: int, year_id: int, engine_id: int) -> None: + """Insert a version relationship if it doesn't exist.""" + cursor = conn.cursor() + + # Check if version relationship already exists + cursor.execute( + "SELECT id FROM model_year_engine WHERE model_id = ? AND year_id = ? AND engine_id = ?", + (model_id, year_id, engine_id) + ) + result = cursor.fetchone() + + if not result: + # Insert new version relationship + cursor.execute( + "INSERT INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + conn.commit() + + +def main(): + """Main function to add Aston Martin data.""" + print("Adding Aston Martin data...") + + # Connect to database + conn = connect_db() + + # Insert brand + brand_id = get_or_insert_brand(conn, "ASTON MARTIN") + print(f"Brand 'ASTON MARTIN' inserted with ID: {brand_id}") + + # Define models + models = [ + 'LAGONDA', + 'ZAGATO', + 'DB7', + 'VANTAGE', + 'VIRAGE', + 'VANQUISH', + 'DB9', + 'DBS', + 'RAPIDE', + 'ONE-77', + 'V12 VANTAGE', + 'DB11', + 'DBX', + 'DB12', + 'VALHALLA', + 'VALOUR', + 'ARRA' + ] + + # Insert models + for model_name in models: + model_id = get_or_insert_model(conn, brand_id, model_name) + print(f"Models inserted for ASTON MARTIN: {', '.join(models)}") + + # Define versions (model, year, engine) + versions = [ + # 2025 + ('DB12', 2025, '4.0L V8 Turbocharged'), + ('DBX707', 2025, '4.0L V8 Turbocharged'), + ('VALHALLA', 2025, '4.0L V8 ELECTRIC/GAS Turbocharged'), + ('VANQUISH', 2025, '5.2L V12 Turbocharged'), + ('VANTAGE', 2025, '4.0L V8 Turbocharged'), + ('VANTAGE', 2025, '5.2L V12 Turbocharged'), + + # 2024 + ('DB12', 2024, '4.0L V8 Turbocharged'), + ('DBS', 2024, '5.2L V12 Turbocharged'), + ('DBX', 2024, '4.0L V8 Turbocharged'), + ('DBX707', 2024, '4.0L V8 Turbocharged'), + ('VALOUR', 2024, '5.2L V12 Turbocharged'), + ('VANTAGE', 2024, '4.0L V8 Turbocharged'), + ('VANTAGE', 2024, '5.2L V12 Turbocharged'), + + # 2023 + ('DB11', 2023, '4.0L V8 Turbocharged'), + ('DBS', 2023, '5.2L V12 Turbocharged'), + ('DBX', 2023, '4.0L V8 Turbocharged'), + ('DBX707', 2023, '4.0L V8 Turbocharged'), + ('VANTAGE', 2023, '4.0L V8 Turbocharged'), + ('VANTAGE', 2023, '5.2L V12 Turbocharged'), + + # 2022 + ('DB11', 2022, '4.0L V8 Turbocharged'), + ('DBS', 2022, '5.2L V12 Turbocharged'), + ('DBX', 2022, '4.0L V8 Turbocharged'), + ('VANTAGE', 2022, '4.0L V8 Turbocharged'), + ('VANTAGE', 2022, '5.2L V12 Turbocharged'), + + # 2021 + ('DB11', 2021, '4.0L V8 Turbocharged'), + ('DBS', 2021, '5.2L V12 Turbocharged'), + ('DBX', 2021, '4.0L V8 Turbocharged'), + ('VANTAGE', 2021, '4.0L V8 Turbocharged'), + ('VANTAGE', 2021, '5.2L V12 Turbocharged'), + + # 2020 + ('DB11', 2020, '4.0L V8 Turbocharged'), + ('DBS', 2020, '5.2L V12 Turbocharged'), + ('VANTAGE', 2020, '4.0L V8 Turbocharged'), + ('VANTAGE', 2020, '5.2L V12 Turbocharged'), + + # 2019 + ('DB11', 2019, '4.0L V8 Turbocharged'), + ('DBS', 2019, '5.2L V12 Turbocharged'), + ('RAPIDE', 2019, '4.0L V8 Turbocharged'), + ('VANTAGE', 2019, '4.0L V8 Turbocharged'), + + # 2018 + ('DB11', 2018, '4.0L V8 Turbocharged'), + ('RAPIDE', 2018, '4.0L V8 Turbocharged'), + ('VANTAGE', 2018, '4.0L V8 Turbocharged'), + + # 2017 + ('DB11', 2017, '5.2L V12 Turbocharged'), + ('RAPIDE', 2017, '6.0L V12'), + ('V12 VANTAGE', 2017, '6.0L V12'), + ('V8 VANTAGE', 2017, '4.7L V8'), + ('VANQUISH', 2017, '6.0L V12'), + + # 2016 + ('DB9', 2016, '6.0L V12'), + ('RAPIDE', 2016, '6.0L V12'), + ('V12 VANTAGE', 2016, '6.0L V12'), + ('V8 VANTAGE', 2016, '4.7L V8'), + ('VANQUISH', 2016, '6.0L V12'), + + # 2015 + ('DB9', 2015, '6.0L V12'), + ('RAPIDE', 2015, '6.0L V12'), + ('V12 VANTAGE', 2015, '6.0L V12'), + ('V8 VANTAGE', 2015, '4.7L V8'), + ('VANQUISH', 2015, '6.0L V12'), + + # 2014 + ('DB9', 2014, '6.0L V12'), + ('RAPIDE', 2014, '6.0L V12'), + ('V12 VANTAGE', 2014, '6.0L V12'), + ('V8 VANTAGE', 2014, '4.7L V8'), + ('VANQUISH', 2014, '6.0L V12'), + + # 2013 + ('DB9', 2013, '6.0L V12'), + ('DBS', 2013, '6.0L V12'), + ('RAPIDE', 2013, '6.0L V12'), + ('V12 VANTAGE', 2013, '6.0L V12'), + ('V8 VANTAGE', 2013, '4.7L V8'), + ('VANQUISH', 2013, '6.0L V12'), + + # 2012 + ('DB9', 2012, '6.0L V12'), + ('DBS', 2012, '6.0L V12'), + ('RAPIDE', 2012, '6.0L V12'), + ('V12 VANTAGE', 2012, '6.0L V12'), + ('V8 VANTAGE', 2012, '4.7L V8'), + ('VANQUISH', 2012, '6.0L V12'), + + # 2011 + ('DB9', 2011, '6.0L V12'), + ('DBS', 2011, '6.0L V12'), + ('ONE-77', 2011, '7.3L V12'), + ('RAPIDE', 2011, '6.0L V12'), + ('V12 VANTAGE', 2011, '6.0L V12'), + ('V8 VANTAGE', 2011, '4.7L V8'), + ('VANQUISH', 2011, '6.0L V12'), + + # 2010 + ('DB9', 2010, '6.0L V12'), + ('DBS', 2010, '6.0L V12'), + ('RAPIDE', 2010, '6.0L V12'), + ('V12 VANTAGE', 2010, '6.0L V12'), + ('V8 VANTAGE', 2010, '4.7L V8'), + ('VANQUISH', 2010, '6.0L V12'), + + # 2009 + ('DB9', 2009, '6.0L V12'), + ('DBS', 2009, '6.0L V12'), + ('V12 VANTAGE', 2009, '6.0L V12'), + ('V8 VANTAGE', 2009, '4.3L V8'), + ('V8 VANTAGE', 2009, '4.7L V8'), + ('VANQUISH', 2009, '6.0L V12'), + + # 2008 + ('DB9', 2008, '6.0L V12'), + ('DBS', 2008, '6.0L V12'), + ('V12 VANTAGE', 2008, '6.0L V12'), + ('V8 VANTAGE', 2008, '4.3L V8'), + ('V8 VANTAGE', 2008, '4.7L V8'), + ('VANQUISH', 2008, '6.0L V12'), + + # 2007 + ('DB9', 2007, '6.0L V12'), + ('V12 VANTAGE', 2007, '6.0L V12'), + ('V8 VANTAGE', 2007, '4.3L V8'), + ('VANQUISH', 2007, '6.0L V12'), + + # 2006 + ('DB9', 2006, '6.0L V12'), + ('V12 VANTAGE', 2006, '6.0L V12'), + ('V8 VANTAGE', 2006, '4.3L V8'), + ('VANQUISH', 2006, '6.0L V12'), + + # 2005 + ('DB7', 2005, '5.9L V12'), + ('DB9', 2005, '6.0L V12'), + ('VANQUISH', 2005, '6.0L V12'), + + # 2004 + ('DB7', 2004, '5.9L V12'), + ('DB9', 2004, '6.0L V12'), + ('VANQUISH', 2004, '6.0L V12'), + + # 2003 + ('DB7', 2003, '5.9L V12'), + ('DB9', 2003, '6.0L V12'), + ('VANQUISH', 2003, '6.0L V12'), + + # 2002 + ('DB7', 2002, '5.9L V12'), + ('VANQUISH', 2002, '6.0L V12'), + + # 2001 + ('DB7', 2001, '5.9L V12'), + ('VANQUISH', 2001, '6.0L V12'), + + # 2000 + ('DB7', 2000, '3.2L L6 Supercharged'), + ('DB7', 2000, '5.9L V12'), + ('VANQUISH', 2000, '6.0L V12'), + + # 1999 + ('DB7', 1999, '3.2L L6 Supercharged'), + ('DB7', 1999, '5.9L V12'), + + # 1998 + ('DB7', 1998, '3.2L L6 Supercharged'), + ('DB7', 1998, '5.9L V12'), + + # 1997 + ('DB7', 1997, '3.2L L6 Supercharged'), + ('DB7', 1997, '5.9L V12'), + + # 1995 + ('VIRAGE', 1995, '5.3L V8'), + + # 1994 + ('VIRAGE', 1994, '5.3L V8'), + + # 1993 + ('VIRAGE', 1993, '5.3L V8'), + + # 1992 + ('VIRAGE', 1992, '5.3L V8'), + + # 1991 + ('VIRAGE', 1991, '5.3L V8'), + + # 1990 + ('VIRAGE', 1990, '5.3L V8'), + + # 1989 + ('LAGONDA', 1989, '5.3L V8'), + ('VIRAGE', 1989, '5.3L V8'), + + # 1988 + ('LAGONDA', 1988, '5.3L V8'), + ('VIRAGE', 1988, '5.3L V8'), + ('ZAGATO', 1988, '5.3L V8'), + + # 1987 + ('LAGONDA', 1987, '5.3L V8'), + ('VIRAGE', 1987, '5.3L V8'), + ('ZAGATO', 1987, '5.3L V8'), + + # 1986 + ('LAGONDA', 1986, '5.3L V8'), + ('VIRAGE', 1986, '5.3L V8'), + ('ZAGATO', 1986, '5.3L V8'), + + # 1985 + ('LAGONDA', 1985, '5.3L V8'), + ('VIRAGE', 1985, '5.3L V8'), + ('ZAGATO', 1985, '5.3L V8'), + + # 1984 + ('LAGONDA', 1984, '5.3L V8'), + ('VIRAGE', 1984, '5.3L V8'), + ('ZAGATO', 1984, '5.3L V8'), + + # 1983 + ('LAGONDA', 1983, '5.3L V8'), + ('VIRAGE', 1983, '5.3L V8'), + ('ZAGATO', 1983, '5.3L V8'), + + # 1982 + ('LAGONDA', 1982, '5.3L V8'), + ('VIRAGE', 1982, '5.3L V8'), + ('ZAGATO', 1982, '5.3L V8'), + + # 1981 + ('LAGONDA', 1981, '5.3L V8'), + ('VIRAGE', 1981, '5.3L V8'), + ('ZAGATO', 1981, '5.3L V8'), + + # 1980 + ('LAGONDA', 1980, '5.3L V8'), + ('VIRAGE', 1980, '5.3L V8'), + ('ZAGATO', 1980, '5.3L V8'), + + # 1979 + ('LAGONDA', 1979, '5.3L V8'), + ('VIRAGE', 1979, '5.3L V8'), + ('ZAGATO', 1979, '5.3L V8'), + + # 1978 + ('LAGONDA', 1978, '5.3L V8'), + ('VIRAGE', 1978, '5.3L V8'), + ('ZAGATO', 1978, '5.3L V8'), + + # 1977 + ('LAGONDA', 1977, '5.3L V8'), + ('VIRAGE', 1977, '5.3L V8'), + ('ZAGATO', 1977, '5.3L V8'), + + # 1976 + ('LAGONDA', 1976, '5.3L V8'), + ('VIRAGE', 1976, '5.3L V8'), + ('ZAGATO', 1976, '5.3L V8'), + + # 1975 + ('LAGONDA', 1975, '5.3L V8'), + ('VIRAGE', 1975, '5.3L V8'), + ('ZAGATO', 1975, '5.3L V8'), + + # ARRA (modelo italiano) + ('ARRA', 2024, 'ELECTRIC') + ] + + # Insert version relationships + for model_name, year, engine in versions: + model_id = get_or_insert_model(conn, brand_id, model_name) + year_id = get_or_insert_year(conn, year) + engine_id = get_or_insert_engine(conn, engine) + insert_version_relationship(conn, model_id, year_id, engine_id) + + print(f"Inserted {len(versions)} version relationships for ASTON MARTIN vehicles") + + # Close connection + conn.close() + print("Aston Martin data added successfully!") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/add_asuna_data.py b/add_asuna_data.py new file mode 100644 index 0000000..8d12b76 --- /dev/null +++ b/add_asuna_data.py @@ -0,0 +1,167 @@ +""" +Script to add Asuna vehicle data to the database. +This includes inserting the brand, models, and year/motor combinations. +""" +import sqlite3 +from typing import List, Tuple + + +def connect_db(db_path: str = "vehicle_database/vehicle_database.db") -> sqlite3.Connection: + """Connect to the vehicle database.""" + conn = sqlite3.connect(db_path) + conn.execute("PRAGMA foreign_keys = ON") # Enable foreign key constraints + return conn + + +def get_or_insert_brand(conn: sqlite3.Connection, brand_name: str) -> int: + """Get brand ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if brand already exists + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new brand + cursor.execute("INSERT INTO brands (name) VALUES (?)", (brand_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_model(conn: sqlite3.Connection, brand_id: int, model_name: str) -> int: + """Get model ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if model already exists for this brand + cursor.execute( + "SELECT id FROM models WHERE brand_id = ? AND name = ?", + (brand_id, model_name) + ) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new model + cursor.execute( + "INSERT INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model_name) + ) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_engine(conn: sqlite3.Connection, engine_name: str) -> int: + """Get engine ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if engine already exists + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new engine + cursor.execute("INSERT INTO engines (name) VALUES (?)", (engine_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_year(conn: sqlite3.Connection, year: int) -> int: + """Get year ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if year already exists + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new year + cursor.execute("INSERT INTO years (year) VALUES (?)", (year,)) + conn.commit() + return cursor.lastrowid + + +def insert_version_relationship(conn: sqlite3.Connection, model_id: int, year_id: int, engine_id: int) -> None: + """Insert a version relationship if it doesn't exist.""" + cursor = conn.cursor() + + # Check if version relationship already exists + cursor.execute( + "SELECT id FROM model_year_engine WHERE model_id = ? AND year_id = ? AND engine_id = ?", + (model_id, year_id, engine_id) + ) + result = cursor.fetchone() + + if not result: + # Insert new version relationship + cursor.execute( + "INSERT INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + conn.commit() + + +def main(): + """Main function to add Asuna data.""" + print("Adding Asuna data...") + + # Connect to database + conn = connect_db() + + # Insert brand + brand_id = get_or_insert_brand(conn, "ASUNA") + print(f"Brand 'ASUNA' inserted with ID: {brand_id}") + + # Define models + models = [ + 'SUNRUNNER', + 'GT', + 'SE', + 'SUNFIRE' + ] + + # Insert models + for model_name in models: + model_id = get_or_insert_model(conn, brand_id, model_name) + print(f"Models inserted for ASUNA: {', '.join(models)}") + + # Define versions (model, year, engine) + versions = [ + # 1995 + ('SUNRUNNER', 1995, '1.6L L4'), + + # 1994 + ('SUNRUNNER', 1994, '1.6L L4'), + + # 1993 + ('GT', 1993, '1.6L L4'), + ('SE', 1993, '1.6L L4'), + ('SUNFIRE', 1993, '1.8L L4'), + ('SUNRUNNER', 1993, '1.6L L4'), + + # 1992 + ('SUNRUNNER', 1992, '1.6L L4') + ] + + # Insert version relationships + for model_name, year, engine in versions: + model_id = get_or_insert_model(conn, brand_id, model_name) + year_id = get_or_insert_year(conn, year) + engine_id = get_or_insert_engine(conn, engine) + insert_version_relationship(conn, model_id, year_id, engine_id) + + print(f"Inserted {len(versions)} version relationships for ASUNA vehicles") + + # Close connection + conn.close() + print("Asuna data added successfully!") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/add_audi_data.py b/add_audi_data.py new file mode 100644 index 0000000..bc1900b --- /dev/null +++ b/add_audi_data.py @@ -0,0 +1,372 @@ +""" +Script to add Audi vehicle data to the database. +This includes inserting the brand, models, and year/motor combinations. +""" +import sqlite3 +from typing import List, Tuple + + +def connect_db(db_path: str = "vehicle_database/vehicle_database.db") -> sqlite3.Connection: + """Connect to the vehicle database.""" + conn = sqlite3.connect(db_path) + conn.execute("PRAGMA foreign_keys = ON") # Enable foreign key constraints + return conn + + +def get_or_insert_brand(conn: sqlite3.Connection, brand_name: str) -> int: + """Get brand ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if brand already exists + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new brand + cursor.execute("INSERT INTO brands (name) VALUES (?)", (brand_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_model(conn: sqlite3.Connection, brand_id: int, model_name: str) -> int: + """Get model ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if model already exists for this brand + cursor.execute( + "SELECT id FROM models WHERE brand_id = ? AND name = ?", + (brand_id, model_name) + ) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new model + cursor.execute( + "INSERT INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model_name) + ) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_engine(conn: sqlite3.Connection, engine_name: str) -> int: + """Get engine ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if engine already exists + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new engine + cursor.execute("INSERT INTO engines (name) VALUES (?)", (engine_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_year(conn: sqlite3.Connection, year: int) -> int: + """Get year ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if year already exists + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new year + cursor.execute("INSERT INTO years (year) VALUES (?)", (year,)) + conn.commit() + return cursor.lastrowid + + +def insert_version_relationship(conn: sqlite3.Connection, model_id: int, year_id: int, engine_id: int) -> None: + """Insert a version relationship if it doesn't exist.""" + cursor = conn.cursor() + + # Check if version relationship already exists + cursor.execute( + "SELECT id FROM model_year_engine WHERE model_id = ? AND year_id = ? AND engine_id = ?", + (model_id, year_id, engine_id) + ) + result = cursor.fetchone() + + if not result: + # Insert new version relationship + cursor.execute( + "INSERT INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + conn.commit() + + +def main(): + """Main function to add Audi data.""" + print("Adding Audi data...") + + # Connect to database + conn = connect_db() + + # Insert brand + brand_id = get_or_insert_brand(conn, "AUDI") + print(f"Brand 'AUDI' inserted with ID: {brand_id}") + + # Define models + models = [ + 'A1', + 'A3', + 'A4', + 'A5', + 'A6', + 'A7', + 'A8', + 'Q2', + 'Q3', + 'Q4', + 'Q5', + 'Q6', + 'Q7', + 'Q8', + 'R8', + 'RS3', + 'RS5', + 'RS6', + 'RS7', + 'S3', + 'S4', + 'S5', + 'S6', + 'S7', + 'S8', + 'SQ5', + 'SQ7', + 'SQ8', + 'TT', + 'E-TRON', + 'RS E-TRON GT', + 'RS Q3', + 'RS Q8' + ] + + # Insert models + for model_name in models: + model_id = get_or_insert_model(conn, brand_id, model_name) + print(f"Models inserted for AUDI: {', '.join(models)}") + + # Define versions (model, year, engine) + versions = [ + # 2026 + ('A3', 2026, '2.0L L4 Turbocharged'), + ('A8', 2026, '3.0L V6 Turbocharged'), + ('Q4', 2026, '2.0L L4 Turbocharged'), + ('Q7', 2026, '2.0L L4 Turbocharged'), + ('Q7', 2026, '3.0L V6 Turbocharged'), + ('Q8', 2026, '3.0L V6 Turbocharged'), + ('RS6', 2026, '4.0L V8 Turbocharged'), + ('RS7', 2026, '4.0L V8 Turbocharged'), + ('RS E-TRON GT', 2026, 'ELECTRIC'), + ('RS Q8', 2026, '4.0L V8 Turbocharged'), + ('S3', 2026, '2.0L L4 Turbocharged'), + ('S4', 2026, '3.0L V6 Turbocharged'), + ('S5', 2026, '3.0L V6 Turbocharged'), + ('S6', 2026, '2.9L V6 Turbocharged'), + ('S7', 2026, '2.9L V6 Turbocharged'), + ('S8', 2026, '4.0L V8 Turbocharged'), + ('SQ5', 2026, '3.0L V6 Turbocharged'), + ('SQ7', 2026, '4.0L V8 Turbocharged'), + ('SQ8', 2026, '4.0L V8 Turbocharged'), + ('TT', 2026, '2.0L L4 Turbocharged'), + ('TT', 2026, '2.5L L5 Turbocharged'), + + # 2025 + ('A1', 2025, '1.5L L4 Turbocharged'), + ('A3', 2025, '1.4L L4 Turbocharged'), + ('A3', 2025, '2.0L L4 Turbocharged'), + ('A4', 2025, '2.0L L4 Turbocharged'), + ('A5', 2025, '2.0L L4 Turbocharged'), + ('A6', 2025, '2.0L L4 Turbocharged'), + ('A6', 2025, '3.0L V6 Turbocharged'), + ('A7', 2025, '2.0L L4 Turbocharged'), + ('A8', 2025, '3.0L V6 Turbocharged'), + ('A8', 2025, '4.0L V8 Turbocharged'), + ('Q2', 2025, '1.4L L4 Turbocharged'), + ('Q3', 2025, '1.4L L4 Turbocharged'), + ('Q3', 2025, '2.0L L4 Turbocharged'), + ('Q4', 2025, '2.0L L4 Turbocharged'), + ('Q5', 2025, '2.0L L4 Turbocharged'), + ('Q5', 2025, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('Q6', 2025, 'ELECTRIC'), + ('Q7', 2025, '2.0L L4 Turbocharged'), + ('Q7', 2025, '3.0L V6 Turbocharged'), + ('Q8', 2025, '3.0L V6 Turbocharged'), + ('R8', 2025, '5.2L V10'), + ('RS3', 2025, '2.5L L5 Turbocharged'), + ('RS5', 2025, '2.9L V6 Turbocharged'), + ('RS6', 2025, '4.0L V8 Turbocharged'), + ('RS7', 2025, '4.0L V8 Turbocharged'), + ('RS E-TRON GT', 2025, 'ELECTRIC'), + ('RS Q3', 2025, '2.5L L5 Turbocharged'), + ('RS Q8', 2025, '4.0L V8 Turbocharged'), + ('S3', 2025, '2.0L L4 Turbocharged'), + ('S4', 2025, '3.0L V6 Turbocharged'), + ('S5', 2025, '3.0L V6 Turbocharged'), + ('S6', 2025, '2.9L V6 Turbocharged'), + ('S7', 2025, '2.9L V6 Turbocharged'), + ('S8', 2025, '4.0L V8 Turbocharged'), + ('SQ5', 2025, '3.0L V6 Turbocharged'), + ('SQ7', 2025, '4.0L V8 Turbocharged'), + ('SQ8', 2025, '4.0L V8 Turbocharged'), + ('TT', 2025, '2.0L L4 Turbocharged'), + ('TT', 2025, '2.5L L5 Turbocharged'), + ('E-TRON', 2025, 'ELECTRIC'), + + # 2024 + ('A1', 2024, '1.5L L4 Turbocharged'), + ('A3', 2024, '1.4L L4 Turbocharged'), + ('A3', 2024, '2.0L L4 Turbocharged'), + ('A4', 2024, '2.0L L4 Turbocharged'), + ('A5', 2024, '2.0L L4 Turbocharged'), + ('A6', 2024, '2.0L L4 Turbocharged'), + ('A6', 2024, '3.0L V6 Turbocharged'), + ('A7', 2024, '2.0L L4 Turbocharged'), + ('A8', 2024, '3.0L V6 Turbocharged'), + ('A8', 2024, '4.0L V8 Turbocharged'), + ('Q2', 2024, '1.4L L4 Turbocharged'), + ('Q3', 2024, '1.4L L4 Turbocharged'), + ('Q3', 2024, '2.0L L4 Turbocharged'), + ('Q4', 2024, '2.0L L4 Turbocharged'), + ('Q5', 2024, '2.0L L4 Turbocharged'), + ('Q5', 2024, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('Q6', 2024, 'ELECTRIC'), + ('Q7', 2024, '2.0L L4 Turbocharged'), + ('Q7', 2024, '3.0L V6 Turbocharged'), + ('Q8', 2024, '3.0L V6 Turbocharged'), + ('R8', 2024, '5.2L V10'), + ('RS3', 2024, '2.5L L5 Turbocharged'), + ('RS5', 2024, '2.9L V6 Turbocharged'), + ('RS6', 2024, '4.0L V8 Turbocharged'), + ('RS7', 2024, '4.0L V8 Turbocharged'), + ('RS E-TRON GT', 2024, 'ELECTRIC'), + ('RS Q3', 2024, '2.5L L5 Turbocharged'), + ('RS Q8', 2024, '4.0L V8 Turbocharged'), + ('S3', 2024, '2.0L L4 Turbocharged'), + ('S4', 2024, '3.0L V6 Turbocharged'), + ('S5', 2024, '3.0L V6 Turbocharged'), + ('S6', 2024, '2.9L V6 Turbocharged'), + ('S7', 2024, '2.9L V6 Turbocharged'), + ('S8', 2024, '4.0L V8 Turbocharged'), + ('SQ5', 2024, '3.0L V6 Turbocharged'), + ('SQ7', 2024, '4.0L V8 Turbocharged'), + ('SQ8', 2024, '4.0L V8 Turbocharged'), + ('TT', 2024, '2.0L L4 Turbocharged'), + ('TT', 2024, '2.5L L5 Turbocharged'), + ('E-TRON', 2024, 'ELECTRIC'), + + # 2023 + ('A1', 2023, '1.5L L4 Turbocharged'), + ('A3', 2023, '1.4L L4 Turbocharged'), + ('A3', 2023, '2.0L L4 Turbocharged'), + ('A4', 2023, '2.0L L4 Turbocharged'), + ('A5', 2023, '2.0L L4 Turbocharged'), + ('A6', 2023, '2.0L L4 Turbocharged'), + ('A6', 2023, '3.0L V6 Turbocharged'), + ('A7', 2023, '2.0L L4 Turbocharged'), + ('A8', 2023, '3.0L V6 Turbocharged'), + ('A8', 2023, '4.0L V8 Turbocharged'), + ('Q2', 2023, '1.4L L4 Turbocharged'), + ('Q3', 2023, '1.4L L4 Turbocharged'), + ('Q3', 2023, '2.0L L4 Turbocharged'), + ('Q4', 2023, '2.0L L4 Turbocharged'), + ('Q5', 2023, '2.0L L4 Turbocharged'), + ('Q5', 2023, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('Q6', 2023, 'ELECTRIC'), + ('Q7', 2023, '2.0L L4 Turbocharged'), + ('Q7', 2023, '3.0L V6 Turbocharged'), + ('Q8', 2023, '3.0L V6 Turbocharged'), + ('R8', 2023, '5.2L V10'), + ('RS3', 2023, '2.5L L5 Turbocharged'), + ('RS5', 2023, '2.9L V6 Turbocharged'), + ('RS6', 2023, '4.0L V8 Turbocharged'), + ('RS7', 2023, '4.0L V8 Turbocharged'), + ('RS E-TRON GT', 2023, 'ELECTRIC'), + ('RS Q3', 2023, '2.5L L5 Turbocharged'), + ('RS Q8', 2023, '4.0L V8 Turbocharged'), + ('S3', 2023, '2.0L L4 Turbocharged'), + ('S4', 2023, '3.0L V6 Turbocharged'), + ('S5', 2023, '3.0L V6 Turbocharged'), + ('S6', 2023, '2.9L V6 Turbocharged'), + ('S7', 2023, '2.9L V6 Turbocharged'), + ('S8', 2023, '4.0L V8 Turbocharged'), + ('SQ5', 2023, '3.0L V6 Turbocharged'), + ('SQ7', 2023, '4.0L V8 Turbocharged'), + ('SQ8', 2023, '4.0L V8 Turbocharged'), + ('TT', 2023, '2.0L L4 Turbocharged'), + ('TT', 2023, '2.5L L5 Turbocharged'), + ('E-TRON', 2023, 'ELECTRIC'), + + # 2022 + ('A1', 2022, '1.5L L4 Turbocharged'), + ('A3', 2022, '1.4L L4 Turbocharged'), + ('A3', 2022, '2.0L L4 Turbocharged'), + ('A4', 2022, '2.0L L4 Turbocharged'), + ('A5', 2022, '2.0L L4 Turbocharged'), + ('A6', 2022, '2.0L L4 Turbocharged'), + ('A6', 2022, '3.0L V6 Turbocharged'), + ('A7', 2022, '2.0L L4 Turbocharged'), + ('A8', 2022, '3.0L V6 Turbocharged'), + ('A8', 2022, '4.0L V8 Turbocharged'), + ('Q2', 2022, '1.4L L4 Turbocharged'), + ('Q3', 2022, '1.4L L4 Turbocharged'), + ('Q3', 2022, '2.0L L4 Turbocharged'), + ('Q4', 2022, '2.0L L4 Turbocharged'), + ('Q5', 2022, '2.0L L4 Turbocharged'), + ('Q5', 2022, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('Q6', 2022, 'ELECTRIC'), + ('Q7', 2022, '2.0L L4 Turbocharged'), + ('Q7', 2022, '3.0L V6 Turbocharged'), + ('Q8', 2022, '3.0L V6 Turbocharged'), + ('R8', 2022, '5.2L V10'), + ('RS3', 2022, '2.5L L5 Turbocharged'), + ('RS5', 2022, '2.9L V6 Turbocharged'), + ('RS6', 2022, '4.0L V8 Turbocharged'), + ('RS7', 2022, '4.0L V8 Turbocharged'), + ('RS E-TRON GT', 2022, 'ELECTRIC'), + ('RS Q3', 2022, '2.5L L5 Turbocharged'), + ('RS Q8', 2022, '4.0L V8 Turbocharged'), + ('S3', 2022, '2.0L L4 Turbocharged'), + ('S4', 2022, '3.0L V6 Turbocharged'), + ('S5', 2022, '3.0L V6 Turbocharged'), + ('S6', 2022, '2.9L V6 Turbocharged'), + ('S7', 2022, '2.9L V6 Turbocharged'), + ('S8', 2022, '4.0L V8 Turbocharged'), + ('SQ5', 2022, '3.0L V6 Turbocharged'), + ('SQ7', 2022, '4.0L V8 Turbocharged'), + ('SQ8', 2022, '4.0L V8 Turbocharged'), + ('TT', 2022, '2.0L L4 Turbocharged'), + ('TT', 2022, '2.5L L5 Turbocharged'), + ('E-TRON', 2022, 'ELECTRIC') + ] + + # Insert version relationships + for model_name, year, engine in versions: + model_id = get_or_insert_model(conn, brand_id, model_name) + year_id = get_or_insert_year(conn, year) + engine_id = get_or_insert_engine(conn, engine) + insert_version_relationship(conn, model_id, year_id, engine_id) + + print(f"Inserted {len(versions)} version relationships for AUDI vehicles") + + # Close connection + conn.close() + print("Audi data added successfully!") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/add_audi_data_extended.py b/add_audi_data_extended.py new file mode 100644 index 0000000..2aafdde --- /dev/null +++ b/add_audi_data_extended.py @@ -0,0 +1,379 @@ +""" +Script to add extended Audi vehicle data (2017-2021) to the database. +This includes additional models and year/motor combinations. +""" +import sqlite3 +from typing import List, Tuple + + +def connect_db(db_path: str = "vehicle_database/vehicle_database.db") -> sqlite3.Connection: + """Connect to the vehicle database.""" + conn = sqlite3.connect(db_path) + conn.execute("PRAGMA foreign_keys = ON") # Enable foreign key constraints + return conn + + +def get_or_insert_brand(conn: sqlite3.Connection, brand_name: str) -> int: + """Get brand ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if brand already exists + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new brand + cursor.execute("INSERT INTO brands (name) VALUES (?)", (brand_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_model(conn: sqlite3.Connection, brand_id: int, model_name: str) -> int: + """Get model ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if model already exists for this brand + cursor.execute( + "SELECT id FROM models WHERE brand_id = ? AND name = ?", + (brand_id, model_name) + ) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new model + cursor.execute( + "INSERT INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model_name) + ) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_engine(conn: sqlite3.Connection, engine_name: str) -> int: + """Get engine ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if engine already exists + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new engine + cursor.execute("INSERT INTO engines (name) VALUES (?)", (engine_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_year(conn: sqlite3.Connection, year: int) -> int: + """Get year ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if year already exists + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new year + cursor.execute("INSERT INTO years (year) VALUES (?)", (year,)) + conn.commit() + return cursor.lastrowid + + +def insert_version_relationship(conn: sqlite3.Connection, model_id: int, year_id: int, engine_id: int) -> None: + """Insert a version relationship if it doesn't exist.""" + cursor = conn.cursor() + + # Check if version relationship already exists + cursor.execute( + "SELECT id FROM model_year_engine WHERE model_id = ? AND year_id = ? AND engine_id = ?", + (model_id, year_id, engine_id) + ) + result = cursor.fetchone() + + if not result: + # Insert new version relationship + cursor.execute( + "INSERT INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + conn.commit() + + +def main(): + """Main function to add extended Audi data.""" + print("Adding extended Audi data (2017-2021)...") + + # Connect to database + conn = connect_db() + + # Get brand ID (should already exist) + brand_id = get_or_insert_brand(conn, "AUDI") + print(f"Brand 'AUDI' has ID: {brand_id}") + + # Define additional models that might need to be added + additional_models = [ + 'A4 ALLROAD', + 'A6 ALLROAD', + 'Q2 QUATTRO' + ] + + # Insert additional models if they don't exist + for model_name in additional_models: + model_id = get_or_insert_model(conn, brand_id, model_name) + + # Define versions (model, year, engine) for years 2017-2021 + versions = [ + # 2021 + ('A1', 2021, '1.5L L4 Turbocharged'), + ('A1', 2021, '2.0L L4 Turbocharged'), + ('A1', 2021, '999cc L3 Turbocharged'), + ('A4', 2021, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('A4', 2021, '2.0L L4 Turbocharged'), + ('A4 ALLROAD', 2021, '2.0L L4 Turbocharged'), + ('A5', 2021, '2.0L L4 Turbocharged'), + ('A6', 2021, '2.0L L4 Turbocharged'), + ('A6', 2021, '3.0L V6 Turbocharged'), + ('A6 ALLROAD', 2021, '3.0L V6 Turbocharged'), + ('A7', 2021, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('A7', 2021, '2.0L L4 Turbocharged'), + ('A7', 2021, '3.0L V6 Turbocharged'), + ('A8', 2021, '3.0L V6 ELECTRIC/GAS Turbocharged'), + ('A8', 2021, '3.0L V6 Turbocharged'), + ('A8', 2021, '4.0L V8 Turbocharged'), + ('E-TRON', 2021, 'ELECTRIC'), + ('Q2', 2021, '1.4L L4 Turbocharged'), + ('Q3', 2021, '1.4L L4 Turbocharged'), + ('Q3', 2021, '2.0L L4 Turbocharged'), + ('Q5', 2021, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('Q5', 2021, '2.0L L4 Turbocharged'), + ('Q7', 2021, '2.0L L4 Turbocharged'), + ('Q7', 2021, '3.0L V6 Turbocharged'), + ('Q8', 2021, '3.0L V6 Turbocharged'), + ('R8', 2021, '5.2L V10'), + ('RS3', 2021, '2.5L L5 Turbocharged'), + ('RS5', 2021, '2.9L V6 Turbocharged'), + ('RS6', 2021, '4.0L V8 Turbocharged'), + ('RS7', 2021, '4.0L V8 Turbocharged'), + ('RS Q3', 2021, '2.5L L5 Turbocharged'), + ('RS Q8', 2021, '4.0L V8 Turbocharged'), + ('S3', 2021, '2.0L L4 Turbocharged'), + ('S4', 2021, '3.0L V6 Turbocharged'), + ('S5', 2021, '3.0L V6 Turbocharged'), + ('S6', 2021, '2.9L V6 Turbocharged'), + ('S7', 2021, '2.9L V6 Turbocharged'), + ('S8', 2021, '4.0L V8 Turbocharged'), + ('SQ5', 2021, '3.0L V6 Turbocharged'), + ('SQ7', 2021, '4.0L V8 Turbocharged'), + ('SQ8', 2021, '4.0L V8 Turbocharged'), + ('TT', 2021, '2.0L L4 Turbocharged'), + ('TT', 2021, '2.5L L5 Turbocharged'), + + # 2020 + ('A1', 2020, '1.5L L4 Turbocharged'), + ('A1', 2020, '2.0L L4 Turbocharged'), + ('A1', 2020, '999cc L3 Turbocharged'), + ('A3', 2020, '1.4L L4 Turbocharged'), + ('A3', 2020, '2.0L L4 Turbocharged'), + ('A4', 2020, '2.0L L4 Turbocharged'), + ('A4 ALLROAD', 2020, '2.0L L4 Turbocharged'), + ('A5', 2020, '2.0L L4 Turbocharged'), + ('A6', 2020, '2.0L L4 Turbocharged'), + ('A6', 2020, '3.0L V6 Turbocharged'), + ('A6 ALLROAD', 2020, '3.0L V6 Turbocharged'), + ('A7', 2020, '3.0L V6 Turbocharged'), + ('A8', 2020, '3.0L V6 ELECTRIC/GAS Turbocharged'), + ('A8', 2020, '3.0L V6 Turbocharged'), + ('A8', 2020, '4.0L V8 Turbocharged'), + ('E-TRON', 2020, 'ELECTRIC'), + ('Q2', 2020, '1.4L L4 Turbocharged'), + ('Q2 QUATTRO', 2020, '2.0L L4 Turbocharged'), + ('Q3', 2020, '1.4L L4 Turbocharged'), + ('Q3', 2020, '2.0L L4 Turbocharged'), + ('Q5', 2020, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('Q5', 2020, '2.0L L4 Turbocharged'), + ('Q7', 2020, '2.0L L4 Turbocharged'), + ('Q7', 2020, '3.0L V6 Turbocharged'), + ('Q8', 2020, '3.0L V6 Turbocharged'), + ('R8', 2020, '5.2L V10'), + ('RS3', 2020, '2.5L L5 Turbocharged'), + ('RS5', 2020, '2.9L V6 Turbocharged'), + ('RS6', 2020, '4.0L V8 Turbocharged'), + ('RS7', 2020, '4.0L V8 Turbocharged'), + ('RS Q3', 2020, '2.5L L5 Turbocharged'), + ('RS Q8', 2020, '4.0L V8 Turbocharged'), + ('S3', 2020, '2.0L L4 Turbocharged'), + ('S4', 2020, '3.0L V6 Turbocharged'), + ('S5', 2020, '3.0L V6 Turbocharged'), + ('S6', 2020, '2.9L V6 Turbocharged'), + ('S7', 2020, '2.9L V6 Turbocharged'), + ('S8', 2020, '4.0L V8 Turbocharged'), + ('SQ5', 2020, '3.0L V6 Turbocharged'), + ('SQ7', 2020, '4.0L V8 Turbocharged'), + ('SQ8', 2020, '4.0L V8 Turbocharged'), + ('TT', 2020, '2.0L L4 Turbocharged'), + ('TT', 2020, '2.5L L5 Turbocharged'), + + # 2019 + ('A3', 2019, '1.4L L4 Turbocharged'), + ('A3', 2019, '2.0L L4 Turbocharged'), + ('A4', 2019, '2.0L L4 Turbocharged'), + ('A4 ALLROAD', 2019, '2.0L L4 Turbocharged'), + ('A5', 2019, '2.0L L4 Turbocharged'), + ('A6', 2019, '2.0L L4 Turbocharged'), + ('A6', 2019, '3.0L V6 Turbocharged'), + ('A7', 2019, '3.0L V6 Turbocharged'), + ('A8', 2019, '3.0L V6 Turbocharged'), + ('A8', 2019, '4.0L V8 Turbocharged'), + ('E-TRON', 2019, 'ELECTRIC'), + ('Q2', 2019, '1.4L L4 Turbocharged'), + ('Q2', 2019, '2.0L L4 Turbocharged'), + ('Q3', 2019, '1.4L L4 Turbocharged'), + ('Q3', 2019, '2.0L L4 Turbocharged'), + ('Q5', 2019, '2.0L L4 Turbocharged'), + ('Q7', 2019, '2.0L L4 Turbocharged'), + ('Q7', 2019, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2019, '3.0L V6 Supercharged'), + ('Q8', 2019, '3.0L V6 Turbocharged'), + ('R8', 2019, '5.2L V10'), + ('RS3', 2019, '2.5L L5 Turbocharged'), + ('RS5', 2019, '2.9L V6 Turbocharged'), + ('RS6', 2019, '4.0L V8 Turbocharged'), + ('RS7', 2019, '4.0L V8 Turbocharged'), + ('RS Q3', 2019, '2.5L L5 Turbocharged'), + ('RS Q8', 2019, '4.0L V8 Turbocharged'), + ('S3', 2019, '2.0L L4 Turbocharged'), + ('S4', 2019, '3.0L V6 Turbocharged'), + ('S5', 2019, '3.0L V6 Turbocharged'), + ('S6', 2019, '2.9L V6 Turbocharged'), + ('S7', 2019, '2.9L V6 Turbocharged'), + ('S8', 2019, '4.0L V8 Turbocharged'), + ('SQ5', 2019, '3.0L V6 Turbocharged'), + ('SQ7', 2019, '4.0L V8 Turbocharged'), + ('SQ8', 2019, '4.0L V8 Turbocharged'), + ('TT', 2019, '2.0L L4 Turbocharged'), + ('TT', 2019, '2.5L L5 Turbocharged'), + + # 2018 + ('A1', 2018, '1.4L L4 Turbocharged'), + ('A1', 2018, '1.8L L4 Turbocharged'), + ('A3', 2018, '1.4L L4 ELECTRIC/GAS Turbocharged'), + ('A3', 2018, '1.4L L4 Turbocharged'), + ('A3', 2018, '1.8L L4 Turbocharged'), + ('A3', 2018, '2.0L L4 Turbocharged'), + ('A4', 2018, '2.0L L4 Turbocharged'), + ('A4 ALLROAD', 2018, '2.0L L4 Turbocharged'), + ('A5', 2018, '2.0L L4 Turbocharged'), + ('A6', 2018, '1.8L L4 Turbocharged'), + ('A6', 2018, '2.0L L4 Turbocharged'), + ('A6', 2018, '3.0L V6 Supercharged'), + ('A7', 2018, '2.0L L4 Turbocharged'), + ('A7', 2018, '3.0L V6 Supercharged'), + ('A8', 2018, '3.0L V6 Supercharged'), + ('A8', 2018, '4.0L V8 Turbocharged'), + ('A8', 2018, '6.3L W12'), + ('Q2', 2018, '1.4L L4 Turbocharged'), + ('Q2', 2018, '2.0L L4 Turbocharged'), + ('Q3', 2018, '1.4L L4 Turbocharged'), + ('Q3', 2018, '2.0L L4 Turbocharged'), + ('Q5', 2018, '2.0L L4 Turbocharged'), + ('Q7', 2018, '2.0L L4 Turbocharged'), + ('Q7', 2018, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2018, '3.0L V6 Supercharged'), + ('Q8', 2018, '3.0L V6 Turbocharged'), + ('R8', 2018, '5.2L V10'), + ('RS3', 2018, '2.5L L5 Turbocharged'), + ('RS5', 2018, '2.9L V6 Turbocharged'), + ('RS6', 2018, '4.0L V8 Turbocharged'), + ('RS7', 2018, '4.0L V8 Turbocharged'), + ('RS Q3', 2018, '2.5L L5 Turbocharged'), + ('RS Q8', 2018, '4.0L V8 Turbocharged'), + ('S3', 2018, '2.0L L4 Turbocharged'), + ('S4', 2018, '3.0L V6 Supercharged'), + ('S4', 2018, '3.0L V6 Turbocharged'), + ('S5', 2018, '3.0L V6 Supercharged'), + ('S5', 2018, '3.0L V6 Turbocharged'), + ('S6', 2018, '4.0L V8 Turbocharged'), + ('S7', 2018, '4.0L V8 Turbocharged'), + ('S8', 2018, '4.0L V8 Turbocharged'), + ('SQ5', 2018, '3.0L V6 Supercharged'), + ('SQ5', 2018, '3.0L V6 Turbocharged'), + ('SQ7', 2018, '4.0L V8 Turbocharged'), + ('SQ8', 2018, '4.0L V8 Turbocharged'), + ('TT', 2018, '1.8L L4 Turbocharged'), + ('TT', 2018, '2.0L L4 Turbocharged'), + ('TT', 2018, '2.5L L5 Turbocharged'), + + # 2017 + ('A1', 2017, '1.4L L4 Turbocharged'), + ('A1', 2017, '1.8L L4 Turbocharged'), + ('A3', 2017, '1.4L L4 ELECTRIC/GAS Turbocharged'), + ('A3', 2017, '1.4L L4 Turbocharged'), + ('A3', 2017, '2.0L L4 Turbocharged'), + ('A4', 2017, '2.0L L4 Turbocharged'), + ('A4 ALLROAD', 2017, '2.0L L4 Turbocharged'), + ('A5', 2017, '2.0L L4 Turbocharged'), + ('A6', 2017, '1.8L L4 Turbocharged'), + ('A6', 2017, '2.0L L4 Turbocharged'), + ('A6', 2017, '3.0L V6 Supercharged'), + ('A7', 2017, '2.0L L4 Turbocharged'), + ('A7', 2017, '3.0L V6 Supercharged'), + ('A8', 2017, '3.0L V6 Supercharged'), + ('A8', 2017, '4.0L V8 Turbocharged'), + ('A8', 2017, '6.3L W12'), + ('Q3', 2017, '1.4L L4 Turbocharged'), + ('Q3', 2017, '2.0L L4 Turbocharged'), + ('Q5', 2017, '2.0L L4 Turbocharged'), + ('Q5', 2017, '3.0L V6 DIESEL Turbocharged'), + ('Q5', 2017, '3.0L V6 Supercharged'), + ('Q7', 2017, '2.0L L4 Turbocharged'), + ('Q7', 2017, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2017, '3.0L V6 Supercharged'), + ('Q8', 2017, '3.0L V6 Turbocharged'), + ('R8', 2017, '5.2L V10'), + ('RS3', 2017, '2.5L L5 Turbocharged'), + ('RS5', 2017, '2.9L V6 Turbocharged'), + ('RS6', 2017, '4.0L V8 Turbocharged'), + ('RS7', 2017, '4.0L V8 Turbocharged'), + ('RS Q3', 2017, '2.5L L5 Turbocharged'), + ('RS Q8', 2017, '4.0L V8 Turbocharged'), + ('S3', 2017, '2.0L L4 Turbocharged'), + ('S4', 2017, '3.0L V6 Supercharged'), + ('S4', 2017, '3.0L V6 Turbocharged'), + ('S5', 2017, '3.0L V6 Supercharged'), + ('S5', 2017, '3.0L V6 Turbocharged'), + ('S6', 2017, '4.0L V8 Turbocharged'), + ('S7', 2017, '4.0L V8 Turbocharged'), + ('S8', 2017, '4.0L V8 Turbocharged'), + ('SQ5', 2017, '3.0L V6 Supercharged'), + ('SQ5', 2017, '3.0L V6 Turbocharged'), + ('SQ7', 2017, '4.0L V8 Turbocharged'), + ('SQ8', 2017, '4.0L V8 Turbocharged'), + ('TT', 2017, '1.8L L4 Turbocharged'), + ('TT', 2017, '2.0L L4 Turbocharged'), + ('TT', 2017, '2.5L L5 Turbocharged') + ] + + # Insert version relationships + for model_name, year, engine in versions: + model_id = get_or_insert_model(conn, brand_id, model_name) + year_id = get_or_insert_year(conn, year) + engine_id = get_or_insert_engine(conn, engine) + insert_version_relationship(conn, model_id, year_id, engine_id) + + print(f"Inserted {len(versions)} additional version relationships for AUDI vehicles (2017-2021)") + + # Close connection + conn.close() + print("Extended Audi data added successfully!") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/add_audi_data_extended2.py b/add_audi_data_extended2.py new file mode 100644 index 0000000..2c61a58 --- /dev/null +++ b/add_audi_data_extended2.py @@ -0,0 +1,367 @@ +""" +Script to add extended Audi vehicle data (2012-2016) to the database. +This includes additional models and year/motor combinations. +""" +import sqlite3 +from typing import List, Tuple + + +def connect_db(db_path: str = "vehicle_database/vehicle_database.db") -> sqlite3.Connection: + """Connect to the vehicle database.""" + conn = sqlite3.connect(db_path) + conn.execute("PRAGMA foreign_keys = ON") # Enable foreign key constraints + return conn + + +def get_or_insert_brand(conn: sqlite3.Connection, brand_name: str) -> int: + """Get brand ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if brand already exists + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new brand + cursor.execute("INSERT INTO brands (name) VALUES (?)", (brand_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_model(conn: sqlite3.Connection, brand_id: int, model_name: str) -> int: + """Get model ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if model already exists for this brand + cursor.execute( + "SELECT id FROM models WHERE brand_id = ? AND name = ?", + (brand_id, model_name) + ) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new model + cursor.execute( + "INSERT INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model_name) + ) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_engine(conn: sqlite3.Connection, engine_name: str) -> int: + """Get engine ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if engine already exists + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new engine + cursor.execute("INSERT INTO engines (name) VALUES (?)", (engine_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_year(conn: sqlite3.Connection, year: int) -> int: + """Get year ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if year already exists + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new year + cursor.execute("INSERT INTO years (year) VALUES (?)", (year,)) + conn.commit() + return cursor.lastrowid + + +def insert_version_relationship(conn: sqlite3.Connection, model_id: int, year_id: int, engine_id: int) -> None: + """Insert a version relationship if it doesn't exist.""" + cursor = conn.cursor() + + # Check if version relationship already exists + cursor.execute( + "SELECT id FROM model_year_engine WHERE model_id = ? AND year_id = ? AND engine_id = ?", + (model_id, year_id, engine_id) + ) + result = cursor.fetchone() + + if not result: + # Insert new version relationship + cursor.execute( + "INSERT INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + conn.commit() + + +def main(): + """Main function to add extended Audi data (2012-2016).""" + print("Adding extended Audi data (2012-2016)...") + + # Connect to database + conn = connect_db() + + # Get brand ID (should already exist) + brand_id = get_or_insert_brand(conn, "AUDI") + print(f"Brand 'AUDI' has ID: {brand_id}") + + # Define additional models that might need to be added + additional_models = [ + 'ALLROAD' + ] + + # Insert additional models if they don't exist + for model_name in additional_models: + model_id = get_or_insert_model(conn, brand_id, model_name) + + # Define versions (model, year, engine) for years 2012-2016 + versions = [ + # 2016 + ('A1', 2016, '1.4L L4 Turbocharged'), + ('A1', 2016, '1.8L L4 Turbocharged'), + ('A3', 2016, '1.4L L4 ELECTRIC/GAS Turbocharged'), + ('A3', 2016, '1.4L L4 Turbocharged'), + ('A3', 2016, '1.8L L4 Turbocharged'), + ('A3', 2016, '2.0L L4 DIESEL Turbocharged'), + ('A3', 2016, '2.0L L4 Turbocharged'), + ('A4', 2016, '1.8L L4 Turbocharged'), + ('A4', 2016, '2.0L L4 Turbocharged'), + ('A4 ALLROAD', 2016, '2.0L L4 Turbocharged'), + ('A5', 2016, '2.0L L4 Turbocharged'), + ('A5', 2016, '3.0L V6 Supercharged'), + ('A6', 2016, '1.8L L4 Turbocharged'), + ('A6', 2016, '2.0L L4 Turbocharged'), + ('A6', 2016, '3.0L V6 DIESEL Turbocharged'), + ('A6', 2016, '3.0L V6 Supercharged'), + ('A7', 2016, '2.0L L4 Turbocharged'), + ('A7', 2016, '3.0L V6 DIESEL Turbocharged'), + ('A7', 2016, '3.0L V6 Supercharged'), + ('A8', 2016, '3.0L V6 DIESEL Turbocharged'), + ('A8', 2016, '3.0L V6 Supercharged'), + ('A8', 2016, '4.0L V8 Turbocharged'), + ('A8', 2016, '6.3L W12 Turbocharged'), + ('ALLROAD', 2016, '2.0L L4 Turbocharged'), + ('Q3', 2016, '1.4L L4 Turbocharged'), + ('Q3', 2016, '2.0L L4 Turbocharged'), + ('Q5', 2016, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('Q5', 2016, '2.0L L4 Turbocharged'), + ('Q5', 2016, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2016, '2.0L L4 Turbocharged'), + ('Q7', 2016, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2016, '3.0L V6 Supercharged'), + ('Q8', 2016, '3.0L V6 Turbocharged'), + ('R8', 2016, '4.2L V8'), + ('R8', 2016, '5.2L V10'), + ('RS5', 2016, '4.2L V8'), + ('RS7', 2016, '4.0L V8 Turbocharged'), + ('S3', 2016, '2.0L L4 Turbocharged'), + ('S4', 2016, '3.0L V6 Supercharged'), + ('S5', 2016, '3.0L V6 Supercharged'), + ('S6', 2016, '4.0L V8 Turbocharged'), + ('S7', 2016, '4.0L V8 Turbocharged'), + ('S8', 2016, '4.0L V8 Turbocharged'), + ('SQ5', 2016, '3.0L V6 Supercharged'), + ('TT', 2016, '1.8L L4 Turbocharged'), + ('TT', 2016, '2.0L L4 Turbocharged'), + + # 2015 + ('A1', 2015, '1.4L L4 Turbocharged'), + ('A3', 2015, '1.4L L4 Turbocharged'), + ('A3', 2015, '1.8L L4 Turbocharged'), + ('A3', 2015, '2.0L L4 DIESEL Turbocharged'), + ('A3', 2015, '2.0L L4 Turbocharged'), + ('A4', 2015, '1.8L L4 Turbocharged'), + ('A4', 2015, '2.0L L4 Turbocharged'), + ('A4 ALLROAD', 2015, '2.0L L4 Turbocharged'), + ('A5', 2015, '1.8L L4 Turbocharged'), + ('A5', 2015, '2.0L L4 Turbocharged'), + ('A5', 2015, '3.0L V6 Supercharged'), + ('A6', 2015, '2.0L L4 Turbocharged'), + ('A6', 2015, '3.0L V6 DIESEL Turbocharged'), + ('A6', 2015, '3.0L V6 Supercharged'), + ('A7', 2015, '2.0L L4 Turbocharged'), + ('A7', 2015, '3.0L V6 DIESEL Turbocharged'), + ('A7', 2015, '3.0L V6 Supercharged'), + ('A8', 2015, '3.0L V6 DIESEL Turbocharged'), + ('A8', 2015, '3.0L V6 Supercharged'), + ('A8', 2015, '4.0L V8 Turbocharged'), + ('A8', 2015, '6.3L W12'), + ('ALLROAD', 2015, '2.0L L4 Turbocharged'), + ('Q3', 2015, '2.0L L4 Turbocharged'), + ('Q5', 2015, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('Q5', 2015, '2.0L L4 Turbocharged'), + ('Q5', 2015, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2015, '2.0L L4 Turbocharged'), + ('Q7', 2015, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2015, '3.0L V6 Supercharged'), + ('Q8', 2015, '3.0L V6 Turbocharged'), + ('R8', 2015, '4.2L V8'), + ('R8', 2015, '5.2L V10'), + ('RS5', 2015, '4.2L V8'), + ('RS7', 2015, '4.0L V8 Turbocharged'), + ('S3', 2015, '2.0L L4 Turbocharged'), + ('S4', 2015, '3.0L V6 Supercharged'), + ('S5', 2015, '3.0L V6 Supercharged'), + ('S6', 2015, '4.0L V8 Turbocharged'), + ('S7', 2015, '4.0L V8 Turbocharged'), + ('S8', 2015, '4.0L V8 Turbocharged'), + ('SQ5', 2015, '3.0L V6 Supercharged'), + ('TT', 2015, '1.8L L4 Turbocharged'), + ('TT', 2015, '2.0L L4 Turbocharged'), + + # 2014 + ('A1', 2014, '1.4L L4 Turbocharged'), + ('A3', 2014, '1.4L L4 Turbocharged'), + ('A3', 2014, '1.8L L4 Turbocharged'), + ('A4', 2014, '1.8L L4 Turbocharged'), + ('A4', 2014, '2.0L L4 Turbocharged'), + ('A4 ALLROAD', 2014, '2.0L L4 Turbocharged'), + ('A5', 2014, '1.8L L4 Turbocharged'), + ('A5', 2014, '2.0L L4 Turbocharged'), + ('A5', 2014, '3.0L V6 Supercharged'), + ('A6', 2014, '2.0L L4 Turbocharged'), + ('A6', 2014, '3.0L V6 DIESEL Turbocharged'), + ('A6', 2014, '3.0L V6 Supercharged'), + ('A7', 2014, '2.0L L4 Turbocharged'), + ('A7', 2014, '3.0L V6 DIESEL Turbocharged'), + ('A7', 2014, '3.0L V6 Supercharged'), + ('A8', 2014, '3.0L V6 DIESEL Turbocharged'), + ('A8', 2014, '3.0L V6 Supercharged'), + ('A8', 2014, '4.0L V8 Turbocharged'), + ('A8', 2014, '6.3L W12'), + ('ALLROAD', 2014, '2.0L L4 Turbocharged'), + ('Q3', 2014, '2.0L L4 Turbocharged'), + ('Q5', 2014, '2.0L L4 Turbocharged'), + ('Q5', 2014, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2014, '2.0L L4 Turbocharged'), + ('Q7', 2014, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2014, '3.0L V6 Supercharged'), + ('Q8', 2014, '3.0L V6 Turbocharged'), + ('R8', 2014, '4.2L V8'), + ('R8', 2014, '5.2L V10'), + ('RS5', 2014, '4.2L V8'), + ('RS7', 2014, '4.0L V8 Turbocharged'), + ('S3', 2014, '2.0L L4 Turbocharged'), + ('S4', 2014, '3.0L V6 Supercharged'), + ('S5', 2014, '3.0L V6 Supercharged'), + ('S6', 2014, '4.0L V8 Turbocharged'), + ('S7', 2014, '4.0L V8 Turbocharged'), + ('S8', 2014, '4.0L V8 Turbocharged'), + ('SQ5', 2014, '3.0L V6 Supercharged'), + ('TT', 2014, '1.8L L4 Turbocharged'), + ('TT', 2014, '2.0L L4 Turbocharged'), + + # 2013 + ('A1', 2013, '1.4L L4 Turbocharged'), + ('A3', 2013, '1.4L L4 Turbocharged'), + ('A3', 2013, '1.8L L4 Turbocharged'), + ('A3', 2013, '2.0L L4 DIESEL Turbocharged'), + ('A3', 2013, '2.0L L4 Turbocharged'), + ('A4', 2013, '1.8L L4 Turbocharged'), + ('A4', 2013, '2.0L L4 Turbocharged'), + ('A5', 2013, '1.8L L4 Turbocharged'), + ('A5', 2013, '2.0L L4 Turbocharged'), + ('A5', 2013, '3.0L V6 Supercharged'), + ('A6', 2013, '2.0L L4 Turbocharged'), + ('A6', 2013, '2.8L V6'), + ('A6', 2013, '3.0L V6 DIESEL Turbocharged'), + ('A6', 2013, '3.0L V6 Supercharged'), + ('A7', 2013, '3.0L V6 Supercharged'), + ('A8', 2013, '3.0L V6 Supercharged'), + ('A8', 2013, '4.0L V8 Turbocharged'), + ('A8', 2013, '6.3L W12'), + ('ALLROAD', 2013, '2.0L L4 Turbocharged'), + ('Q3', 2013, '2.0L L4 Turbocharged'), + ('Q5', 2013, '2.0L L4 ELECTRIC/GAS Turbocharged'), + ('Q5', 2013, '2.0L L4 Turbocharged'), + ('Q5', 2013, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2013, '2.0L L4 Turbocharged'), + ('Q7', 2013, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2013, '3.0L V6 Supercharged'), + ('Q8', 2013, '3.0L V6 Turbocharged'), + ('R8', 2013, '4.2L V8'), + ('R8', 2013, '5.2L V10'), + ('RS5', 2013, '4.2L V8'), + ('RS7', 2013, '4.0L V8 Turbocharged'), + ('S3', 2013, '2.0L L4 Turbocharged'), + ('S4', 2013, '3.0L V6 Supercharged'), + ('S5', 2013, '3.0L V6 Supercharged'), + ('S6', 2013, '4.0L V8 Turbocharged'), + ('S7', 2013, '4.0L V8 Turbocharged'), + ('S8', 2013, '4.0L V8 Turbocharged'), + ('SQ5', 2013, '3.0L V6 Supercharged'), + ('TT', 2013, '1.8L L4 Turbocharged'), + ('TT', 2013, '2.0L L4 Turbocharged'), + ('TT', 2013, '2.5L L5 Turbocharged'), + + # 2012 + ('A1', 2012, '1.4L L4 Turbocharged'), + ('A3', 2012, '1.4L L4 Turbocharged'), + ('A3', 2012, '1.8L L4 Turbocharged'), + ('A3', 2012, '2.0L L4 DIESEL Turbocharged'), + ('A3', 2012, '2.0L L4 Turbocharged'), + ('A4', 2012, '1.8L L4 Turbocharged'), + ('A4', 2012, '2.0L L4 Turbocharged'), + ('A5', 2012, '1.8L L4 Turbocharged'), + ('A5', 2012, '2.0L L4 Turbocharged'), + ('A5', 2012, '3.0L V6 Supercharged'), + ('A6', 2012, '2.0L L4 Turbocharged'), + ('A6', 2012, '2.8L V6'), + ('A6', 2012, '3.0L V6 DIESEL Turbocharged'), + ('A6', 2012, '3.0L V6 Supercharged'), + ('A7', 2012, '3.0L V6 Supercharged'), + ('A8', 2012, '3.0L V6 Supercharged'), + ('A8', 2012, '4.0L V8 Turbocharged'), + ('A8', 2012, '6.3L W12'), + ('Q3', 2012, '2.0L L4 Turbocharged'), + ('Q5', 2012, '2.0L L4 Turbocharged'), + ('Q5', 2012, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2012, '2.0L L4 Turbocharged'), + ('Q7', 2012, '3.0L V6 DIESEL Turbocharged'), + ('Q7', 2012, '3.0L V6 Supercharged'), + ('Q8', 2012, '3.0L V6 Turbocharged'), + ('R8', 2012, '4.2L V8'), + ('R8', 2012, '5.2L V10'), + ('RS5', 2012, '4.2L V8'), + ('RS7', 2012, '4.0L V8 Turbocharged'), + ('S3', 2012, '2.0L L4 Turbocharged'), + ('S4', 2012, '3.0L V6 Supercharged'), + ('S5', 2012, '3.0L V6 Supercharged'), + ('S6', 2012, '4.0L V8 Turbocharged'), + ('S7', 2012, '4.0L V8 Turbocharged'), + ('S8', 2012, '4.0L V8 Turbocharged'), + ('SQ5', 2012, '3.0L V6 Supercharged'), + ('TT', 2012, '1.8L L4 Turbocharged'), + ('TT', 2012, '2.0L L4 Turbocharged'), + ('TT', 2012, '2.5L L5 Turbocharged') + ] + + # Insert version relationships + for model_name, year, engine in versions: + model_id = get_or_insert_model(conn, brand_id, model_name) + year_id = get_or_insert_year(conn, year) + engine_id = get_or_insert_engine(conn, engine) + insert_version_relationship(conn, model_id, year_id, engine_id) + + print(f"Inserted {len(versions)} additional version relationships for AUDI vehicles (2012-2016)") + + # Close connection + conn.close() + print("Extended Audi data (2012-2016) added successfully!") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/add_crosley_data.py b/add_crosley_data.py new file mode 100644 index 0000000..494a2d4 --- /dev/null +++ b/add_crosley_data.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python3 +""" +Script para agregar datos de Crosley a la base de datos de vehículos +""" + +import sqlite3 +import os + +def add_crosley_data(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Agregando datos de Crosley a la base de datos...") + + try: + # Insertar la marca Crosley + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", ("CROSLEY",)) + cursor.execute("SELECT id FROM brands WHERE name = ?", ("CROSLEY",)) + brand_id = cursor.fetchone()[0] + print(f"Marca CROSLEY tiene ID: {brand_id}") + + # Insertar modelos de Crosley + models = [ + 'FARM-O-ROAD', 'HOT SHOT', 'PANEL DELIVERY', 'PICKUP', + 'STANDARD', 'SUPER', 'SUPER SPORTS', 'CROSLEY' # Agregué 'CROSLEY' porque aparece en los datos + ] + + for model in models: + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + print(f"Agregados {len(models)} modelos de Crosley") + + # Datos de años y motores para cada modelo + crosley_data = [ + # 1952 + ('FARM-O-ROAD', 1952, '724cc 44cid L4'), + ('HOT SHOT', 1952, '724cc 44cid L4'), + ('PANEL DELIVERY', 1952, '724cc 44cid L4'), + ('PICKUP', 1952, '724cc 44cid L4'), + ('STANDARD', 1952, '724cc 44cid L4'), + ('SUPER', 1952, '0.7L 44cid L4'), + ('SUPER SHOT', 1952, '0.7L 44cid L4'), + ('SUPER SPORTS', 1952, '0.7L 44cid L4'), + + # 1951 + ('FARM-O-ROAD', 1951, '724cc 44cid L4'), + ('HOT SHOT', 1951, '724cc 44cid L4'), + ('PANEL DELIVERY', 1951, '724cc 44cid L4'), + ('PICKUP', 1951, '724cc 44cid L4'), + ('STANDARD', 1951, '724cc 44cid L4'), + ('SUPER', 1951, '0.7L 44cid L4'), + ('SUPER SPORTS', 1951, '0.7L 44cid L4'), + + # 1950 + ('CROSLEY', 1950, '724cc 44cid L4'), + ('FARM-O-ROAD', 1950, '724cc 44cid L4'), + ('HOT SHOT', 1950, '724cc 44cid L4'), + ('PANEL DELIVERY', 1950, '724cc 44cid L4'), + ('PICKUP', 1950, '724cc 44cid L4'), + ('STANDARD', 1950, '724cc 44cid L4'), + ('SUPER', 1950, '0.7L 44cid L4'), + + # 1949 + ('CROSLEY', 1949, '724cc 44cid L4'), + ('HOT SHOT', 1949, '724cc 44cid L4'), + ('PANEL DELIVERY', 1949, '724cc 44cid L4'), + ('PICKUP', 1949, '724cc 44cid L4'), + + # 1948 + ('CROSLEY', 1948, '724cc 44cid L4'), + ('PANEL DELIVERY', 1948, '724cc 44cid L4'), + ('PICKUP', 1948, '724cc 44cid L4'), + + # 1947 + ('CROSLEY', 1947, '724cc 44cid L4'), + ('PICKUP', 1947, '724cc 44cid L4'), + + # 1946 + ('CROSLEY', 1946, '724cc 44cid L4'), + + # 1942 + ('CROSLEY', 1942, '724cc 44cid L4'), + + # 1941 + ('CROSLEY', 1941, '579cc 35cid L2'), + + # 1940 + ('CROSLEY', 1940, '579cc 35cid L2'), + + # 1939 + ('CROSLEY', 1939, '638cc 39cid L2') + ] + + # Insertar años + years = list(set([data[1] for data in crosley_data])) # Obtener años únicos + for year in years: + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + print(f"Agregados {len(years)} años") + + # Insertar motores + engines = list(set([data[2] for data in crosley_data])) # Obtener motores únicos + for engine in engines: + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + print(f"Agregados {len(engines)} motores") + + # Crear combinaciones modelo-año-motor + for model_name, year, engine_name in crosley_data: + # Obtener IDs + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model_name)) + model_result = cursor.fetchone() + if model_result: + model_id = model_result[0] + else: + print(f"Advertencia: Modelo {model_name} no encontrado para la marca CROSLEY") + continue + + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_result = cursor.fetchone() + if year_result: + year_id = year_result[0] + else: + print(f"Advertencia: Año {year} no encontrado") + continue + + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + engine_result = cursor.fetchone() + if engine_result: + engine_id = engine_result[0] + else: + print(f"Advertencia: Motor {engine_name} no encontrado") + continue + + # Insertar la combinación modelo-año-motor + cursor.execute( + """INSERT OR REPLACE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Se agregaron {len(crosley_data)} combinaciones modelo-año-motor para CROSLEY") + print("Datos de CROSLEY agregados exitosamente a la base de datos!") + + # Mostrar algunos resultados + print("\nAlgunos vehículos CROSLEY agregados:") + cursor.execute(""" + SELECT b.name, m.name, y.year, e.name + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + WHERE b.name = 'CROSLEY' + ORDER BY y.year DESC, m.name + LIMIT 15 + """) + + results = cursor.fetchall() + for brand, model, year, engine in results: + print(f" {year} {brand} {model} - {engine}") + + except Exception as e: + print(f"Error al agregar datos de CROSLEY: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + add_crosley_data() \ No newline at end of file diff --git a/add_historical_data.py b/add_historical_data.py new file mode 100644 index 0000000..ffb6a7e --- /dev/null +++ b/add_historical_data.py @@ -0,0 +1,255 @@ +#!/usr/bin/env python3 +""" +Script para agregar datos históricos de varias marcas a la base de datos de vehículos +""" + +import sqlite3 +import os + +def add_historical_data(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Agregando datos históricos de varias marcas a la base de datos...") + + try: + # Insertar marcas + brands = ['CONTINENTAL', 'CORD', 'COLE', 'CLEVELAND', 'CISITALIA', 'CHIREY'] + for brand in brands: + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", (brand,)) + + print(f"Agregadas {len(brands)} marcas históricas") + + # Insertar modelos por marca + # CONTINENTAL + continental_models = ['BEACON', 'ACE', 'FLYER'] + for model in continental_models: + cursor.execute("SELECT id FROM brands WHERE name = ?", ("CONTINENTAL",)) + brand_id = cursor.fetchone()[0] + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + + # CORD + cord_models = ['L-29', '810', '812'] + for model in cord_models: + cursor.execute("SELECT id FROM brands WHERE name = ?", ("CORD",)) + brand_id = cursor.fetchone()[0] + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + + # COLE + cole_models = ['SERIES 890', 'AERO EIGHT', 'SERIES 870', '8-50', '4-40', '6-50', '6-60', + 'FOUR', 'SIX', 'FIFTY', 'FORTY', 'SIXTY', 'MODEL 30'] + for model in cole_models: + cursor.execute("SELECT id FROM brands WHERE name = ?", ("COLE",)) + brand_id = cursor.fetchone()[0] + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + + # CLEVELAND + cleveland_models = ['MODEL 31', 'MODEL 43', 'MODEL 42', 'MODEL 41', 'MODEL 40'] + for model in cleveland_models: + cursor.execute("SELECT id FROM brands WHERE name = ?", ("CLEVELAND",)) + brand_id = cursor.fetchone()[0] + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + + # CISITALIA + cisitalia_models = ['202'] + for model in cisitalia_models: + cursor.execute("SELECT id FROM brands WHERE name = ?", ("CISITALIA",)) + brand_id = cursor.fetchone()[0] + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + + # CHIREY + chirey_models = ['ARRIZO 8', 'TIGGO 4PRO', 'TIGGO 7PRO', 'TIGGO 8PRO', 'OMODA 5'] + for model in chirey_models: + cursor.execute("SELECT id FROM brands WHERE name = ?", ("CHIREY",)) + brand_id = cursor.fetchone()[0] + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + + print("Agregados modelos para todas las marcas") + + # Datos históricos de años y motores para cada marca + historical_data = [ + # CONTINENTAL + ('CONTINENTAL', 'BEACON', 1934, '4cyl'), + ('CONTINENTAL', 'ACE', 1933, '6cyl'), + ('CONTINENTAL', 'BEACON', 1933, '4cyl'), + ('CONTINENTAL', 'FLYER', 1933, '6cyl'), + + # CORD + ('CORD', 'L-29', 1933, '4.7L 289cid V8'), + ('CORD', '812', 1936, '4.7L 289cid V8'), + ('CORD', '810', 1936, '4.7L 289cid V8'), + ('CORD', '812', 1936, '8cyl'), + ('CORD', 'L-29', 1932, '4.9L 298cid L8'), + ('CORD', 'L-29', 1931, '4.9L 298cid L8'), + ('CORD', 'L-29', 1930, '4.9L 298cid L8'), + ('CORD', 'L-29', 1929, '8cyl'), + + # COLE + ('COLE', 'SERIES 890', 1925, '8cyl'), + ('COLE', 'SERIES 890', 1924, '8cyl'), + ('COLE', 'SERIES 890', 1923, '8cyl'), + ('COLE', 'AERO EIGHT', 1922, '8cyl'), + ('COLE', 'AERO EIGHT', 1921, '8cyl'), + ('COLE', 'AERO EIGHT', 1920, '8cyl'), + ('COLE', 'SERIES 870', 1919, '8cyl'), + ('COLE', 'SERIES 870', 1918, '8cyl'), + ('COLE', '8-50', 1916, '8cyl'), + ('COLE', '4-40', 1915, '4cyl'), + ('COLE', '6-50', 1915, '6cyl'), + ('COLE', '6-60', 1915, '6cyl'), + ('COLE', 'FOUR', 1914, '4cyl'), + ('COLE', 'SIX', 1914, '6cyl'), + ('COLE', 'FIFTY', 1913, '4cyl'), + ('COLE', 'FORTY', 1913, '4cyl'), + ('COLE', 'SIXTY', 1913, '6cyl'), + ('COLE', 'FORTY', 1912, '4cyl'), + ('COLE', 'MODEL 30', 1911, '4cyl'), + ('COLE', 'MODEL 30', 1910, '4cyl'), + + # CLEVELAND + ('CLEVELAND', 'MODEL 31', 1926, '6cyl'), + ('CLEVELAND', 'MODEL 43', 1926, '6cyl'), + ('CLEVELAND', 'MODEL 31', 1925, '6cyl'), + ('CLEVELAND', 'MODEL 43', 1925, '6cyl'), + ('CLEVELAND', 'MODEL 42', 1924, '6cyl'), + ('CLEVELAND', 'MODEL 42', 1923, '6cyl'), + ('CLEVELAND', 'MODEL 41', 1922, '6cyl'), + ('CLEVELAND', 'MODEL 41', 1921, '6cyl'), + ('CLEVELAND', 'MODEL 40', 1920, '6cyl'), + ('CLEVELAND', 'MODEL 40', 1919, '6cyl'), + + # CISITALIA + ('CISITALIA', '202', 1952, '1.1L L4'), + ('CISITALIA', '202', 1951, '1.1L L4'), + ('CISITALIA', '202', 1950, '1.1L L4'), + ('CISITALIA', '202', 1949, '1.1L 66cid L4'), + ('CISITALIA', '202', 1948, '1.1L 66cid L4'), + ('CISITALIA', '202', 1947, '1.1L 66cid L4'), + + # CHIREY + ('CHIREY', 'ARRIZO 8', 2025, '1.6L L4 Turbocharged'), + ('CHIREY', 'TIGGO 4PRO', 2025, '1.5L L4 Turbocharged'), + ('CHIREY', 'TIGGO 7PRO', 2025, '1.5L L4 Turbocharged'), + ('CHIREY', 'TIGGO 8PRO', 2025, '1.6L L4 Turbocharged'), + ('CHIREY', 'ARRIZO 8', 2024, '1.6L L4 Turbocharged'), + ('CHIREY', 'TIGGO 4PRO', 2024, '1.5L L4 Turbocharged'), + ('CHIREY', 'TIGGO 7PRO', 2024, '1.5L L4 ELECTRIC/GAS Turbocharged'), + ('CHIREY', 'TIGGO 7PRO', 2024, '1.5L L4 Turbocharged'), + ('CHIREY', 'TIGGO 8PRO', 2024, '1.6L L4 Turbocharged'), + ('CHIREY', 'TIGGO 8PRO', 2024, '1.5L L4 ELECTRIC/GAS Turbocharged'), + ('CHIREY', 'TIGGO 8PRO', 2024, '2.0L L4 Turbocharged'), + ('CHIREY', 'OMODA 5', 2023, '1.5L L4'), + ('CHIREY', 'TIGGO 4PRO', 2023, '1.5L L4'), + ('CHIREY', 'TIGGO 7PRO', 2023, '1.5L L4'), + ('CHIREY', 'TIGGO 8PRO', 2023, '1.5L L4 ELECTRIC/GAS Turbocharged'), + ('CHIREY', 'TIGGO 8PRO', 2023, '1.6L L4 Turbocharged'), + ('CHIREY', 'TIGGO 8PRO', 2023, '2.0L L4 Turbocharged') + ] + + # Insertar años + years = list(set([data[2] for data in historical_data])) # Obtener años únicos + for year in years: + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + print(f"Agregados {len(years)} años históricos") + + # Insertar motores + engines = list(set([data[3] for data in historical_data])) # Obtener motores únicos + for engine in engines: + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + print(f"Agregados {len(engines)} motores históricos") + + # Crear combinaciones modelo-año-motor + for brand_name, model_name, year, engine_name in historical_data: + # Obtener IDs + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand_name,)) + brand_result = cursor.fetchone() + if brand_result: + brand_id = brand_result[0] + else: + print(f"Advertencia: Marca {brand_name} no encontrada") + continue + + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model_name)) + model_result = cursor.fetchone() + if model_result: + model_id = model_result[0] + else: + print(f"Advertencia: Modelo {model_name} no encontrado para la marca {brand_name}") + continue + + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_result = cursor.fetchone() + if year_result: + year_id = year_result[0] + else: + print(f"Advertencia: Año {year} no encontrado") + continue + + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + engine_result = cursor.fetchone() + if engine_result: + engine_id = engine_result[0] + else: + print(f"Advertencia: Motor {engine_name} no encontrado") + continue + + # Insertar la combinación modelo-año-motor + cursor.execute( + """INSERT OR REPLACE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Se agregaron {len(historical_data)} combinaciones modelo-año-motor históricas") + print("Datos históricos agregados exitosamente a la base de datos!") + + # Mostrar algunos resultados + print("\nAlgunos vehículos históricos agregados:") + cursor.execute(""" + SELECT b.name, m.name, y.year, e.name + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + ORDER BY y.year DESC + LIMIT 20 + """) + + results = cursor.fetchall() + for brand, model, year, engine in results: + print(f" {year} {brand} {model} - {engine}") + + except Exception as e: + print(f"Error al agregar datos históricos: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + add_historical_data() \ No newline at end of file diff --git a/check_and_remove_brands.py b/check_and_remove_brands.py new file mode 100644 index 0000000..f42438a --- /dev/null +++ b/check_and_remove_brands.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 +""" +Script para eliminar marcas específicas y limpiar marcas sin vehículos +""" + +import sqlite3 +import os + +def remove_brands_and_cleanup(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Verificando marcas en la base de datos...") + + # Mostrar todas las marcas + cursor.execute("SELECT id, name FROM brands ORDER BY name") + all_brands = cursor.fetchall() + print("Todas las marcas en la base de datos:") + for brand_id, brand_name in all_brands: + print(f" ID: {brand_id}, Nombre: '{brand_name}'") + + # Marcas a eliminar (ahora con las mayúsculas exactas según lo que vimos en el resultado anterior) + brands_to_remove = ['Ford', 'Toyota', 'Nissan', 'Honda', 'Chevrolet'] + + print(f"\nMarcas a eliminar: {', '.join(brands_to_remove)}") + + try: + # Contar cuántos vehículos tenemos para estas marcas antes de eliminar + placeholders = ','.join(['?' for _ in brands_to_remove]) + cursor.execute(f""" + SELECT COUNT(*) + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + WHERE b.name IN ({placeholders}) + """, brands_to_remove) + count_to_delete = cursor.fetchone()[0] + + print(f"Se eliminarán {count_to_delete} vehículos de las marcas especificadas") + + if count_to_delete > 0: + print("Procediendo con la eliminación...") + + # Eliminar las combinaciones modelo-año-motor para los modelos de las marcas especificadas + cursor.execute(f""" + DELETE FROM model_year_engine + WHERE model_id IN ( + SELECT m.id FROM models m + JOIN brands b ON m.brand_id = b.id + WHERE b.name IN ({placeholders}) + ) + """, brands_to_remove) + + # Eliminar los modelos de las marcas especificadas + cursor.execute(f""" + DELETE FROM models + WHERE brand_id IN ( + SELECT id FROM brands WHERE name IN ({placeholders}) + ) + """, brands_to_remove) + + # Eliminar las marcas especificadas + cursor.execute(f""" + DELETE FROM brands + WHERE name IN ({placeholders}) + """, brands_to_remove) + + # Eliminar marcas que no tienen modelos asociados + print("Eliminando marcas sin vehículos...") + cursor.execute(""" + DELETE FROM brands + WHERE id NOT IN ( + SELECT DISTINCT brand_id FROM models + ) + """) + + conn.commit() + + # Mostrar un resumen de la base de datos actualizada + print("\nResumen de la base de datos actualizada:") + + # Contar vehículos restantes + cursor.execute(""" + SELECT COUNT(*) + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + """) + total_vehicles = cursor.fetchone()[0] + print(f"Total de vehículos restantes: {total_vehicles}") + + # Contar marcas restantes + cursor.execute("SELECT COUNT(*) FROM brands") + total_brands = cursor.fetchone()[0] + print(f"Total de marcas restantes: {total_brands}") + + # Mostrar marcas restantes + cursor.execute("SELECT name FROM brands ORDER BY name") + remaining_brands = cursor.fetchall() + print(f"Marcas restantes: {[brand[0] for brand in remaining_brands]}") + + # Mostrar rango de años actual + cursor.execute(""" + SELECT MIN(y.year), MAX(y.year) + FROM years y + JOIN model_year_engine mye ON y.id = mye.year_id + """) + min_year, max_year = cursor.fetchone() + if min_year and max_year: + print(f"Rango de años actual: {min_year} - {max_year}") + else: + print("No hay años con vehículos registrados") + + except Exception as e: + print(f"Error al eliminar marcas y limpiar la base de datos: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + remove_brands_and_cleanup() \ No newline at end of file diff --git a/dashboard/README.md b/dashboard/README.md new file mode 100644 index 0000000..f4aea11 --- /dev/null +++ b/dashboard/README.md @@ -0,0 +1,79 @@ +# Vehicle Database Dashboard + +A web-based dashboard for searching and filtering vehicle data from your database. + +## Features + +- Filter vehicles by brand, model, year, and engine +- Responsive web interface with Bootstrap +- Real-time filtering and search +- Detailed vehicle information display +- Modern UI with cards and badges + +## Prerequisites + +- Python 3.x +- Flask (installed via `sudo apt-get install python3-flask`) +- SQLite database with vehicle data (created in the vehicle_database directory) + +## Setup + +1. Make sure you have the vehicle database created in the `../vehicle_database/vehicle_database.db` path +2. Install Flask: `sudo apt-get install python3-flask` +3. Run the dashboard server: `python3 server.py` + +## Usage + +1. Start the server: + ```bash + cd dashboard + python3 server.py + ``` + +2. Open your web browser and navigate to `http://localhost:5000` + +3. Use the filters on the left panel to search for vehicles: + - Select a brand from the dropdown + - Select a model (based on the selected brand) + - Select a year + - Select an engine type + - Click "Search Vehicles" to apply filters + +4. The results will appear in the right panel with detailed information + +## API Endpoints + +The dashboard uses the following API endpoints: + +- `GET /api/brands` - Get all vehicle brands +- `GET /api/models?brand=[brand]` - Get models for a specific brand +- `GET /api/years` - Get all years +- `GET /api/engines` - Get all engines +- `GET /api/vehicles?[filters]` - Search vehicles with optional filters + +## File Structure + +``` +dashboard/ +├── index.html # Main dashboard page +├── dashboard.js # Frontend JavaScript +├── server.py # Flask backend +├── requirements.txt # Python dependencies +├── start_dashboard.sh # Startup script +└── README.md # This file +``` + +## Customization + +You can customize the dashboard by: + +- Modifying the CSS styles in index.html +- Adding more filters in the JavaScript +- Changing the layout in index.html +- Adding more vehicle details in the display + +## Troubleshooting + +- If the server won't start, make sure the vehicle database exists +- If filters don't populate, check that the database has data +- If the page doesn't load, verify that Flask is installed correctly \ No newline at end of file diff --git a/dashboard/dashboard.js b/dashboard/dashboard.js new file mode 100644 index 0000000..787ec35 --- /dev/null +++ b/dashboard/dashboard.js @@ -0,0 +1,440 @@ +// Vehicle Dashboard JavaScript - Navegación por tarjetas +class VehicleDashboard { + constructor() { + this.currentView = 'brands'; // brands, models, vehicles + this.selectedBrand = null; + this.selectedModel = null; + this.allVehicles = []; + this.filteredVehicles = []; + this.stats = { brands: 0, models: 0, vehicles: 0 }; + this.init(); + } + + async init() { + await this.loadStats(); + await this.showBrands(); + this.bindFilterEvents(); + } + + async loadStats() { + try { + const [brandsRes, vehiclesRes] = await Promise.all([ + fetch('/api/brands'), + fetch('/api/vehicles') + ]); + + if (brandsRes.ok && vehiclesRes.ok) { + const brands = await brandsRes.json(); + const vehicles = await vehiclesRes.json(); + + // Contar modelos únicos + const uniqueModels = new Set(vehicles.map(v => `${v.brand}-${v.model}`)); + + this.stats.brands = brands.length; + this.stats.models = uniqueModels.size; + this.stats.vehicles = vehicles.length; + + document.getElementById('totalBrands').textContent = this.stats.brands; + document.getElementById('totalModels').textContent = this.stats.models; + document.getElementById('totalVehicles').textContent = this.stats.vehicles; + } + } catch (error) { + console.error('Error loading stats:', error); + } + } + + updateBreadcrumb() { + const breadcrumb = document.getElementById('breadcrumb'); + let html = ''; + + if (this.currentView === 'brands') { + html = ``; + } else if (this.currentView === 'models') { + html = ` + + + `; + } else if (this.currentView === 'vehicles') { + html = ` + + + + `; + } + + breadcrumb.innerHTML = html; + } + + async showBrands() { + this.currentView = 'brands'; + this.selectedBrand = null; + this.selectedModel = null; + this.updateBreadcrumb(); + this.hideFilters(); + + const container = document.getElementById('mainContent'); + container.innerHTML = ` +
+ +

Cargando marcas...

+
+ `; + + try { + const [brandsRes, vehiclesRes] = await Promise.all([ + fetch('/api/brands'), + fetch('/api/vehicles') + ]); + + if (!brandsRes.ok || !vehiclesRes.ok) { + throw new Error('Error al cargar datos'); + } + + const brands = await brandsRes.json(); + const vehicles = await vehiclesRes.json(); + + // Contar modelos y vehículos por marca + const brandStats = {}; + brands.forEach(brand => { + brandStats[brand] = { models: new Set(), vehicles: 0 }; + }); + + vehicles.forEach(v => { + if (brandStats[v.brand]) { + brandStats[v.brand].models.add(v.model); + brandStats[v.brand].vehicles++; + } + }); + + if (brands.length === 0) { + container.innerHTML = ` +
+ +

No hay marcas disponibles

+

Agrega algunas marcas a la base de datos

+
+ `; + return; + } + + container.innerHTML = `
+ ${brands.map(brand => ` +
+
+ +
+
${brand}
+
+ ${brandStats[brand].models.size} modelos +
+
+ ${brandStats[brand].vehicles} vehículos +
+
+ `).join('')} +
`; + + } catch (error) { + console.error('Error:', error); + container.innerHTML = ` +
+ +

Error al cargar marcas

+

${error.message}

+
+ `; + } + } + + async goToModels(brand) { + this.currentView = 'models'; + this.selectedBrand = brand; + this.selectedModel = null; + this.updateBreadcrumb(); + this.hideFilters(); + + const container = document.getElementById('mainContent'); + container.innerHTML = ` +
+ +

Cargando modelos de ${brand}...

+
+ `; + + try { + const [modelsRes, vehiclesRes] = await Promise.all([ + fetch(`/api/models?brand=${encodeURIComponent(brand)}`), + fetch(`/api/vehicles?brand=${encodeURIComponent(brand)}`) + ]); + + if (!modelsRes.ok || !vehiclesRes.ok) { + throw new Error('Error al cargar datos'); + } + + const models = await modelsRes.json(); + const vehicles = await vehiclesRes.json(); + + // Contar vehículos y años por modelo + const modelStats = {}; + models.forEach(model => { + modelStats[model] = { years: new Set(), vehicles: 0, engines: new Set() }; + }); + + vehicles.forEach(v => { + if (modelStats[v.model]) { + modelStats[v.model].years.add(v.year); + modelStats[v.model].vehicles++; + modelStats[v.model].engines.add(v.engine); + } + }); + + if (models.length === 0) { + container.innerHTML = ` +
+ +

No hay modelos para ${brand}

+

Esta marca no tiene modelos registrados

+ +
+ `; + return; + } + + container.innerHTML = `
+ ${models.map(model => { + const stats = modelStats[model]; + const yearsArray = Array.from(stats.years).sort((a, b) => b - a); + const yearRange = yearsArray.length > 0 + ? (yearsArray.length > 1 + ? `${yearsArray[yearsArray.length - 1]} - ${yearsArray[0]}` + : `${yearsArray[0]}`) + : 'N/A'; + + return ` +
+
${model}
+
+ ${yearRange} +
+
+ ${stats.engines.size} motores +
+
+ ${stats.vehicles} variantes +
+
+ `; + }).join('')} +
`; + + } catch (error) { + console.error('Error:', error); + container.innerHTML = ` +
+ +

Error al cargar modelos

+

${error.message}

+ +
+ `; + } + } + + async goToVehicles(brand, model) { + this.currentView = 'vehicles'; + this.selectedBrand = brand; + this.selectedModel = model; + this.updateBreadcrumb(); + this.showFilters(); + + const container = document.getElementById('mainContent'); + container.innerHTML = ` +
+ +

Cargando vehículos...

+
+ `; + + try { + const response = await fetch( + `/api/vehicles?brand=${encodeURIComponent(brand)}&model=${encodeURIComponent(model)}` + ); + + if (!response.ok) { + throw new Error('Error al cargar vehículos'); + } + + this.allVehicles = await response.json(); + this.filteredVehicles = [...this.allVehicles]; + + // Poblar filtros + await this.populateFilters(brand, model); + + this.displayVehicles(); + + } catch (error) { + console.error('Error:', error); + container.innerHTML = ` +
+ +

Error al cargar vehículos

+

${error.message}

+ +
+ `; + } + } + + async populateFilters(brand, model) { + try { + const [yearsRes, enginesRes] = await Promise.all([ + fetch(`/api/years?brand=${encodeURIComponent(brand)}&model=${encodeURIComponent(model)}`), + fetch(`/api/engines?brand=${encodeURIComponent(brand)}&model=${encodeURIComponent(model)}`) + ]); + + if (yearsRes.ok) { + const years = await yearsRes.json(); + const yearFilter = document.getElementById('yearFilter'); + yearFilter.innerHTML = ''; + years.forEach(year => { + yearFilter.innerHTML += ``; + }); + } + + if (enginesRes.ok) { + const engines = await enginesRes.json(); + const engineFilter = document.getElementById('engineFilter'); + engineFilter.innerHTML = ''; + engines.forEach(engine => { + engineFilter.innerHTML += ``; + }); + } + + } catch (error) { + console.error('Error populating filters:', error); + } + } + + bindFilterEvents() { + document.getElementById('yearFilter').addEventListener('change', () => { + this.applyFilters(); + }); + + document.getElementById('engineFilter').addEventListener('change', () => { + this.applyFilters(); + }); + } + + applyFilters() { + const year = document.getElementById('yearFilter').value; + const engine = document.getElementById('engineFilter').value; + + this.filteredVehicles = this.allVehicles.filter(v => { + return (!year || v.year.toString() === year) && + (!engine || v.engine === engine); + }); + + this.displayVehicles(); + } + + displayVehicles() { + const container = document.getElementById('mainContent'); + const resultCount = document.getElementById('resultCount'); + + resultCount.textContent = `${this.filteredVehicles.length} resultado${this.filteredVehicles.length !== 1 ? 's' : ''}`; + + if (this.filteredVehicles.length === 0) { + container.innerHTML = ` +
+ +

No se encontraron vehículos

+

Intenta ajustar los filtros

+
+ `; + return; + } + + container.innerHTML = `
+ ${this.filteredVehicles.map(v => ` +
+
+
${v.year} ${v.brand} ${v.model}
+
${v.engine}
+
+
+
+
+ +
${v.fuel_type || 'N/A'}
+
+
+ +
${v.power_hp || 0} HP
+
+
+ +
${v.transmission || 'N/A'}
+
+
+ +
${v.drivetrain || 'N/A'}
+
+
+ +
${v.cylinders || 0} cil.
+
+
+ +
${v.displacement_cc || 0} cc
+
+
+ ${v.trim_level && v.trim_level !== 'unknown' ? ` +
+ ${v.trim_level} +
+ ` : ''} +
+
+ `).join('')} +
`; + } + + goToBrands() { + this.showBrands(); + } + + showFilters() { + document.getElementById('filtersBar').style.display = 'block'; + // Reset filters + document.getElementById('yearFilter').value = ''; + document.getElementById('engineFilter').value = ''; + } + + hideFilters() { + document.getElementById('filtersBar').style.display = 'none'; + } +} + +// Initialize dashboard globally +let dashboard; +document.addEventListener('DOMContentLoaded', () => { + dashboard = new VehicleDashboard(); +}); diff --git a/dashboard/index.html b/dashboard/index.html new file mode 100644 index 0000000..a4849da --- /dev/null +++ b/dashboard/index.html @@ -0,0 +1,367 @@ + + + + + + Base de Datos de Vehículos + + + + + +
+
+
+
+

Base de Datos de Vehículos

+

Explora vehículos por marca, modelo y especificaciones

+
+
+
+
+
0
+
Marcas
+
+
+
0
+
Modelos
+
+
+
0
+
Vehículos
+
+
+
+
+
+
+ +
+ + + + + + + +
+
+ +

Cargando...

+
+
+
+ + + + + diff --git a/dashboard/requirements.txt b/dashboard/requirements.txt new file mode 100644 index 0000000..cc35792 --- /dev/null +++ b/dashboard/requirements.txt @@ -0,0 +1 @@ +Flask==2.3.3 \ No newline at end of file diff --git a/dashboard/server.py b/dashboard/server.py new file mode 100644 index 0000000..f8414af --- /dev/null +++ b/dashboard/server.py @@ -0,0 +1,248 @@ +from flask import Flask, render_template, jsonify, request, send_from_directory +import sqlite3 +import os + +app = Flask(__name__, static_folder='.') + +# Database path - adjust as needed +DATABASE_PATH = '../vehicle_database/vehicle_database.db' + +def get_db_connection(): + """Get a connection to the vehicle database""" + conn = sqlite3.connect(DATABASE_PATH) + conn.row_factory = sqlite3.Row # This enables column access by name + return conn + +def get_all_brands(): + """Get all unique brands from the database""" + conn = get_db_connection() + cursor = conn.cursor() + cursor.execute("SELECT DISTINCT name FROM brands ORDER BY name") + brands = [row['name'] for row in cursor.fetchall()] + conn.close() + return brands + +def get_all_years(): + """Get all unique years from the database""" + conn = get_db_connection() + cursor = conn.cursor() + cursor.execute("SELECT DISTINCT year FROM years ORDER BY year DESC") + years = [row['year'] for row in cursor.fetchall()] + conn.close() + return years + +def get_all_engines(): + """Get all unique engines from the database""" + conn = get_db_connection() + cursor = conn.cursor() + cursor.execute("SELECT DISTINCT name FROM engines ORDER BY name") + engines = [row['name'] for row in cursor.fetchall()] + conn.close() + return engines + +def get_models_by_brand(brand_name=None): + """Get all models, optionally filtered by brand""" + conn = get_db_connection() + cursor = conn.cursor() + + if brand_name: + cursor.execute(""" + SELECT DISTINCT m.name + FROM models m + JOIN brands b ON m.brand_id = b.id + WHERE b.name = ? + ORDER BY m.name + """, (brand_name,)) + else: + cursor.execute("SELECT DISTINCT name FROM models ORDER BY name") + + models = [row['name'] for row in cursor.fetchall()] + conn.close() + return models + +def search_vehicles(brand=None, model=None, year=None, engine=None): + """Search for vehicles based on filters""" + conn = get_db_connection() + cursor = conn.cursor() + + query = """ + SELECT + b.name AS brand, + m.name AS model, + y.year, + e.name AS engine, + e.power_hp, + e.displacement_cc, + e.cylinders, + e.fuel_type, + mye.trim_level, + mye.drivetrain, + mye.transmission + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + WHERE 1=1 + """ + + params = [] + if brand: + query += " AND b.name = ?" + params.append(brand) + if model: + query += " AND m.name = ?" + params.append(model) + if year: + query += " AND y.year = ?" + params.append(int(year)) + if engine: + query += " AND e.name = ?" + params.append(engine) + + query += " ORDER BY b.name, m.name, y.year" + + cursor.execute(query, params) + results = cursor.fetchall() + conn.close() + + # Convert to list of dictionaries + vehicles = [] + for row in results: + vehicle = { + 'brand': row['brand'], + 'model': row['model'], + 'year': row['year'], + 'engine': row['engine'], + 'power_hp': row['power_hp'] or 0, + 'displacement_cc': row['displacement_cc'] or 0, + 'cylinders': row['cylinders'] or 0, + 'fuel_type': row['fuel_type'] or 'unknown', + 'trim_level': row['trim_level'] or 'unknown', + 'drivetrain': row['drivetrain'] or 'unknown', + 'transmission': row['transmission'] or 'unknown' + } + vehicles.append(vehicle) + + return vehicles + +@app.route('/') +def index(): + """Serve the main dashboard page""" + return send_from_directory('.', 'index.html') + +@app.route('/') +def static_files(path): + """Serve static files""" + return send_from_directory('.', path) + +@app.route('/api/brands') +def api_brands(): + """API endpoint to get all brands""" + brands = get_all_brands() + return jsonify(brands) + +@app.route('/api/years') +def api_years(): + """API endpoint to get years, optionally filtered by brand and/or model""" + brand = request.args.get('brand') + model = request.args.get('model') + + conn = get_db_connection() + cursor = conn.cursor() + + query = """ + SELECT DISTINCT y.year + FROM years y + JOIN model_year_engine mye ON y.id = mye.year_id + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + WHERE 1=1 + """ + + params = [] + if brand: + query += " AND b.name = ?" + params.append(brand) + if model: + query += " AND m.name = ?" + params.append(model) + + query += " ORDER BY y.year DESC" + + cursor.execute(query, params) + results = cursor.fetchall() + conn.close() + + years = [row['year'] for row in results] + return jsonify(years) + +@app.route('/api/engines') +def api_engines(): + """API endpoint to get engines, optionally filtered by brand, model, and/or year""" + brand = request.args.get('brand') + model = request.args.get('model') + year = request.args.get('year') + + conn = get_db_connection() + cursor = conn.cursor() + + query = """ + SELECT DISTINCT e.name + FROM engines e + JOIN model_year_engine mye ON e.id = mye.engine_id + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + WHERE 1=1 + """ + + params = [] + if brand: + query += " AND b.name = ?" + params.append(brand) + if model: + query += " AND m.name = ?" + params.append(model) + if year: + query += " AND y.year = ?" + params.append(int(year)) + + query += " ORDER BY e.name" + + cursor.execute(query, params) + results = cursor.fetchall() + conn.close() + + engines = [row['name'] for row in results] + return jsonify(engines) + +@app.route('/api/models') +def api_models(): + """API endpoint to get models, optionally filtered by brand""" + brand = request.args.get('brand') + models = get_models_by_brand(brand) + return jsonify(models) + +@app.route('/api/vehicles') +def api_vehicles(): + """API endpoint to search for vehicles""" + brand = request.args.get('brand') + model = request.args.get('model') + year = request.args.get('year') + engine = request.args.get('engine') + + vehicles = search_vehicles(brand, model, year, engine) + return jsonify(vehicles) + +if __name__ == '__main__': + # Check if database exists + if not os.path.exists(DATABASE_PATH): + print(f"Database not found at {DATABASE_PATH}") + print("Please make sure the vehicle database is created first.") + exit(1) + + print("Starting Vehicle Dashboard Server...") + print("Visit http://localhost:5000 to access the dashboard locally") + print("Visit http://192.168.10.198:5000 to access the dashboard from other computers on the network") + app.run(debug=True, host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/dashboard/start_dashboard.sh b/dashboard/start_dashboard.sh new file mode 100755 index 0000000..30db1dc --- /dev/null +++ b/dashboard/start_dashboard.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Startup script for Vehicle Dashboard + +echo "Vehicle Dashboard Startup Script" +echo "================================" + +# Check if the vehicle database exists +if [ ! -f "../vehicle_database/vehicle_database.db" ]; then + echo "Error: Vehicle database not found!" + echo "Please make sure you have created the vehicle database first." + exit 1 +fi + +echo "Vehicle database found." + +# Check if Flask is available +if python3 -c "import flask" &> /dev/null; then + echo "Flask is available." +else + echo "Installing Flask..." + sudo apt-get update + sudo apt-get install -y python3-flask +fi + +echo "Starting Vehicle Dashboard Server..." +echo "Access the dashboard at: http://localhost:5000" +echo "Press Ctrl+C to stop the server." + +cd /home/Autopartes/dashboard +python3 server.py \ No newline at end of file diff --git a/docs/API.md b/docs/API.md new file mode 100644 index 0000000..1505d02 --- /dev/null +++ b/docs/API.md @@ -0,0 +1,270 @@ +# API Reference - Autoparts DB + +Documentación completa de la API REST del sistema Autoparts DB. + +## Base URL + +``` +http://localhost:5000/api +``` + +## Endpoints + +### GET /api/brands + +Obtiene la lista de todas las marcas de vehículos disponibles. + +**Request:** +```bash +curl http://localhost:5000/api/brands +``` + +**Response:** +```json +{ + "brands": [ + { + "id": 1, + "name": "Toyota", + "country": "Japan", + "founded_year": 1937 + }, + { + "id": 2, + "name": "Honda", + "country": "Japan", + "founded_year": 1948 + } + ] +} +``` + +--- + +### GET /api/models + +Obtiene modelos de vehículos, opcionalmente filtrados por marca. + +**Parámetros:** +| Parámetro | Tipo | Requerido | Descripción | +|-----------|------|-----------|-------------| +| brand | string | No | Nombre de la marca para filtrar | + +**Request:** +```bash +# Todos los modelos +curl http://localhost:5000/api/models + +# Modelos de Toyota +curl "http://localhost:5000/api/models?brand=Toyota" +``` + +**Response:** +```json +{ + "models": [ + { + "id": 1, + "name": "Camry", + "brand": "Toyota", + "body_type": "Sedan", + "generation": "XV70", + "production_start_year": 2017, + "production_end_year": null + } + ] +} +``` + +--- + +### GET /api/years + +Obtiene todos los años disponibles en la base de datos. + +**Request:** +```bash +curl http://localhost:5000/api/years +``` + +**Response:** +```json +{ + "years": [1990, 1991, 1992, ..., 2024, 2025] +} +``` + +--- + +### GET /api/engines + +Obtiene todos los motores disponibles. + +**Request:** +```bash +curl http://localhost:5000/api/engines +``` + +**Response:** +```json +{ + "engines": [ + { + "id": 1, + "name": "2.5L 4-Cylinder", + "displacement_cc": 2500, + "cylinders": 4, + "fuel_type": "Gasoline", + "power_hp": 203, + "torque_nm": 250, + "engine_code": "A25A-FKS" + } + ] +} +``` + +--- + +### GET /api/vehicles + +Búsqueda de vehículos con múltiples filtros. + +**Parámetros:** +| Parámetro | Tipo | Requerido | Descripción | +|-----------|------|-----------|-------------| +| brand | string | No | Marca del vehículo | +| model | string | No | Modelo del vehículo | +| year | integer | No | Año del vehículo | +| engine | string | No | Nombre/código del motor | +| limit | integer | No | Límite de resultados (default: 100) | + +**Request:** +```bash +# Búsqueda completa +curl "http://localhost:5000/api/vehicles?brand=Toyota&model=Camry&year=2020" + +# Solo por marca +curl "http://localhost:5000/api/vehicles?brand=Honda" + +# Con límite +curl "http://localhost:5000/api/vehicles?brand=Ford&limit=50" +``` + +**Response:** +```json +{ + "vehicles": [ + { + "brand": "Toyota", + "model": "Camry", + "year": 2020, + "body_type": "Sedan", + "generation": "XV70", + "engine_name": "2.5L 4-Cylinder", + "displacement_cc": 2500, + "cylinders": 4, + "fuel_type": "Gasoline", + "power_hp": 203, + "torque_nm": 250, + "engine_code": "A25A-FKS", + "trim_level": "LE", + "drivetrain": "FWD", + "transmission": "8-Speed Automatic" + } + ], + "total": 1 +} +``` + +--- + +## Códigos de Respuesta + +| Código | Descripción | +|--------|-------------| +| 200 | OK - Solicitud exitosa | +| 400 | Bad Request - Parámetros inválidos | +| 404 | Not Found - Recurso no encontrado | +| 500 | Internal Server Error - Error del servidor | + +## Manejo de Errores + +Todas las respuestas de error siguen el formato: + +```json +{ + "error": "Descripción del error", + "code": 400 +} +``` + +## Ejemplos de Uso + +### Python + +```python +import requests + +BASE_URL = "http://localhost:5000/api" + +# Obtener marcas +response = requests.get(f"{BASE_URL}/brands") +brands = response.json()["brands"] + +# Buscar vehículos +params = { + "brand": "Toyota", + "year": 2020, + "limit": 50 +} +response = requests.get(f"{BASE_URL}/vehicles", params=params) +vehicles = response.json()["vehicles"] +``` + +### JavaScript + +```javascript +const BASE_URL = 'http://localhost:5000/api'; + +// Obtener marcas +async function getBrands() { + const response = await fetch(`${BASE_URL}/brands`); + const data = await response.json(); + return data.brands; +} + +// Buscar vehículos +async function searchVehicles(filters) { + const params = new URLSearchParams(filters); + const response = await fetch(`${BASE_URL}/vehicles?${params}`); + const data = await response.json(); + return data.vehicles; +} + +// Uso +const vehicles = await searchVehicles({ + brand: 'Toyota', + year: 2020 +}); +``` + +### cURL + +```bash +# Obtener todas las marcas +curl -X GET http://localhost:5000/api/brands + +# Buscar vehículos Toyota del 2020 +curl -X GET "http://localhost:5000/api/vehicles?brand=Toyota&year=2020" + +# Obtener modelos de Honda +curl -X GET "http://localhost:5000/api/models?brand=Honda" +``` + +## Rate Limiting + +Actualmente no hay límites de tasa implementados. Para uso en producción, se recomienda implementar rate limiting. + +## CORS + +El servidor está configurado para aceptar solicitudes desde cualquier origen (CORS habilitado). Para producción, configure los orígenes permitidos apropiadamente. diff --git a/docs/DATABASE.md b/docs/DATABASE.md new file mode 100644 index 0000000..1ce6ad9 --- /dev/null +++ b/docs/DATABASE.md @@ -0,0 +1,425 @@ +# Documentación de Base de Datos - Autoparts DB + +## Resumen + +La base de datos utiliza SQLite 3 y está diseñada con un esquema normalizado para gestionar información de vehículos de manera eficiente. + +**Archivo:** `vehicle_database/vehicle_database.db` + +## Estadísticas Actuales + +| Tabla | Registros | +|-------|-----------| +| brands | 12 | +| models | 10,923 | +| engines | 10,919 | +| years | ~35 | +| model_year_engine | 12,075 | + +--- + +## Diagrama Entidad-Relación + +``` +┌──────────────┐ +│ brands │ +├──────────────┤ +│ id (PK) │ +│ name │ +│ country │ +│ founded_year │ +│ created_at │ +└──────┬───────┘ + │ + │ 1:N + │ +┌──────▼───────────────┐ +│ models │ +├──────────────────────┤ +│ id (PK) │ +│ brand_id (FK) │───────────────────────┐ +│ name │ │ +│ body_type │ │ +│ generation │ │ +│ production_start_year│ │ +│ production_end_year │ │ +│ created_at │ │ +└──────────────────────┘ │ + │ +┌──────────────────────┐ │ +│ years │ │ +├──────────────────────┤ │ +│ id (PK) │───────────────┐ │ +│ year │ │ │ +│ created_at │ │ │ +└──────────────────────┘ │ │ + │ │ +┌──────────────────────┐ │ │ +│ engines │ │ │ +├──────────────────────┤ │ │ +│ id (PK) │───────┐ │ │ +│ name │ │ │ │ +│ displacement_cc │ │ │ │ +│ cylinders │ │ │ │ +│ fuel_type │ │ │ │ +│ power_hp │ │ │ │ +│ torque_nm │ │ │ │ +│ engine_code │ │ │ │ +│ created_at │ │ │ │ +└──────────────────────┘ │ │ │ + │ │ │ + │ N:1 │ N:1 │ N:1 + │ │ │ + ┌──────▼───────▼───────▼──────┐ + │ model_year_engine │ + ├─────────────────────────────┤ + │ id (PK) │ + │ model_id (FK) │ + │ year_id (FK) │ + │ engine_id (FK) │ + │ trim_level │ + │ drivetrain │ + │ transmission │ + │ created_at │ + └─────────────────────────────┘ +``` + +--- + +## Definición de Tablas + +### Tabla: brands + +Almacena información de los fabricantes de vehículos. + +```sql +CREATE TABLE brands ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + country TEXT, + founded_year INTEGER, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +``` + +| Campo | Tipo | Restricciones | Descripción | +|-------|------|---------------|-------------| +| id | INTEGER | PK, AUTO | Identificador único | +| name | TEXT | NOT NULL, UNIQUE | Nombre de la marca | +| country | TEXT | - | País de origen | +| founded_year | INTEGER | - | Año de fundación | +| created_at | TIMESTAMP | DEFAULT NOW | Fecha de creación | + +**Índices:** +- `idx_brands_name` en `name` + +--- + +### Tabla: models + +Almacena información de los modelos de vehículos. + +```sql +CREATE TABLE models ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + brand_id INTEGER NOT NULL, + name TEXT NOT NULL, + body_type TEXT, + generation TEXT, + production_start_year INTEGER, + production_end_year INTEGER, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (brand_id) REFERENCES brands(id), + UNIQUE(brand_id, name, generation) +); +``` + +| Campo | Tipo | Restricciones | Descripción | +|-------|------|---------------|-------------| +| id | INTEGER | PK, AUTO | Identificador único | +| brand_id | INTEGER | FK, NOT NULL | Referencia a brands | +| name | TEXT | NOT NULL | Nombre del modelo | +| body_type | TEXT | - | Tipo de carrocería | +| generation | TEXT | - | Generación del modelo | +| production_start_year | INTEGER | - | Año inicio producción | +| production_end_year | INTEGER | - | Año fin producción | +| created_at | TIMESTAMP | DEFAULT NOW | Fecha de creación | + +**Valores de body_type:** +- Sedan, Coupe, Hatchback, SUV, Crossover, Truck, Van, Wagon, Convertible + +**Índices:** +- `idx_models_brand_id` en `brand_id` +- `idx_models_name` en `name` + +--- + +### Tabla: engines + +Almacena especificaciones técnicas de los motores. + +```sql +CREATE TABLE engines ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + displacement_cc INTEGER, + cylinders INTEGER, + fuel_type TEXT, + power_hp INTEGER, + torque_nm INTEGER, + engine_code TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + UNIQUE(name, engine_code) +); +``` + +| Campo | Tipo | Restricciones | Descripción | +|-------|------|---------------|-------------| +| id | INTEGER | PK, AUTO | Identificador único | +| name | TEXT | NOT NULL | Nombre descriptivo | +| displacement_cc | INTEGER | - | Cilindrada en cc | +| cylinders | INTEGER | - | Número de cilindros | +| fuel_type | TEXT | - | Tipo de combustible | +| power_hp | INTEGER | - | Potencia en HP | +| torque_nm | INTEGER | - | Torque en Nm | +| engine_code | TEXT | - | Código del fabricante | +| created_at | TIMESTAMP | DEFAULT NOW | Fecha de creación | + +**Valores de fuel_type:** +- Gasoline, Diesel, Hybrid, Electric, Plug-in Hybrid, Flex Fuel + +**Índices:** +- `idx_engines_name` en `name` +- `idx_engines_code` en `engine_code` + +--- + +### Tabla: years + +Tabla de referencia para años de producción. + +```sql +CREATE TABLE years ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + year INTEGER NOT NULL UNIQUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +``` + +| Campo | Tipo | Restricciones | Descripción | +|-------|------|---------------|-------------| +| id | INTEGER | PK, AUTO | Identificador único | +| year | INTEGER | NOT NULL, UNIQUE | Año | +| created_at | TIMESTAMP | DEFAULT NOW | Fecha de creación | + +--- + +### Tabla: model_year_engine + +Tabla de unión que relaciona modelos, años y motores. + +```sql +CREATE TABLE model_year_engine ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + model_id INTEGER NOT NULL, + year_id INTEGER NOT NULL, + engine_id INTEGER NOT NULL, + trim_level TEXT, + drivetrain TEXT, + transmission TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (model_id) REFERENCES models(id), + FOREIGN KEY (year_id) REFERENCES years(id), + FOREIGN KEY (engine_id) REFERENCES engines(id), + UNIQUE(model_id, year_id, engine_id, trim_level) +); +``` + +| Campo | Tipo | Restricciones | Descripción | +|-------|------|---------------|-------------| +| id | INTEGER | PK, AUTO | Identificador único | +| model_id | INTEGER | FK, NOT NULL | Referencia a models | +| year_id | INTEGER | FK, NOT NULL | Referencia a years | +| engine_id | INTEGER | FK, NOT NULL | Referencia a engines | +| trim_level | TEXT | - | Nivel de equipamiento | +| drivetrain | TEXT | - | Tipo de tracción | +| transmission | TEXT | - | Tipo de transmisión | +| created_at | TIMESTAMP | DEFAULT NOW | Fecha de creación | + +**Valores de drivetrain:** +- FWD (Front-Wheel Drive), RWD (Rear-Wheel Drive), AWD (All-Wheel Drive), 4WD (Four-Wheel Drive) + +**Valores de transmission:** +- Manual, Automatic, CVT, DCT, AMT + +**Índices:** +- `idx_mye_model_id` en `model_id` +- `idx_mye_year_id` en `year_id` +- `idx_mye_engine_id` en `engine_id` + +--- + +## Consultas Comunes + +### Obtener todos los vehículos de una marca + +```sql +SELECT + b.name AS brand, + m.name AS model, + y.year, + e.name AS engine, + mye.trim_level, + mye.drivetrain, + mye.transmission +FROM model_year_engine mye +JOIN models m ON mye.model_id = m.id +JOIN brands b ON m.brand_id = b.id +JOIN years y ON mye.year_id = y.id +JOIN engines e ON mye.engine_id = e.id +WHERE b.name = 'Toyota' +ORDER BY m.name, y.year; +``` + +### Buscar vehículos por año + +```sql +SELECT + b.name AS brand, + m.name AS model, + e.name AS engine, + e.power_hp, + mye.trim_level +FROM model_year_engine mye +JOIN models m ON mye.model_id = m.id +JOIN brands b ON m.brand_id = b.id +JOIN years y ON mye.year_id = y.id +JOIN engines e ON mye.engine_id = e.id +WHERE y.year = 2020; +``` + +### Obtener especificaciones de motor + +```sql +SELECT + name, + displacement_cc, + cylinders, + fuel_type, + power_hp, + torque_nm, + engine_code +FROM engines +WHERE cylinders = 6 +ORDER BY power_hp DESC; +``` + +### Contar modelos por marca + +```sql +SELECT + b.name AS brand, + COUNT(DISTINCT m.id) AS model_count +FROM brands b +LEFT JOIN models m ON b.id = m.brand_id +GROUP BY b.id +ORDER BY model_count DESC; +``` + +### Buscar motores por potencia + +```sql +SELECT * +FROM engines +WHERE power_hp >= 300 +ORDER BY power_hp DESC; +``` + +--- + +## Mantenimiento + +### Backup de la Base de Datos + +```bash +# Crear backup +sqlite3 vehicle_database.db ".backup 'backup.db'" + +# O usando cp +cp vehicle_database.db vehicle_database_backup_$(date +%Y%m%d).db +``` + +### Optimización + +```sql +-- Analizar tablas para optimizar consultas +ANALYZE; + +-- Reconstruir índices +REINDEX; + +-- Compactar base de datos +VACUUM; +``` + +### Verificar Integridad + +```sql +PRAGMA integrity_check; +PRAGMA foreign_key_check; +``` + +--- + +## Conexión desde Python + +```python +import sqlite3 + +# Conectar a la base de datos +conn = sqlite3.connect('vehicle_database/vehicle_database.db') +conn.row_factory = sqlite3.Row # Permite acceso por nombre de columna + +# Crear cursor +cursor = conn.cursor() + +# Ejecutar consulta +cursor.execute(""" + SELECT b.name, m.name, y.year + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + WHERE b.name = ? +""", ('Toyota',)) + +# Obtener resultados +for row in cursor.fetchall(): + print(f"{row['name']} - {row['name']} ({row['year']})") + +# Cerrar conexión +conn.close() +``` + +--- + +## Migración de Datos + +### Exportar a CSV + +```bash +sqlite3 -header -csv vehicle_database.db "SELECT * FROM brands;" > brands_export.csv +sqlite3 -header -csv vehicle_database.db "SELECT * FROM models;" > models_export.csv +sqlite3 -header -csv vehicle_database.db "SELECT * FROM engines;" > engines_export.csv +``` + +### Importar desde CSV + +```bash +sqlite3 vehicle_database.db <=2.28.0 +beautifulsoup4>=4.11.0 +lxml>=4.9.0 +``` + +### Instalación Individual + +```bash +# Flask - Framework web +pip install flask + +# Requests - Cliente HTTP +pip install requests + +# BeautifulSoup4 - Parser HTML +pip install beautifulsoup4 + +# lxml - Parser XML/HTML rápido +pip install lxml +``` + +--- + +## Configuración + +### Variables de Entorno (Opcional) + +```bash +# Puerto del servidor (default: 5000) +export FLASK_PORT=5000 + +# Modo debug (solo desarrollo) +export FLASK_DEBUG=1 + +# Ruta de la base de datos +export DATABASE_PATH=/path/to/vehicle_database.db +``` + +### Configuración del Servidor + +Editar `dashboard/server.py`: + +```python +# Cambiar puerto +app.run(host='0.0.0.0', port=5000, debug=False) + +# Para producción +app.run(host='0.0.0.0', port=8080, debug=False) +``` + +--- + +## Verificación de la Instalación + +### 1. Verificar Python + +```bash +python3 --version +# Debería mostrar: Python 3.8.x o superior +``` + +### 2. Verificar Dependencias + +```bash +python3 -c "import flask; print(f'Flask: {flask.__version__}')" +python3 -c "import requests; print(f'Requests: {requests.__version__}')" +python3 -c "import bs4; print(f'BeautifulSoup: {bs4.__version__}')" +``` + +### 3. Verificar Base de Datos + +```bash +cd vehicle_database +python3 -c " +import sqlite3 +conn = sqlite3.connect('vehicle_database.db') +cursor = conn.execute('SELECT COUNT(*) FROM brands') +print(f'Marcas en BD: {cursor.fetchone()[0]}') +conn.close() +" +``` + +### 4. Probar el Dashboard + +```bash +cd dashboard +python3 server.py & +curl http://localhost:5000/api/brands +``` + +--- + +## Solución de Problemas + +### Error: ModuleNotFoundError + +```bash +# Verificar que el entorno virtual está activado +which python3 + +# Reinstalar dependencias +pip install --force-reinstall flask requests beautifulsoup4 lxml +``` + +### Error: Database is locked + +```bash +# Cerrar todas las conexiones a la base de datos +# Reiniciar el servidor +pkill -f server.py +python3 dashboard/server.py +``` + +### Error: Port already in use + +```bash +# Encontrar proceso usando el puerto +lsof -i :5000 + +# Matar el proceso +kill -9 [PID] + +# O usar otro puerto +python3 server.py --port 5001 +``` + +### Error: Permission denied + +```bash +# Dar permisos de ejecución a scripts +chmod +x vehicle_database/setup.sh +chmod +x dashboard/start_dashboard.sh +chmod +x QUICK_START.sh +``` + +--- + +## Instalación en Producción + +### Usando Gunicorn (Recomendado) + +```bash +# Instalar Gunicorn +pip install gunicorn + +# Iniciar servidor +cd dashboard +gunicorn -w 4 -b 0.0.0.0:8080 server:app +``` + +### Usando systemd + +Crear archivo `/etc/systemd/system/autoparts-db.service`: + +```ini +[Unit] +Description=Autoparts DB Dashboard +After=network.target + +[Service] +User=www-data +WorkingDirectory=/path/to/Autoparts-DB/dashboard +ExecStart=/usr/bin/python3 server.py +Restart=always + +[Install] +WantedBy=multi-user.target +``` + +Habilitar e iniciar: + +```bash +sudo systemctl enable autoparts-db +sudo systemctl start autoparts-db +``` + +### Usando Docker (Opcional) + +```dockerfile +FROM python:3.11-slim + +WORKDIR /app +COPY . /app + +RUN pip install flask requests beautifulsoup4 lxml + +EXPOSE 5000 + +CMD ["python3", "dashboard/server.py"] +``` + +```bash +docker build -t autoparts-db . +docker run -p 5000:5000 autoparts-db +``` + +--- + +## Actualizaciones + +```bash +# Obtener últimos cambios +git pull origin main + +# Actualizar dependencias +pip install --upgrade -r requirements.txt +``` + +--- + +## Desinstalación + +```bash +# Desactivar entorno virtual +deactivate + +# Eliminar directorio del proyecto +rm -rf Autoparts-DB + +# Eliminar entorno virtual (si está separado) +rm -rf venv +``` diff --git a/fix_arra_data.py b/fix_arra_data.py new file mode 100644 index 0000000..3297d0a --- /dev/null +++ b/fix_arra_data.py @@ -0,0 +1,180 @@ +""" +Script to fix the ARRA vehicle data in the database. +This will remove the incorrect entry under Aston Martin and add the correct ARRA entry. +""" +import sqlite3 + + +def connect_db(db_path: str = "vehicle_database/vehicle_database.db") -> sqlite3.Connection: + """Connect to the vehicle database.""" + conn = sqlite3.connect(db_path) + conn.execute("PRAGMA foreign_keys = ON") # Enable foreign key constraints + return conn + + +def get_or_insert_brand(conn: sqlite3.Connection, brand_name: str) -> int: + """Get brand ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if brand already exists + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new brand + cursor.execute("INSERT INTO brands (name) VALUES (?)", (brand_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_model(conn: sqlite3.Connection, brand_id: int, model_name: str) -> int: + """Get model ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if model already exists for this brand + cursor.execute( + "SELECT id FROM models WHERE brand_id = ? AND name = ?", + (brand_id, model_name) + ) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new model + cursor.execute( + "INSERT INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model_name) + ) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_engine(conn: sqlite3.Connection, engine_name: str) -> int: + """Get engine ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if engine already exists + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new engine + cursor.execute("INSERT INTO engines (name) VALUES (?)", (engine_name,)) + conn.commit() + return cursor.lastrowid + + +def get_or_insert_year(conn: sqlite3.Connection, year: int) -> int: + """Get year ID or insert if it doesn't exist.""" + cursor = conn.cursor() + + # Check if year already exists + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + result = cursor.fetchone() + + if result: + return result[0] # Return existing ID + + # Insert new year + cursor.execute("INSERT INTO years (year) VALUES (?)", (year,)) + conn.commit() + return cursor.lastrowid + + +def remove_incorrect_arr_entry(conn: sqlite3.Connection) -> None: + """Remove the incorrect ARRA entry under Aston Martin.""" + cursor = conn.cursor() + + # Find the model ID for ARRA under Aston Martin + cursor.execute(""" + SELECT m.id + FROM models m + JOIN brands b ON m.brand_id = b.id + WHERE b.name = 'ASTON MARTIN' AND m.name = 'ARRA' + """) + arra_model_result = cursor.fetchone() + + if arra_model_result: + arra_model_id = arra_model_result[0] + + # Remove the incorrect relationship from model_year_engine + cursor.execute( + "DELETE FROM model_year_engine WHERE model_id = ?", + (arra_model_id,) + ) + + # Remove the ARRA model from models table + cursor.execute( + "DELETE FROM models WHERE id = ?", + (arra_model_id,) + ) + + print(f"Removed incorrect ARRA model with ID {arra_model_id} from Aston Martin") + + conn.commit() + + +def insert_correct_arr_entry(conn: sqlite3.Connection) -> None: + """Insert the correct ARRA EW-1 entry.""" + cursor = conn.cursor() + + # Get or create ARRA brand + arra_brand_id = get_or_insert_brand(conn, "ARRA") + print(f"ARRA brand ID: {arra_brand_id}") + + # Get or create EW-1 model under ARRA brand + ew1_model_id = get_or_insert_model(conn, arra_brand_id, "EW-1") + print(f"EW-1 model ID: {ew1_model_id}") + + # Get or create Electric engine + engine_id = get_or_insert_engine(conn, "Electric") + print(f"Electric engine ID: {engine_id}") + + # Get or create 2024 year + year_id = get_or_insert_year(conn, 2024) + print(f"Year 2024 ID: {year_id}") + + # Check if the correct relationship already exists + cursor.execute( + "SELECT id FROM model_year_engine WHERE model_id = ? AND year_id = ? AND engine_id = ?", + (ew1_model_id, year_id, engine_id) + ) + result = cursor.fetchone() + + if not result: + # Insert the correct relationship + cursor.execute( + "INSERT INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (ew1_model_id, year_id, engine_id) + ) + conn.commit() + print("Added correct ARRA EW-1 2024 Electric entry") + else: + print("Correct ARRA EW-1 2024 Electric entry already exists") + + +def main(): + """Main function to fix ARRA data.""" + print("Fixing ARRA vehicle data...") + + # Connect to database + conn = connect_db() + + # Remove the incorrect entry + remove_incorrect_arr_entry(conn) + + # Insert the correct entry + insert_correct_arr_entry(conn) + + # Close connection + conn.close() + print("ARRA data fixed successfully!") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/integration_demo.py b/integration_demo.py new file mode 100644 index 0000000..90369d8 --- /dev/null +++ b/integration_demo.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +""" +RockAuto Data Integration Demo +Shows how to integrate manually extracted RockAuto data into the vehicle database +""" + +from vehicle_scraper.manual_input_simple import ManualDataInput +import sqlite3 + + +def demonstrate_integration(): + """Demonstrate the integration of RockAuto data into the database""" + print("RockAuto Data Integration Demo") + print("==============================") + + # Create input tool with correct database path + input_tool = ManualDataInput(db_path="vehicle_database/vehicle_database.db") + + # Example of data you might extract from RockAuto manually + print("\nExample: Adding data that could be extracted from RockAuto") + + # Add some example vehicles that might be found on RockAuto + rockauto_vehicles = [ + {"make": "Toyota", "model": "RAV4", "year": 2019, "engine": "2.5L 4-Cylinder"}, + {"make": "Honda", "model": "CR-V", "year": 2020, "engine": "1.5L Turbo"}, + {"make": "Ford", "model": "Escape", "year": 2021, "engine": "2.0L Turbo"}, + {"make": "Nissan", "model": "Rogue", "year": 2018, "engine": "2.5L 4-Cylinder"}, + {"make": "Chevrolet", "model": "Equinox", "year": 2020, "engine": "1.5L Turbo"}, + ] + + print(f"\nAdding {len(rockauto_vehicles)} vehicles to database:") + for vehicle in rockauto_vehicles: + print(f" - {vehicle['year']} {vehicle['make']} {vehicle['model']} ({vehicle['engine']})") + + input_tool.add_multiple_vehicles(rockauto_vehicles) + + # Show the data in the database + print("\nCurrent data in database:") + conn = sqlite3.connect("vehicle_database/vehicle_database.db") + cursor = conn.cursor() + + cursor.execute(''' + SELECT b.name as brand, m.name as model, y.year, e.name as engine + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + ORDER BY b.name, m.name, y.year + LIMIT 15 + ''') + + results = cursor.fetchall() + for i, (brand, model, year, engine) in enumerate(results, 1): + print(f" {i:2d}. {year} {brand} {model} - {engine}") + + if len(results) == 15: + print(" ... (showing first 15 results)") + + conn.close() + + print(f"\nDatabase contains {len(results)} vehicle entries") + + # Show how to query specific data + print("\nExample queries you can perform:") + print("1. Find all Toyota models:") + print(" In query interface: Search brand='Toyota'") + + print("2. Find all 2020 model year vehicles:") + print(" In query interface: Search year=2020") + + print("3. Find all vehicles with 'Turbo' engines:") + print(" In query interface: Search engine='Turbo'") + + print("\nTo continue adding RockAuto data:") + print("1. Visit https://www.rockauto.com/catalog/") + print("2. Browse manufacturers and note models/years/engines") + print("3. Use ManualDataInput to add to your database") + + +def main(): + demonstrate_integration() + + print("\n" + "="*50) + print("INTEGRATION DEMO COMPLETE") + print("="*50) + print("\nNext steps:") + print("1. Manually browse RockAuto.com for vehicle data") + print("2. Use the ManualDataInput class to add data") + print("3. Query your database using the query interface") + print("4. Build your comprehensive vehicle database") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/remove_brands_and_cleanup.py b/remove_brands_and_cleanup.py new file mode 100644 index 0000000..168ed18 --- /dev/null +++ b/remove_brands_and_cleanup.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +""" +Script para eliminar vehículos de marcas específicas y ocultar marcas sin vehículos +""" + +import sqlite3 +import os + +def remove_brands_and_cleanup(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Eliminando vehículos de marcas específicas y limpiando marcas sin vehículos...") + + try: + # Marcas a eliminar + brands_to_remove = ['FORD', 'TOYOTA', 'NISSAN', 'HONDA', 'CHEVROLET'] + + print(f"Marcas a eliminar: {', '.join(brands_to_remove)}") + + # Contar cuántos vehículos vamos a eliminar antes de hacerlo + placeholders = ','.join(['?' for _ in brands_to_remove]) + cursor.execute(f""" + SELECT COUNT(*) + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + WHERE b.name IN ({placeholders}) + """, brands_to_remove) + count_to_delete = cursor.fetchone()[0] + + print(f"Se eliminarán {count_to_delete} vehículos de las marcas especificadas") + + if count_to_delete > 0: + print("Procediendo con la eliminación...") + + # Eliminar las combinaciones modelo-año-motor para los modelos de las marcas especificadas + cursor.execute(f""" + DELETE FROM model_year_engine + WHERE model_id IN ( + SELECT m.id FROM models m + JOIN brands b ON m.brand_id = b.id + WHERE b.name IN ({placeholders}) + ) + """, brands_to_remove) + + # Eliminar los modelos de las marcas especificadas + cursor.execute(f""" + DELETE FROM models + WHERE brand_id IN ( + SELECT id FROM brands WHERE name IN ({placeholders}) + ) + """, brands_to_remove) + + # Eliminar las marcas especificadas + cursor.execute(f""" + DELETE FROM brands + WHERE name IN ({placeholders}) + """, brands_to_remove) + + conn.commit() + print(f"Se eliminaron {count_to_delete} registros de vehículos de las marcas especificadas") + + else: + print("No hay vehículos de las marcas especificadas para eliminar") + + # Ahora vamos a limpiar las marcas sin vehículos (aunque en este caso ya se eliminaron) + # pero también limpiaremos cualquier marca que haya quedado sin vehículos + print("\nLimpiando marcas sin vehículos...") + + # Encontrar marcas que no tienen modelos asociados + cursor.execute(""" + SELECT b.id, b.name + FROM brands b + LEFT JOIN models m ON b.id = m.brand_id + WHERE m.brand_id IS NULL + """) + brands_without_models = cursor.fetchall() + + if brands_without_models: + print(f"Marcas sin modelos para eliminar: {[brand[1] for brand in brands_without_models]}") + brand_ids = [str(brand[0]) for brand in brands_without_models] + placeholders = ','.join(brand_ids) + + # Eliminar estas marcas + cursor.execute(f""" + DELETE FROM brands + WHERE id IN ({placeholders}) + """) + else: + print("No hay marcas sin modelos para eliminar") + + # Mostrar un resumen de la base de datos actualizada + print("\nResumen de la base de datos actualizada:") + + # Contar vehículos restantes + cursor.execute(""" + SELECT COUNT(*) + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + """) + total_vehicles = cursor.fetchone()[0] + print(f"Total de vehículos restantes: {total_vehicles}") + + # Contar marcas restantes + cursor.execute("SELECT COUNT(*) FROM brands") + total_brands = cursor.fetchone()[0] + print(f"Total de marcas restantes: {total_brands}") + + # Mostrar marcas restantes + cursor.execute("SELECT name FROM brands ORDER BY name") + remaining_brands = cursor.fetchall() + print(f"Marcas restantes: {[brand[0] for brand in remaining_brands]}") + + # Mostrar rango de años actual + cursor.execute(""" + SELECT MIN(y.year), MAX(y.year) + FROM years y + JOIN model_year_engine mye ON y.id = mye.year_id + """) + min_year, max_year = cursor.fetchone() + if min_year and max_year: + print(f"Rango de años actual: {min_year} - {max_year}") + else: + print("No hay años con vehículos registrados") + + except Exception as e: + print(f"Error al eliminar marcas y limpiar la base de datos: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + remove_brands_and_cleanup() \ No newline at end of file diff --git a/remove_brands_and_cleanup_final.py b/remove_brands_and_cleanup_final.py new file mode 100644 index 0000000..67b2817 --- /dev/null +++ b/remove_brands_and_cleanup_final.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +""" +Script para eliminar marcas específicas y limpiar marcas sin vehículos +""" + +import sqlite3 +import os + +def remove_brands_and_cleanup(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Eliminando marcas específicas y limpiando marcas sin vehículos...") + + try: + # Marcas a eliminar + brands_to_remove = ['FORD', 'TOYOTA', 'NISSAN', 'HONDA', 'CHEVROLET'] + + print(f"Marcas a eliminar: {', '.join(brands_to_remove)}") + + # Eliminar modelos y combinaciones modelo-año-motor para las marcas especificadas + placeholders = ','.join(['?' for _ in brands_to_remove]) + cursor.execute(f""" + DELETE FROM model_year_engine + WHERE model_id IN ( + SELECT m.id FROM models m + JOIN brands b ON m.brand_id = b.id + WHERE b.name IN ({placeholders}) + ) + """, brands_to_remove) + + # Eliminar modelos de las marcas especificadas + cursor.execute(f""" + DELETE FROM models + WHERE brand_id IN ( + SELECT id FROM brands WHERE name IN ({placeholders}) + ) + """, brands_to_remove) + + # Eliminar las marcas especificadas + cursor.execute(f""" + DELETE FROM brands + WHERE name IN ({placeholders}) + """, brands_to_remove) + + # También eliminar marcas que no tienen modelos asociados + print("Eliminando marcas sin vehículos...") + cursor.execute(""" + DELETE FROM brands + WHERE id NOT IN ( + SELECT DISTINCT brand_id FROM models + ) + """) + + conn.commit() + + # Mostrar un resumen de la base de datos actualizada + print("\nResumen de la base de datos actualizada:") + + # Contar vehículos restantes + cursor.execute(""" + SELECT COUNT(*) + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + """) + total_vehicles = cursor.fetchone()[0] + print(f"Total de vehículos restantes: {total_vehicles}") + + # Contar marcas restantes + cursor.execute("SELECT COUNT(*) FROM brands") + total_brands = cursor.fetchone()[0] + print(f"Total de marcas restantes: {total_brands}") + + # Mostrar marcas restantes + cursor.execute("SELECT name FROM brands ORDER BY name") + remaining_brands = cursor.fetchall() + print(f"Marcas restantes: {[brand[0] for brand in remaining_brands]}") + + # Mostrar rango de años actual + cursor.execute(""" + SELECT MIN(y.year), MAX(y.year) + FROM years y + JOIN model_year_engine mye ON y.id = mye.year_id + """) + min_year, max_year = cursor.fetchone() + if min_year and max_year: + print(f"Rango de años actual: {min_year} - {max_year}") + else: + print("No hay años con vehículos registrados") + + except Exception as e: + print(f"Error al eliminar marcas y limpiar la base de datos: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + remove_brands_and_cleanup() \ No newline at end of file diff --git a/remove_old_vehicles.py b/remove_old_vehicles.py new file mode 100644 index 0000000..38d3ae3 --- /dev/null +++ b/remove_old_vehicles.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +""" +Script para eliminar vehículos de 1975 hacia abajo de la base de datos +""" + +import sqlite3 +import os + +def remove_old_vehicles(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Eliminando vehículos de 1975 hacia abajo de la base de datos...") + + try: + # Contar cuántos vehículos vamos a eliminar antes de hacerlo + cursor.execute(""" + SELECT COUNT(*) + FROM model_year_engine mye + JOIN years y ON mye.year_id = y.id + WHERE y.year <= 1975 + """) + count_to_delete = cursor.fetchone()[0] + + print(f"Se eliminarán {count_to_delete} vehículos de 1975 hacia abajo") + + if count_to_delete > 0: + # Confirmar antes de eliminar + confirm = input("¿Deseas continuar con la eliminación? (s/N): ") + if confirm.lower() != 's': + print("Operación cancelada.") + return + + # Eliminar las combinaciones modelo-año-motor para años <= 1975 + cursor.execute(""" + DELETE FROM model_year_engine + WHERE year_id IN ( + SELECT id FROM years WHERE year <= 1975 + ) + """) + + # Eliminar los años <= 1975 que ya no tienen registros asociados + cursor.execute(""" + DELETE FROM years + WHERE year <= 1975 + AND id NOT IN ( + SELECT DISTINCT year_id FROM model_year_engine + ) + """) + + conn.commit() + print(f"Se eliminaron {count_to_delete} registros de vehículos de 1975 hacia abajo") + + # Mostrar algunos de los años que se eliminaron + print("\nAños eliminados:") + cursor.execute(""" + SELECT DISTINCT y.year + FROM years y + WHERE y.year <= 1975 + ORDER BY y.year DESC + """) + deleted_years = cursor.fetchall() + if deleted_years: + for year in deleted_years: + print(f" - {year[0]}") + else: + print(" (No quedan años <= 1975 en la base de datos)") + + else: + print("No hay vehículos de 1975 hacia abajo para eliminar") + + # Mostrar un resumen de la base de datos actualizada + print("\nResumen de la base de datos actualizada:") + + # Contar vehículos restantes + cursor.execute(""" + SELECT COUNT(*) + FROM model_year_engine mye + JOIN years y ON mye.year_id = y.id + """) + total_vehicles = cursor.fetchone()[0] + print(f"Total de vehículos restantes: {total_vehicles}") + + # Mostrar rango de años actual + cursor.execute("SELECT MIN(year), MAX(year) FROM years") + min_year, max_year = cursor.fetchone() + print(f"Rango de años actual: {min_year} - {max_year}") + + except Exception as e: + print(f"Error al eliminar vehículos antiguos: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + remove_old_vehicles() \ No newline at end of file diff --git a/remove_old_vehicles_auto.py b/remove_old_vehicles_auto.py new file mode 100644 index 0000000..356485e --- /dev/null +++ b/remove_old_vehicles_auto.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +""" +Script para eliminar vehículos de 1975 hacia abajo de la base de datos +""" + +import sqlite3 +import os + +def remove_old_vehicles(): + # Verificar que la base de datos exista + db_path = "vehicle_database/vehicle_database.db" + if not os.path.exists(db_path): + print(f"Error: Base de datos no encontrada en {db_path}") + return + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("Eliminando vehículos de 1975 hacia abajo de la base de datos...") + + try: + # Contar cuántos vehículos vamos a eliminar antes de hacerlo + cursor.execute(""" + SELECT COUNT(*) + FROM model_year_engine mye + JOIN years y ON mye.year_id = y.id + WHERE y.year <= 1975 + """) + count_to_delete = cursor.fetchone()[0] + + print(f"Se eliminarán {count_to_delete} vehículos de 1975 hacia abajo") + + if count_to_delete > 0: + print("Procediendo con la eliminación...") + + # Eliminar las combinaciones modelo-año-motor para años <= 1975 + cursor.execute(""" + DELETE FROM model_year_engine + WHERE year_id IN ( + SELECT id FROM years WHERE year <= 1975 + ) + """) + + # Eliminar los años <= 1975 que ya no tienen registros asociados + cursor.execute(""" + DELETE FROM years + WHERE year <= 1975 + AND id NOT IN ( + SELECT DISTINCT year_id FROM model_year_engine + ) + """) + + conn.commit() + print(f"Se eliminaron {count_to_delete} registros de vehículos de 1975 hacia abajo") + + # Mostrar algunos de los años que se eliminaron + print("\nAños eliminados:") + cursor.execute(""" + SELECT DISTINCT y.year + FROM years y + WHERE y.year <= 1975 + ORDER BY y.year DESC + """) + deleted_years = cursor.fetchall() + if deleted_years: + for year in deleted_years: + print(f" - {year[0]}") + else: + print(" (No quedan años <= 1975 en la base de datos)") + + else: + print("No hay vehículos de 1975 hacia abajo para eliminar") + + # Mostrar un resumen de la base de datos actualizada + print("\nResumen de la base de datos actualizada:") + + # Contar vehículos restantes + cursor.execute(""" + SELECT COUNT(*) + FROM model_year_engine mye + JOIN years y ON mye.year_id = y.id + """) + total_vehicles = cursor.fetchone()[0] + print(f"Total de vehículos restantes: {total_vehicles}") + + # Mostrar rango de años actual + cursor.execute("SELECT MIN(year), MAX(year) FROM years") + min_year, max_year = cursor.fetchone() + print(f"Rango de años actual: {min_year} - {max_year}") + + except Exception as e: + print(f"Error al eliminar vehículos antiguos: {e}") + conn.rollback() + finally: + conn.close() + +if __name__ == "__main__": + remove_old_vehicles() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1fbfeab --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +flask==2.3.3 +requests>=2.28.0 +beautifulsoup4>=4.11.0 +lxml>=4.9.0 diff --git a/scrape_toyota_windows.py b/scrape_toyota_windows.py new file mode 100644 index 0000000..6724e4b --- /dev/null +++ b/scrape_toyota_windows.py @@ -0,0 +1,185 @@ +import requests +from bs4 import BeautifulSoup +import sqlite3 +import time +import re +import os +from urllib.parse import unquote + +# Base de datos - ruta directa desde C:\Autopartes +DB_PATH = "vehicle_database/vehicle_database.db" + +BASE_URL = "https://www.rockauto.com/en/catalog" + +MISSING_YEARS = [ + 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995, 1994, + 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984, + 1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975 +] + +session = requests.Session() +session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + 'Accept': 'text/html,application/xhtml+xml', +}) + +def clean_name(name): + name = unquote(name.replace('+', ' ')) + return re.sub(r'\s+', ' ', name).strip().upper() + +def get_soup(url, retries=3): + for attempt in range(retries): + try: + time.sleep(0.5) + response = session.get(url, timeout=15) + if response.status_code == 200: + return BeautifulSoup(response.content, 'html.parser') + elif response.status_code == 403: + print("\n [!] BLOQUEADO (403) - Cambia el VPN!") + return None + except Exception as e: + if attempt < retries - 1: + time.sleep(3) + else: + print(f"\n Error: {e}") + return None + +def get_models(brand, year): + brand_url = brand.lower() + soup = get_soup(f"{BASE_URL}/{brand_url},{year}") + if not soup: + return [] + + models = set() + for link in soup.find_all('a', href=True): + match = re.search(rf'/catalog/{brand_url},{year},([^,/]+)', link['href'], re.I) + if match: + model = clean_name(match.group(1)) + if model and not model.isdigit() and len(model) > 1: + models.add(model) + return sorted(models) + +def get_engines(brand, year, model): + brand_url = brand.lower() + model_url = model.lower().replace(' ', '+') + soup = get_soup(f"{BASE_URL}/{brand_url},{year},{model_url}") + if not soup: + return ['STANDARD'] + + engines = set() + for link in soup.find_all('a', href=True): + match = re.search(rf'/catalog/{brand_url},{year},{re.escape(model_url)},([^,/]+)', link['href'], re.I) + if match: + engine = clean_name(match.group(1)) + if engine and re.search(r'\d+\.?\d*L|V\d|I\d|HYBRID|ELECTRIC|DIESEL', engine, re.I): + engines.add(engine) + return sorted(engines) if engines else ['STANDARD'] + +def save_to_db(conn, brand, year, model, engine): + cursor = conn.cursor() + try: + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", (brand,)) + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand,)) + brand_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine,)) + engine_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", (brand_id, model)) + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model)) + model_id = cursor.fetchone()[0] + + cursor.execute( + "INSERT OR IGNORE INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + return cursor.rowcount > 0 + except: + return False + +def get_existing_years(conn, brand): + cursor = conn.cursor() + cursor.execute(""" + SELECT DISTINCT y.year FROM years y + JOIN model_year_engine mye ON y.id = mye.year_id + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + WHERE b.name = ? + """, (brand,)) + return set(row[0] for row in cursor.fetchall()) + +def main(): + brand = "TOYOTA" + + print("=" * 50) + print(" SCRAPER TOYOTA - WINDOWS") + print(" 3 anos por lote, 60 seg pausa para VPN") + print("=" * 50) + + if not os.path.exists(DB_PATH): + print(f"\n[ERROR] No encuentro: {DB_PATH}") + print("Asegurate de correr desde C:\\Autopartes") + input("Presiona ENTER para salir...") + return + + conn = sqlite3.connect(DB_PATH) + existing = get_existing_years(conn, brand) + years_to_do = [y for y in MISSING_YEARS if y not in existing] + + if not years_to_do: + print("\nTodos los anos ya estan!") + conn.close() + return + + print(f"\nFaltan {len(years_to_do)} anos: {years_to_do[0]} a {years_to_do[-1]}") + + batches = [years_to_do[i:i+3] for i in range(0, len(years_to_do), 3)] + print(f"Lotes: {len(batches)}") + input("\nPresiona ENTER para comenzar...") + + total_saved = 0 + + for batch_num, batch in enumerate(batches, 1): + print(f"\n{'='*50}") + print(f"LOTE {batch_num}/{len(batches)}: {batch}") + print("="*50) + + for year in batch: + print(f"\n[{year}] ", end="", flush=True) + models = get_models(brand, year) + print(f"{len(models)} modelos") + + for model in models: + engines = get_engines(brand, year, model) + for engine in engines: + if save_to_db(conn, brand, year, model, engine): + total_saved += 1 + print(f" {model} - {engine}") + + conn.commit() + print(f"\n>> Guardado! Total nuevos: {total_saved}") + + if batch_num < len(batches): + print(f"\n{'*'*50}") + print(" PAUSA 60 SEG - CAMBIA EL VPN AHORA!") + print(f" Faltan {len(batches) - batch_num} lotes") + print("*"*50) + + for s in range(60, 0, -1): + print(f"\r Continua en {s}s... ", end="", flush=True) + time.sleep(1) + print() + + conn.close() + print(f"\n{'='*50}") + print(f" LISTO! Guardados: {total_saved} vehiculos nuevos") + print("="*50) + input("Presiona ENTER para salir...") + +if __name__ == "__main__": + main() diff --git a/test_dashboard.sh b/test_dashboard.sh new file mode 100755 index 0000000..19dfcaa --- /dev/null +++ b/test_dashboard.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# Test script for the Vehicle Dashboard + +echo "Testing Vehicle Dashboard Setup" +echo "================================" + +# Check if the dashboard directory exists +if [ ! -d "/home/Autopartes/dashboard" ]; then + echo "Error: Dashboard directory not found!" + exit 1 +fi + +echo "Dashboard directory found." + +# Check if required files exist +files=("index.html" "dashboard.js" "server.py" "requirements.txt") +for file in "${files[@]}"; do + if [ ! -f "/home/Autopartes/dashboard/$file" ]; then + echo "Error: $file not found in dashboard directory!" + exit 1 + fi +done + +echo "All required files found." + +# Check if the vehicle database exists +if [ ! -f "/home/Autopartes/vehicle_database/vehicle_database.db" ]; then + echo "Error: Vehicle database not found!" + exit 1 +fi + +echo "Vehicle database found." + +# Check if Flask is available +if python3 -c "import flask" &> /dev/null; then + echo "Flask is available." +else + echo "Flask is not available. Installing..." + sudo apt-get update + sudo apt-get install -y python3-flask +fi + +# Check if the server is running +if pgrep -f "server.py" > /dev/null; then + echo "Dashboard server is running on http://localhost:5000" + echo "You can access the dashboard now!" +else + echo "Dashboard server is not running." + echo "To start it, run: cd /home/Autopartes/dashboard && python3 server.py" +fi + +echo "" +echo "Dashboard Test Complete!" +echo "Access the dashboard at: http://localhost:5000" \ No newline at end of file diff --git a/vehicle_database/GETTING_STARTED.md b/vehicle_database/GETTING_STARTED.md new file mode 100644 index 0000000..a7a019d --- /dev/null +++ b/vehicle_database/GETTING_STARTED.md @@ -0,0 +1,82 @@ +# Vehicle Database - Getting Started Guide + +## Overview +This project provides a comprehensive database system for storing information about vehicle brands, models, years, and engines. The database is built using SQLite and managed through Python scripts. + +## Database Structure +The database consists of five main tables: +- **brands**: Vehicle manufacturers (Toyota, Ford, etc.) +- **models**: Vehicle models (Camry, F-150, etc.) +- **engines**: Engine specifications (2JZ-GTE, EcoBoost, etc.) +- **years**: Calendar years for vehicle production +- **model_year_engine**: Junction table linking all entities with trim levels and specifications + +## Setup and Usage + +### 1. Initial Setup +Run the setup script to initialize the database: +```bash +cd vehicle_database +./setup.sh +``` + +### 2. Querying the Database +Use the interactive query interface: +```bash +python3 scripts/query_interface.py +``` + +The query interface allows you to: +- Search for vehicles by brand, model, year, or engine +- Browse all available brands +- View models for specific brands +- See production years for specific models + +### 3. Managing the Database +Use the database manager for programmatic access: +```bash +python3 scripts/database_manager.py +``` + +### 4. Importing Data +To import data from CSV files: +1. Prepare your data in the required CSV format +2. Use the CSV importer functionality in your own scripts + +Sample CSV files are provided in the `data/` directory. + +## Example Queries + +The system supports various search options: +- Find all vehicles by a specific brand +- Search for a specific model across all years +- Filter by engine type or specifications +- Look up trim levels and drivetrain configurations + +## Extending the Database + +To add more data: +1. Use the Python API in `scripts/database_manager.py` +2. Directly execute SQL commands on the SQLite database +3. Import data from CSV files using the structure provided + +## File Structure +``` +vehicle_database/ +├── sql/ +│ └── schema.sql # Database schema +├── scripts/ +│ ├── database_manager.py # Main database manager +│ ├── query_interface.py # Interactive query interface +│ └── csv_importer.py # CSV import functionality +├── data/ # Sample CSV data files +├── vehicle_database.db # SQLite database file +├── setup.sh # Setup script +└── README.md # Project documentation +``` + +## Next Steps +1. Explore the database using the query interface +2. Add your own vehicle data +3. Customize the schema if needed for your specific requirements +4. Extend the Python scripts with additional functionality \ No newline at end of file diff --git a/vehicle_database/README.md b/vehicle_database/README.md new file mode 100644 index 0000000..a89ed71 --- /dev/null +++ b/vehicle_database/README.md @@ -0,0 +1,106 @@ +# Vehicle Database + +A comprehensive database system for storing information about vehicle brands, models, years, and engines. + +## Overview + +This project provides a structured database for vehicle information with the following entities: + +- **Brands**: Vehicle manufacturers with details like country of origin and founding year +- **Models**: Vehicle models with body type, generation, and production years +- **Years**: Calendar years for vehicle production +- **Engines**: Engine specifications including displacement, cylinders, power, and fuel type +- **Model-Year-Engine**: Junction table linking all entities with trim levels and specifications + +## Database Schema + +The database uses SQLite and consists of the following tables: + +### `brands` +- `id`: Primary key +- `name`: Brand name (e.g., Toyota, Ford) +- `country`: Country of origin +- `founded_year`: Year the company was founded + +### `engines` +- `id`: Primary key +- `name`: Engine name +- `displacement_cc`: Engine displacement in cubic centimeters +- `cylinders`: Number of cylinders +- `fuel_type`: Type of fuel (gasoline, diesel, electric, hybrid) +- `power_hp`: Horsepower +- `torque_nm`: Torque in Newton meters +- `engine_code`: Manufacturer engine code + +### `models` +- `id`: Primary key +- `brand_id`: Foreign key to brands table +- `name`: Model name (e.g., Camry, Civic) +- `body_type`: Body style (sedan, SUV, truck, etc.) +- `generation`: Model generation +- `production_start_year`: Year production started +- `production_end_year`: Year production ended (NULL if still in production) + +### `years` +- `id`: Primary key +- `year`: Calendar year + +### `model_year_engine` +- `id`: Primary key +- `model_id`: Foreign key to models table +- `year_id`: Foreign key to years table +- `engine_id`: Foreign key to engines table +- `trim_level`: Trim level (e.g., base, luxury, sport) +- `drivetrain`: Drive system (FWD, RWD, AWD, 4WD) +- `transmission`: Transmission type (manual, automatic, CVT) + +## Setup + +1. Install Python 3.x if not already installed +2. Clone or download this repository +3. Run the database manager script: + +```bash +cd vehicle_database +python scripts/database_manager.py +``` + +This will create the database, populate it with sample data, and run example queries. + +## Usage + +The `VehicleDatabaseManager` class provides methods to: + +- Create and manage the database schema +- Insert new brands, models, engines, and years +- Query vehicle information +- Link models, years, and engines with trim levels and specifications + +## Sample Queries + +The script demonstrates several query patterns: + +- Get all brands +- Get models for a specific brand +- Search for specific vehicles by brand, model, year, or engine +- Retrieve comprehensive vehicle information + +## Extending the Database + +To add more data, you can: + +1. Use the provided Python API +2. Directly execute SQL commands on the SQLite database +3. Import data from CSV files using the provided structure + +## File Structure + +``` +vehicle_database/ +├── sql/ +│ └── schema.sql # Database schema +├── scripts/ +│ └── database_manager.py # Python database manager +├── data/ # Directory for data files +└── README.md # This file +``` \ No newline at end of file diff --git a/vehicle_database/data/brands.csv b/vehicle_database/data/brands.csv new file mode 100644 index 0000000..e8393e4 --- /dev/null +++ b/vehicle_database/data/brands.csv @@ -0,0 +1,6 @@ +name,country,founded_year +Mercedes-Benz,Germany,1926 +Audi,Germany,1909 +Nissan,Japan,1933 +Chevrolet,USA,1911 +Volkswagen,Germany,1937 diff --git a/vehicle_database/data/engines.csv b/vehicle_database/data/engines.csv new file mode 100644 index 0000000..da2befa --- /dev/null +++ b/vehicle_database/data/engines.csv @@ -0,0 +1,5 @@ +name,displacement_cc,cylinders,fuel_type,power_hp,torque_nm,engine_code +VQ35DE,3500,6,gasoline,280,260,VQ35DE +LS3,6200,8,gasoline,430,424,LS3 +EA888,2000,4,gasoline,228,258,EA888 +M274,2000,4,gasoline,241,273,M274 diff --git a/vehicle_database/data/models.csv b/vehicle_database/data/models.csv new file mode 100644 index 0000000..a83bda6 --- /dev/null +++ b/vehicle_database/data/models.csv @@ -0,0 +1,5 @@ +brand_name,name,body_type,generation,production_start_year,production_end_year +Toyota,Corolla,sedan,E210,2018, +Honda,Accord,sedan,X,2018, +Ford,F-150,truck,13th Gen,2015, +BMW,3 Series,sedan,G20,2018, diff --git a/vehicle_database/scripts/csv_importer.py b/vehicle_database/scripts/csv_importer.py new file mode 100644 index 0000000..64a800a --- /dev/null +++ b/vehicle_database/scripts/csv_importer.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 +""" +CSV Import Script for Vehicle Database +This script allows importing vehicle data from CSV files +""" + +import csv +import sqlite3 +import os +from typing import Dict, List + + +class CSVImporter: + def __init__(self, db_path: str = "vehicle_database.db"): + self.db_path = db_path + + def import_brands_from_csv(self, csv_file: str): + """Import brands from a CSV file""" + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + + with open(csv_file, 'r', newline='', encoding='utf-8') as file: + reader = csv.DictReader(file) + for row in reader: + cursor.execute( + "INSERT OR IGNORE INTO brands (name, country, founded_year) VALUES (?, ?, ?)", + (row['name'], row.get('country'), row.get('founded_year')) + ) + + conn.commit() + conn.close() + print(f"Imported brands from {csv_file}") + + def import_engines_from_csv(self, csv_file: str): + """Import engines from a CSV file""" + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + + with open(csv_file, 'r', newline='', encoding='utf-8') as file: + reader = csv.DictReader(file) + for row in reader: + cursor.execute( + """INSERT OR IGNORE INTO engines + (name, displacement_cc, cylinders, fuel_type, power_hp, torque_nm, engine_code) + VALUES (?, ?, ?, ?, ?, ?, ?)""", + ( + row['name'], + row.get('displacement_cc'), + row.get('cylinders'), + row.get('fuel_type'), + row.get('power_hp'), + row.get('torque_nm'), + row.get('engine_code') + ) + ) + + conn.commit() + conn.close() + print(f"Imported engines from {csv_file}") + + def import_models_from_csv(self, csv_file: str): + """Import models from a CSV file""" + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + + with open(csv_file, 'r', newline='', encoding='utf-8') as file: + reader = csv.DictReader(file) + + # First, create a mapping of brand names to IDs + cursor.execute("SELECT id, name FROM brands") + brand_map = {row[1]: row[0] for row in cursor.fetchall()} + + for row in reader: + brand_id = brand_map.get(row['brand_name']) + if brand_id is None: + print(f"Warning: Brand '{row['brand_name']}' not found in database") + continue + + cursor.execute( + """INSERT OR IGNORE INTO models + (brand_id, name, body_type, generation, production_start_year, production_end_year) + VALUES (?, ?, ?, ?, ?, ?)""", + ( + brand_id, + row['name'], + row.get('body_type'), + row.get('generation'), + row.get('production_start_year'), + row.get('production_end_year') + ) + ) + + conn.commit() + conn.close() + print(f"Imported models from {csv_file}") + + def create_sample_csv_files(self): + """Create sample CSV files with example data""" + os.makedirs("data", exist_ok=True) + + # Sample brands CSV + with open("data/brands.csv", "w", newline="", encoding="utf-8") as csvfile: + fieldnames = ["name", "country", "founded_year"] + writer = csv.DictWriter(csvfile, fieldnames=fieldnames) + writer.writeheader() + writer.writerows([ + {"name": "Mercedes-Benz", "country": "Germany", "founded_year": 1926}, + {"name": "Audi", "country": "Germany", "founded_year": 1909}, + {"name": "Nissan", "country": "Japan", "founded_year": 1933}, + {"name": "Chevrolet", "country": "USA", "founded_year": 1911}, + {"name": "Volkswagen", "country": "Germany", "founded_year": 1937} + ]) + + # Sample engines CSV + with open("data/engines.csv", "w", newline="", encoding="utf-8") as csvfile: + fieldnames = ["name", "displacement_cc", "cylinders", "fuel_type", "power_hp", "torque_nm", "engine_code"] + writer = csv.DictWriter(csvfile, fieldnames=fieldnames) + writer.writeheader() + writer.writerows([ + {"name": "VQ35DE", "displacement_cc": 3500, "cylinders": 6, "fuel_type": "gasoline", "power_hp": 280, "torque_nm": 260, "engine_code": "VQ35DE"}, + {"name": "LS3", "displacement_cc": 6200, "cylinders": 8, "fuel_type": "gasoline", "power_hp": 430, "torque_nm": 424, "engine_code": "LS3"}, + {"name": "EA888", "displacement_cc": 2000, "cylinders": 4, "fuel_type": "gasoline", "power_hp": 228, "torque_nm": 258, "engine_code": "EA888"}, + {"name": "M274", "displacement_cc": 2000, "cylinders": 4, "fuel_type": "gasoline", "power_hp": 241, "torque_nm": 273, "engine_code": "M274"} + ]) + + # Sample models CSV + with open("data/models.csv", "w", newline="", encoding="utf-8") as csvfile: + fieldnames = ["brand_name", "name", "body_type", "generation", "production_start_year", "production_end_year"] + writer = csv.DictWriter(csvfile, fieldnames=fieldnames) + writer.writeheader() + writer.writerows([ + {"brand_name": "Toyota", "name": "Corolla", "body_type": "sedan", "generation": "E210", "production_start_year": 2018, "production_end_year": None}, + {"brand_name": "Honda", "name": "Accord", "body_type": "sedan", "generation": "X", "production_start_year": 2018, "production_end_year": None}, + {"brand_name": "Ford", "name": "F-150", "body_type": "truck", "generation": "13th Gen", "production_start_year": 2015, "production_end_year": None}, + {"brand_name": "BMW", "name": "3 Series", "body_type": "sedan", "generation": "G20", "production_start_year": 2018, "production_end_year": None} + ]) + + print("Sample CSV files created in data/ directory") + + +def main(): + importer = CSVImporter() + + # Create sample CSV files + importer.create_sample_csv_files() + + # Import sample data (these would be imported by the main script, but showing the functionality) + print("CSV import functionality created. Sample CSV files are in the data/ directory.") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/vehicle_database/scripts/database_manager.py b/vehicle_database/scripts/database_manager.py new file mode 100644 index 0000000..bb83814 --- /dev/null +++ b/vehicle_database/scripts/database_manager.py @@ -0,0 +1,323 @@ +#!/usr/bin/env python3 +""" +Vehicle Database Manager +A script to initialize and manage the vehicle database with brands, years, models, and engines +""" + +import sqlite3 +import os +from datetime import datetime +from typing import List, Tuple + + +class VehicleDatabaseManager: + def __init__(self, db_path: str = "vehicle_database.db"): + self.db_path = db_path + self.connection = None + + def connect(self): + """Connect to the SQLite database""" + self.connection = sqlite3.connect(self.db_path) + self.connection.row_factory = sqlite3.Row # Enable column access by name + print(f"Connected to database: {self.db_path}") + + def disconnect(self): + """Close the database connection""" + if self.connection: + self.connection.close() + print("Disconnected from database") + + def create_tables(self, schema_file: str = "sql/schema.sql"): + """Create tables from schema file""" + if not os.path.exists(schema_file): + raise FileNotFoundError(f"Schema file not found: {schema_file}") + + with open(schema_file, 'r') as f: + schema = f.read() + + if self.connection: + cursor = self.connection.cursor() + cursor.executescript(schema) + self.connection.commit() + print("Tables created successfully") + + def insert_brand(self, name: str, country: str = None, founded_year: int = None) -> int: + """Insert a new brand and return its ID""" + cursor = self.connection.cursor() + cursor.execute( + "INSERT OR IGNORE INTO brands (name, country, founded_year) VALUES (?, ?, ?)", + (name, country, founded_year) + ) + self.connection.commit() + # Return the ID of the inserted or existing brand + cursor.execute("SELECT id FROM brands WHERE name = ?", (name,)) + return cursor.fetchone()[0] + + def insert_engine(self, name: str, displacement_cc: float = None, cylinders: int = None, + fuel_type: str = None, power_hp: int = None, torque_nm: int = None, + engine_code: str = None) -> int: + """Insert a new engine and return its ID""" + cursor = self.connection.cursor() + cursor.execute( + """INSERT OR IGNORE INTO engines + (name, displacement_cc, cylinders, fuel_type, power_hp, torque_nm, engine_code) + VALUES (?, ?, ?, ?, ?, ?, ?)""", + (name, displacement_cc, cylinders, fuel_type, power_hp, torque_nm, engine_code) + ) + self.connection.commit() + # Return the ID of the inserted or existing engine + cursor.execute("SELECT id FROM engines WHERE name = ?", (name,)) + return cursor.fetchone()[0] + + def insert_model(self, brand_id: int, name: str, body_type: str = None, + generation: str = None, production_start_year: int = None, + production_end_year: int = None) -> int: + """Insert a new model and return its ID""" + cursor = self.connection.cursor() + cursor.execute( + """INSERT OR IGNORE INTO models + (brand_id, name, body_type, generation, production_start_year, production_end_year) + VALUES (?, ?, ?, ?, ?, ?)""", + (brand_id, name, body_type, generation, production_start_year, production_end_year) + ) + self.connection.commit() + # Return the ID of the inserted or existing model + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, name)) + return cursor.fetchone()[0] + + def insert_year(self, year: int) -> int: + """Insert a new year and return its ID""" + cursor = self.connection.cursor() + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + self.connection.commit() + # Return the ID of the inserted or existing year + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + return cursor.fetchone()[0] + + def insert_model_year_engine(self, model_id: int, year_id: int, engine_id: int, + trim_level: str = None, drivetrain: str = None, + transmission: str = None): + """Insert a model-year-engine combination""" + cursor = self.connection.cursor() + cursor.execute( + """INSERT OR REPLACE INTO model_year_engine + (model_id, year_id, engine_id, trim_level, drivetrain, transmission) + VALUES (?, ?, ?, ?, ?, ?)""", + (model_id, year_id, engine_id, trim_level, drivetrain, transmission) + ) + self.connection.commit() + + def get_brands(self) -> List[Tuple]: + """Retrieve all brands""" + cursor = self.connection.cursor() + cursor.execute("SELECT * FROM brands ORDER BY name") + return cursor.fetchall() + + def get_models_by_brand(self, brand_id: int) -> List[Tuple]: + """Retrieve all models for a specific brand""" + cursor = self.connection.cursor() + cursor.execute(""" + SELECT m.*, b.name as brand_name + FROM models m + JOIN brands b ON m.brand_id = b.id + WHERE m.brand_id = ? + ORDER BY m.name + """, (brand_id,)) + return cursor.fetchall() + + def get_vehicle_info(self, brand_name: str = None, model_name: str = None, + year: int = None, engine_name: str = None) -> List[Tuple]: + """Get comprehensive vehicle information based on filters""" + query = """ + SELECT + b.name AS brand, + m.name AS model, + y.year, + e.name AS engine, + e.displacement_cc, + e.cylinders, + e.fuel_type, + e.power_hp, + e.torque_nm, + e.engine_code, + mye.trim_level, + mye.drivetrain, + mye.transmission + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + WHERE 1=1 + """ + + params = [] + if brand_name: + query += " AND b.name LIKE ?" + params.append(f"%{brand_name}%") + if model_name: + query += " AND m.name LIKE ?" + params.append(f"%{model_name}%") + if year: + query += " AND y.year = ?" + params.append(year) + if engine_name: + query += " AND e.name LIKE ?" + params.append(f"%{engine_name}%") + + query += " ORDER BY b.name, m.name, y.year" + + cursor = self.connection.cursor() + cursor.execute(query, params) + return cursor.fetchall() + + +def populate_sample_data(db_manager: VehicleDatabaseManager): + """Populate the database with sample data""" + print("Populating sample data...") + + # Insert sample brands + toyota_id = db_manager.insert_brand("Toyota", "Japan", 1937) + honda_id = db_manager.insert_brand("Honda", "Japan", 1948) + ford_id = db_manager.insert_brand("Ford", "USA", 1903) + bmw_id = db_manager.insert_brand("BMW", "Germany", 1916) + + # Insert sample engines + engine_2jz = db_manager.insert_engine( + "2JZ-GTE", + displacement_cc=3000, + cylinders=6, + fuel_type="gasoline", + power_hp=320, + torque_nm=450, + engine_code="2JZ-GTE" + ) + + engine_k20 = db_manager.insert_engine( + "K20C1", + displacement_cc=2000, + cylinders=4, + fuel_type="gasoline", + power_hp=280, + torque_nm=260, + engine_code="K20C1" + ) + + engine_ecoboost = db_manager.insert_engine( + "EcoBoost V6", + displacement_cc=3500, + cylinders=6, + fuel_type="gasoline", + power_hp=375, + torque_nm=470, + engine_code="EcoBoost V6" + ) + + engine_n52 = db_manager.insert_engine( + "N52B30", + displacement_cc=3000, + cylinders=6, + fuel_type="gasoline", + power_hp=255, + torque_nm=310, + engine_code="N52B30" + ) + + # Insert sample models + camry_id = db_manager.insert_model( + toyota_id, + "Camry", + body_type="sedan", + generation="XV70", + production_start_year=2017, + production_end_year=None + ) + + civic_id = db_manager.insert_model( + honda_id, + "Civic", + body_type="sedan", + generation="XI", + production_start_year=2016, + production_end_year=None + ) + + mustang_id = db_manager.insert_model( + ford_id, + "Mustang", + body_type="coupe", + generation="S550", + production_start_year=2015, + production_end_year=None + ) + + x3_id = db_manager.insert_model( + bmw_id, + "X3", + body_type="suv", + generation="G01", + production_start_year=2017, + production_end_year=None + ) + + # Insert years + year_2020 = db_manager.insert_year(2020) + year_2021 = db_manager.insert_year(2021) + year_2022 = db_manager.insert_year(2022) + + # Link models, years, and engines + db_manager.insert_model_year_engine(civic_id, year_2020, engine_k20, "Sport", "FWD", "automatic") + db_manager.insert_model_year_engine(mustang_id, year_2020, engine_ecoboost, "GT", "RWD", "automatic") + db_manager.insert_model_year_engine(x3_id, year_2021, engine_n52, "xDrive30i", "AWD", "automatic") + db_manager.insert_model_year_engine(camry_id, year_2022, engine_k20, "SE", "FWD", "automatic") + + print("Sample data populated successfully!") + + +def main(): + # Initialize the database manager + db_manager = VehicleDatabaseManager() + + try: + # Connect to database + db_manager.connect() + + # Create tables + db_manager.create_tables() + + # Populate with sample data + populate_sample_data(db_manager) + + # Demonstrate queries + print("\n--- All Brands ---") + brands = db_manager.get_brands() + for brand in brands: + print(f"ID: {brand['id']}, Name: {brand['name']}, Country: {brand['country']}") + + print(f"\n--- Models for Toyota (ID: {brands[0]['id']}) ---") + toyota_models = db_manager.get_models_by_brand(brands[0]['id']) + for model in toyota_models: + print(f"Model: {model['name']}, Body Type: {model['body_type']}") + + print("\n--- All Vehicle Information ---") + all_vehicles = db_manager.get_vehicle_info() + for vehicle in all_vehicles: + print(f"{vehicle['brand']} {vehicle['model']} {vehicle['year']} - " + f"{vehicle['engine']} ({vehicle['power_hp']} HP)") + + print("\n--- Search for Honda Civic ---") + honda_civic = db_manager.get_vehicle_info(brand_name="Honda", model_name="Civic") + for vehicle in honda_civic: + print(f"{vehicle['brand']} {vehicle['model']} {vehicle['year']} - " + f"{vehicle['engine']} ({vehicle['power_hp']} HP)") + + except Exception as e: + print(f"An error occurred: {e}") + + finally: + # Close the connection + db_manager.disconnect() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/vehicle_database/scripts/query_interface.py b/vehicle_database/scripts/query_interface.py new file mode 100644 index 0000000..289203a --- /dev/null +++ b/vehicle_database/scripts/query_interface.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python3 +""" +Simple Query Interface for Vehicle Database +Provides a command-line interface for searching the vehicle database +""" + +import sqlite3 +from typing import List, Tuple + + +class VehicleQueryInterface: + def __init__(self, db_path: str = "vehicle_database.db"): + self.db_path = db_path + + def search_vehicles(self, brand: str = None, model: str = None, year: int = None, + engine: str = None, limit: int = 50) -> List[Tuple]: + """Search for vehicles based on various criteria""" + conn = sqlite3.connect(self.db_path) + conn.row_factory = sqlite3.Row # Enable column access by name + cursor = conn.cursor() + + query = """ + SELECT + b.name AS brand, + m.name AS model, + y.year, + e.name AS engine, + e.displacement_cc, + e.cylinders, + e.fuel_type, + e.power_hp, + mye.trim_level, + mye.drivetrain, + mye.transmission + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + JOIN years y ON mye.year_id = y.id + JOIN engines e ON mye.engine_id = e.id + WHERE 1=1 + """ + + params = [] + if brand: + query += " AND b.name LIKE ?" + params.append(f"%{brand}%") + if model: + query += " AND m.name LIKE ?" + params.append(f"%{model}%") + if year: + query += " AND y.year = ?" + params.append(year) + if engine: + query += " AND e.name LIKE ?" + params.append(f"%{engine}%") + + query += f" ORDER BY b.name, m.name, y.year LIMIT {limit}" + + cursor.execute(query, params) + results = cursor.fetchall() + conn.close() + + return results + + def get_all_brands(self) -> List[Tuple]: + """Get a list of all brands in the database""" + conn = sqlite3.connect(self.db_path) + conn.row_factory = sqlite3.Row + cursor = conn.cursor() + + cursor.execute("SELECT DISTINCT name FROM brands ORDER BY name") + results = cursor.fetchall() + conn.close() + + return [row[0] for row in results] + + def get_models_by_brand(self, brand_name: str) -> List[Tuple]: + """Get all models for a specific brand""" + conn = sqlite3.connect(self.db_path) + conn.row_factory = sqlite3.Row + cursor = conn.cursor() + + cursor.execute(""" + SELECT DISTINCT m.name + FROM models m + JOIN brands b ON m.brand_id = b.id + WHERE b.name = ? + ORDER BY m.name + """, (brand_name,)) + results = cursor.fetchall() + conn.close() + + return [row[0] for row in results] + + def get_years_for_model(self, model_name: str) -> List[int]: + """Get all years for a specific model""" + conn = sqlite3.connect(self.db_path) + conn.row_factory = sqlite3.Row + cursor = conn.cursor() + + cursor.execute(""" + SELECT DISTINCT y.year + FROM model_year_engine mye + JOIN models m ON mye.model_id = m.id + JOIN years y ON mye.year_id = y.id + WHERE m.name = ? + ORDER BY y.year + """, (model_name,)) + results = cursor.fetchall() + conn.close() + + return [row[0] for row in results] + + +def main(): + interface = VehicleQueryInterface() + + print("Vehicle Database Query Interface") + print("=================================") + + while True: + print("\nOptions:") + print("1. Search vehicles") + print("2. List all brands") + print("3. List models for a brand") + print("4. List years for a model") + print("5. Exit") + + choice = input("\nEnter your choice (1-5): ").strip() + + if choice == "1": + print("\nSearch for vehicles:") + brand = input("Brand (optional): ").strip() or None + model = input("Model (optional): ").strip() or None + year_input = input("Year (optional): ").strip() + year = int(year_input) if year_input else None + engine = input("Engine (optional): ").strip() or None + + results = interface.search_vehicles(brand=brand, model=model, year=year, engine=engine) + + if results: + print(f"\nFound {len(results)} result(s):") + print("-" * 100) + for i, vehicle in enumerate(results, 1): + print(f"{i:2d}. {vehicle['year']} {vehicle['brand']} {vehicle['model']}") + print(f" Engine: {vehicle['engine']} ({vehicle['power_hp']} HP, {vehicle['displacement_cc']} cc)") + print(f" Trim: {vehicle['trim_level']}, Drivetrain: {vehicle['drivetrain']}, Transmission: {vehicle['transmission']}") + print() + else: + print("No vehicles found matching your criteria.") + + elif choice == "2": + brands = interface.get_all_brands() + print(f"\nAll brands ({len(brands)}):") + for i, brand in enumerate(brands, 1): + print(f"{i:2d}. {brand}") + + elif choice == "3": + brand = input("Enter brand name: ").strip() + if brand: + models = interface.get_models_by_brand(brand) + if models: + print(f"\nModels for {brand} ({len(models)}):") + for i, model in enumerate(models, 1): + print(f"{i:2d}. {model}") + else: + print(f"No models found for brand: {brand}") + else: + print("Please enter a brand name.") + + elif choice == "4": + model = input("Enter model name: ").strip() + if model: + years = interface.get_years_for_model(model) + if years: + print(f"\nYears for {model} ({len(years)}):") + for i, year in enumerate(years, 1): + print(f"{i:2d}. {year}") + else: + print(f"No years found for model: {model}") + else: + print("Please enter a model name.") + + elif choice == "5": + print("Thank you for using the Vehicle Database Query Interface!") + break + + else: + print("Invalid choice. Please enter 1-5.") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/vehicle_database/scripts/vehicle_database.db b/vehicle_database/scripts/vehicle_database.db new file mode 100644 index 0000000..e69de29 diff --git a/vehicle_database/setup.sh b/vehicle_database/setup.sh new file mode 100755 index 0000000..e425d22 --- /dev/null +++ b/vehicle_database/setup.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Setup script for Vehicle Database + +echo "Vehicle Database Setup" +echo "======================" + +# Check if Python3 is available +if ! command -v python3 &> /dev/null; then + echo "Python3 is required but not installed. Please install Python3 first." + exit 1 +fi + +echo "Python3 is available." + +# Check if the database already exists +if [ -f "vehicle_database.db" ]; then + echo "Database already exists." +else + echo "Creating new database with sample data..." + python3 scripts/database_manager.py +fi + +echo "" +echo "Setup complete! Available scripts:" +echo "1. Query Interface: python3 scripts/query_interface.py" +echo "2. Database Manager: python3 scripts/database_manager.py" +echo "3. CSV Importer: python3 scripts/csv_importer.py" +echo "" +echo "To start querying the database, run: python3 scripts/query_interface.py" \ No newline at end of file diff --git a/vehicle_database/sql/schema.sql b/vehicle_database/sql/schema.sql new file mode 100644 index 0000000..ea3d866 --- /dev/null +++ b/vehicle_database/sql/schema.sql @@ -0,0 +1,66 @@ +-- Vehicle Database Schema +-- Tables for storing vehicle information: brands, years, models, and engines + +-- Table for vehicle brands/manufacturers +CREATE TABLE IF NOT EXISTS brands ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + country TEXT, + founded_year INTEGER, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +-- Table for engine specifications +CREATE TABLE IF NOT EXISTS engines ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + displacement_cc REAL, -- Engine displacement in cubic centimeters + cylinders INTEGER, -- Number of cylinders + fuel_type TEXT CHECK(fuel_type IN ('gasoline', 'diesel', 'electric', 'hybrid', 'other')), + power_hp INTEGER, -- Horsepower + torque_nm INTEGER, -- Torque in Newton meters + engine_code TEXT, -- Manufacturer engine code + created_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +-- Table for vehicle models +CREATE TABLE IF NOT EXISTS models ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + brand_id INTEGER NOT NULL, + name TEXT NOT NULL, + body_type TEXT CHECK(body_type IN ('sedan', 'hatchback', 'suv', 'truck', 'coupe', 'convertible', 'wagon', 'van', 'other')), + generation TEXT, -- Model generation (e.g., MK1, MK2) + production_start_year INTEGER, + production_end_year INTEGER, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (brand_id) REFERENCES brands(id) +); + +-- Table for years (to link with models) +CREATE TABLE IF NOT EXISTS years ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + year INTEGER NOT NULL UNIQUE, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +-- Junction table to connect models, years, and engines +CREATE TABLE IF NOT EXISTS model_year_engine ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + model_id INTEGER NOT NULL, + year_id INTEGER NOT NULL, + engine_id INTEGER NOT NULL, + trim_level TEXT, -- Trim level (e.g., base, luxury, sport) + drivetrain TEXT CHECK(drivetrain IN ('FWD', 'RWD', 'AWD', '4WD', 'other')), + transmission TEXT CHECK(transmission IN ('manual', 'automatic', 'CVT', 'other')), + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (model_id) REFERENCES models(id), + FOREIGN KEY (year_id) REFERENCES years(id), + FOREIGN KEY (engine_id) REFERENCES engines(id), + UNIQUE(model_id, year_id, engine_id, trim_level) -- Prevent duplicate combinations +); + +-- Indexes for better performance +CREATE INDEX IF NOT EXISTS idx_models_brand ON models(brand_id); +CREATE INDEX IF NOT EXISTS idx_model_year_engine_model ON model_year_engine(model_id); +CREATE INDEX IF NOT EXISTS idx_model_year_engine_year ON model_year_engine(year_id); +CREATE INDEX IF NOT EXISTS idx_model_year_engine_engine ON model_year_engine(engine_id); \ No newline at end of file diff --git a/vehicle_database/vehicle_database.db b/vehicle_database/vehicle_database.db new file mode 100644 index 0000000000000000000000000000000000000000..1b7afaa2ecf6f3d2b166ba3becbfbefb015f37e7 GIT binary patch literal 2273280 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 z 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

*xQs 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 z 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¬j6Y=j0ps@>A7R|e_%LG^<3o%OGHzkq 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

9j1y30oPbVeej4jk)=t(btdm)l>oN9I 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 z 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 literal 0 HcmV?d00001 diff --git a/vehicle_scraper/manual_input.py b/vehicle_scraper/manual_input.py new file mode 100644 index 0000000..98956a0 --- /dev/null +++ b/vehicle_scraper/manual_input.py @@ -0,0 +1,175 @@ +""" +Manual Data Extraction Guide for RockAuto.com + +Since RockAuto has strong anti-bot measures, here's a manual approach to extract vehicle data: + +1. Visit https://www.rockauto.com/ +2. Click on "Catalog" in the navigation menu +3. You'll see a list of vehicle manufacturers (makes) +4. For each make, manually note down the models, years, and engines + +This script provides a framework to input the manually collected data into your database. +""" + +import sqlite3 +from typing import List, Dict + + +class ManualDataInput: + def __init__(self, db_path: str = "../vehicle_database/vehicle_database.db"): + self.db_path = db_path + + def add_vehicle_data(self, make: str, model: str, year: int, engine: str = "Unknown"): + """Add a single vehicle entry to the database""" + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + + try: + # Insert brand + cursor.execute( + "INSERT OR IGNORE INTO brands (name) VALUES (?)", + (make,) + ) + cursor.execute("SELECT id FROM brands WHERE name = ?", (make,)) + brand_id = cursor.fetchone()[0] + + # Insert year + cursor.execute( + "INSERT OR IGNORE INTO years (year) VALUES (?)", + (year,) + ) + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_id = cursor.fetchone()[0] + + # Insert engine + cursor.execute( + "INSERT OR IGNORE INTO engines (name) VALUES (?)", + (engine,) + ) + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine,)) + engine_id = cursor.fetchone()[0] + + # Insert model + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model)) + model_id = cursor.fetchone()[0] + + # Link model, year, and engine + cursor.execute( + """INSERT OR IGNORE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Added: {year} {make} {model} with {engine}") + + except Exception as e: + print(f"Error adding vehicle: {e}") + finally: + conn.close() + + def add_multiple_vehicles(self, vehicles: List[Dict]): + """Add multiple vehicles at once""" + for vehicle in vehicles: + self.add_vehicle_data( + make=vehicle.get('make', ''), + model=vehicle.get('model', ''), + year=vehicle.get('year', 0), + engine=vehicle.get('engine', 'Unknown') + ) + + def show_extraction_guide(self): + """Show the manual extraction guide""" + guide = """ + ================================================ + Manual RockAuto Data Extraction Guide + ================================================ + + 1. OPEN YOUR WEB BROWSER and go to: https://www.rockauto.com + + 2. CLICK on the "Catalog" link in the navigation menu + + 3. YOU WILL SEE a list of vehicle manufacturers (makes) like: + - Acura + - Audi + - BMW + - Chevrolet + - Ford + - Honda + - Toyota + - And many more... + + 4. FOR EACH MANUFACTURER: + a) Click on the manufacturer name + b) You'll see a page with vehicle models organized by year + c) Note down the models and years you see + d) Example format: 2020 Honda Civic, 2019 Ford F-150, etc. + + 5. TO FIND ENGINE INFORMATION: + a) Click on a specific model/year combination + b) You'll see parts categories for that vehicle + c) Look for "Engine" or "Engine Mechanical" category + d) Note down the engine type/specifications + + 6. USE THE FOLLOWING COMMANDS to add data to your database: + + Example Python commands: + >>> from manual_input import ManualDataInput + >>> input_tool = ManualDataInput() + >>> input_tool.add_vehicle_data("Toyota", "Camry", 2020, "2.5L 4-Cylinder") + >>> input_tool.add_vehicle_data("Honda", "Civic", 2019, "1.5L Turbo") + + Or add multiple at once: + >>> vehicles = [ + ... {"make": "Ford", "model": "F-150", "year": 2021, "engine": "3.5L V6"}, + ... {"make": "BMW", "model": "X3", "year": 2020, "engine": "2.0L 4-Cylinder Turbo"} + ... ] + >>> input_tool.add_multiple_vehicles(vehicles) + + 7. TIPS FOR EFFICIENT DATA COLLECTION: + - Focus on popular makes/models first + - Record data in a spreadsheet as you go + - Take screenshots of pages for reference + - Be systematic - go alphabetically or by make popularity + + ================================================ + """ + print(guide) + + +def main(): + print("Manual RockAuto Data Extraction Tool") + print("=====================================") + + input_tool = ManualDataInput() + + # Show the extraction guide + input_tool.show_extraction_guide() + + # Example of how to add data + print("\nExample - Adding sample data:") + sample_vehicles = [ + {"make": "Toyota", "model": "Camry", "year": 2020, "engine": "2.5L 4-Cylinder"}, + {"make": "Honda", "model": "Civic", "year": 2019, "engine": "1.5L Turbo"}, + {"make": "Ford", "model": "F-150", "year": 2021, "engine": "3.5L V6"}, + {"make": "BMW", "model": "X3", "year": 2020, "engine": "2.0L 4-Cylinder Turbo"}, + {"make": "Chevrolet", "model": "Silverado", "year": 2022, "engine": "5.3L V8"} + ] + + print("Would you like to add these sample vehicles to your database? (y/n): ", end="") + response = input().lower() + + if response == 'y': + input_tool.add_multiple_vehicles(sample_vehicles) + print("\nSample vehicles added to database!") + + print("\nYou can now use the ManualDataInput class to add more vehicles manually.") + print("Import it in Python with: from manual_input import ManualDataInput") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/vehicle_scraper/manual_input_simple.py b/vehicle_scraper/manual_input_simple.py new file mode 100644 index 0000000..b479f4e --- /dev/null +++ b/vehicle_scraper/manual_input_simple.py @@ -0,0 +1,171 @@ +""" +Manual Data Extraction Guide for RockAuto.com + +Since RockAuto has strong anti-bot measures, here's a manual approach to extract vehicle data: + +1. Visit https://www.rockauto.com/ +2. Click on "Catalog" in the navigation menu +3. You'll see a list of vehicle manufacturers (makes) +4. For each make, manually note down the models, years, and engines + +This script provides a framework to input the manually collected data into your database. +""" + +import sqlite3 +from typing import List, Dict + + +class ManualDataInput: + def __init__(self, db_path: str = "../vehicle_database/vehicle_database.db"): + self.db_path = db_path + + def add_vehicle_data(self, make: str, model: str, year: int, engine: str = "Unknown"): + """Add a single vehicle entry to the database""" + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + + try: + # Insert brand + cursor.execute( + "INSERT OR IGNORE INTO brands (name) VALUES (?)", + (make,) + ) + cursor.execute("SELECT id FROM brands WHERE name = ?", (make,)) + brand_id = cursor.fetchone()[0] + + # Insert year + cursor.execute( + "INSERT OR IGNORE INTO years (year) VALUES (?)", + (year,) + ) + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_id = cursor.fetchone()[0] + + # Insert engine + cursor.execute( + "INSERT OR IGNORE INTO engines (name) VALUES (?)", + (engine,) + ) + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine,)) + engine_id = cursor.fetchone()[0] + + # Insert model + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, model) + ) + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model)) + model_id = cursor.fetchone()[0] + + # Link model, year, and engine + cursor.execute( + """INSERT OR IGNORE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + conn.commit() + print(f"Added: {year} {make} {model} with {engine}") + + except Exception as e: + print(f"Error adding vehicle: {e}") + finally: + conn.close() + + def add_multiple_vehicles(self, vehicles: List[Dict]): + """Add multiple vehicles at once""" + for vehicle in vehicles: + self.add_vehicle_data( + make=vehicle.get('make', ''), + model=vehicle.get('model', ''), + year=vehicle.get('year', 0), + engine=vehicle.get('engine', 'Unknown') + ) + + def show_extraction_guide(self): + """Show the manual extraction guide""" + guide = """ + ================================================ + Manual RockAuto Data Extraction Guide + ================================================ + + 1. OPEN YOUR WEB BROWSER and go to: https://www.rockauto.com + + 2. CLICK on the "Catalog" link in the navigation menu + + 3. YOU WILL SEE a list of vehicle manufacturers (makes) like: + - Acura + - Audi + - BMW + - Chevrolet + - Ford + - Honda + - Toyota + - And many more... + + 4. FOR EACH MANUFACTURER: + a) Click on the manufacturer name + b) You'll see a page with vehicle models organized by year + c) Note down the models and years you see + d) Example format: 2020 Honda Civic, 2019 Ford F-150, etc. + + 5. TO FIND ENGINE INFORMATION: + a) Click on a specific model/year combination + b) You'll see parts categories for that vehicle + c) Look for "Engine" or "Engine Mechanical" category + d) Note down the engine type/specifications + + 6. USE THE FOLLOWING COMMANDS to add data to your database: + + Example Python commands: + >>> from manual_input import ManualDataInput + >>> input_tool = ManualDataInput() + >>> input_tool.add_vehicle_data("Toyota", "Camry", 2020, "2.5L 4-Cylinder") + >>> input_tool.add_vehicle_data("Honda", "Civic", 2019, "1.5L Turbo") + + Or add multiple at once: + >>> vehicles = [ + ... {"make": "Ford", "model": "F-150", "year": 2021, "engine": "3.5L V6"}, + ... {"make": "BMW", "model": "X3", "year": 2020, "engine": "2.0L 4-Cylinder Turbo"} + ... ] + >>> input_tool.add_multiple_vehicles(vehicles) + + 7. TIPS FOR EFFICIENT DATA COLLECTION: + - Focus on popular makes/models first + - Record data in a spreadsheet as you go + - Take screenshots of pages for reference + - Be systematic - go alphabetically or by make popularity + + ================================================ + """ + print(guide) + + +def main(): + print("Manual RockAuto Data Extraction Tool") + print("=====================================") + + input_tool = ManualDataInput() + + # Show the extraction guide + input_tool.show_extraction_guide() + + # Add sample vehicles to database + print("\nAdding sample vehicles to database:") + sample_vehicles = [ + {"make": "Toyota", "model": "Camry", "year": 2020, "engine": "2.5L 4-Cylinder"}, + {"make": "Honda", "model": "Civic", "year": 2019, "engine": "1.5L Turbo"}, + {"make": "Ford", "model": "F-150", "year": 2021, "engine": "3.5L V6"}, + {"make": "BMW", "model": "X3", "year": 2020, "engine": "2.0L 4-Cylinder Turbo"}, + {"make": "Chevrolet", "model": "Silverado", "year": 2022, "engine": "5.3L V8"} + ] + + input_tool.add_multiple_vehicles(sample_vehicles) + print("\nSample vehicles added to database!") + + print("\nYou can now use the ManualDataInput class to add more vehicles manually.") + print("Import it in Python with: from manual_input import ManualDataInput") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/vehicle_scraper/requirements.txt b/vehicle_scraper/requirements.txt new file mode 100644 index 0000000..da1564b --- /dev/null +++ b/vehicle_scraper/requirements.txt @@ -0,0 +1,3 @@ +requests +beautifulsoup4 +lxml \ No newline at end of file diff --git a/vehicle_scraper/rockauto_scraper.py b/vehicle_scraper/rockauto_scraper.py new file mode 100644 index 0000000..a4a0bad --- /dev/null +++ b/vehicle_scraper/rockauto_scraper.py @@ -0,0 +1,292 @@ +#!/usr/bin/env python3 +""" +RockAuto Vehicle Data Scraper +Extracts vehicle information (brands, models, years, engines) from RockAuto.com +""" + +import requests +from bs4 import BeautifulSoup +import time +import random +from urllib.parse import urljoin, urlparse +import json +import sqlite3 +from typing import List, Dict, Optional + + +class RockAutoScraper: + def __init__(self, db_path: str = "../vehicle_database/vehicle_database.db"): + self.base_url = "https://www.rockauto.com" + self.session = requests.Session() + self.session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' + }) + self.db_path = db_path + + # Create a mapping of RockAuto brand names to standardized names + self.brand_mapping = { + 'acura': 'Acura', + 'alfa-romeo': 'Alfa Romeo', + 'audi': 'Audi', + 'bmw': 'BMW', + 'buick': 'Buick', + 'cadillac': 'Cadillac', + 'chevrolet': 'Chevrolet', + 'chrysler': 'Chrysler', + 'dodge': 'Dodge', + 'fiat': 'Fiat', + 'ford': 'Ford', + 'gmc': 'GMC', + 'honda': 'Honda', + 'hyundai': 'Hyundai', + 'infiniti': 'Infiniti', + 'isuzu': 'Isuzu', + 'jaguar': 'Jaguar', + 'jeep': 'Jeep', + 'kia': 'Kia', + 'land-rover': 'Land Rover', + 'lexus': 'Lexus', + 'lincoln': 'Lincoln', + 'mazda': 'Mazda', + 'mercedes-benz': 'Mercedes-Benz', + 'mercury': 'Mercury', + 'mitsubishi': 'Mitsubishi', + 'nissan': 'Nissan', + 'oldsmobile': 'Oldsmobile', + 'plymouth': 'Plymouth', + 'pontiac': 'Pontiac', + 'porsche': 'Porsche', + 'ram': 'Ram', + 'saab': 'Saab', + 'saturn': 'Saturn', + 'scion': 'Scion', + 'subaru': 'Subaru', + 'suzuki': 'Suzuki', + 'tesla': 'Tesla', + 'toyota': 'Toyota', + 'volkswagen': 'Volkswagen', + 'volvo': 'Volvo' + } + + def get_page(self, url: str) -> Optional[BeautifulSoup]: + """Get a page and return BeautifulSoup object""" + try: + # Add random delay to be respectful to the server + time.sleep(random.uniform(1, 3)) + response = self.session.get(url) + response.raise_for_status() + return BeautifulSoup(response.content, 'html.parser') + except requests.RequestException as e: + print(f"Error fetching {url}: {e}") + return None + + def get_makes(self) -> List[str]: + """Get list of makes from RockAuto""" + print("Fetching list of makes...") + soup = self.get_page(f"{self.base_url}/catalog/catalog.php") + + if not soup: + return [] + + makes = [] + # Look for make selection dropdown or similar element + make_elements = soup.find_all('a', href=lambda x: x and '/catalog/' in x and x.count('/') >= 3) + + for elem in make_elements: + href = elem.get('href', '') + # Extract make from URL + parts = href.split('/') + for part in parts: + if part in self.brand_mapping: + make = self.brand_mapping[part] + if make not in makes: + makes.append(make) + + # Alternative approach: look for common selector patterns + if not makes: + # Look for elements that might contain make information + links = soup.find_all('a', href=True) + for link in links: + href = link['href'].lower() + for key, value in self.brand_mapping.items(): + if key in href and value not in makes: + makes.append(value) + + print(f"Found {len(makes)} makes: {makes[:10]}{'...' if len(makes) > 10 else ''}") + return makes + + def get_models_for_make(self, make: str) -> List[Dict]: + """Get models for a specific make""" + print(f"Fetching models for {make}...") + + # Convert make to RockAuto format + make_key = None + for key, value in self.brand_mapping.items(): + if value.lower() == make.lower(): + make_key = key + break + + if not make_key: + print(f"Make {make} not found in mapping") + return [] + + models = [] + soup = self.get_page(f"{self.base_url}/catalog/catalog.php?c={make_key}") + + if not soup: + return models + + # Look for model/year combinations + # RockAuto typically has links with year and model info + links = soup.find_all('a', href=True) + + for link in links: + href = link['href'] + text = link.get_text().strip() + + # Look for patterns that indicate year/model/engine info + if any(char.isdigit() for char in text) and len(text) > 2: + # Try to extract year and model info + parts = text.split() + + # Look for year (usually 4 digits) + year = None + model_parts = [] + + for part in parts: + if part.isdigit() and len(part) == 4 and 1900 < int(part) < 2030: + year = int(part) + else: + model_parts.append(part) + + if model_parts and year: + model = ' '.join(model_parts) + + # Create a record + record = { + 'make': make, + 'model': model, + 'year': year, + 'engine': 'Unknown', # Will need to extract from deeper pages + 'href': href + } + + if record not in models: + models.append(record) + + print(f"Found {len(models)} models for {make}") + return models + + def scrape_vehicle_data(self) -> List[Dict]: + """Main method to scrape vehicle data from RockAuto""" + print("Starting RockAuto scraping...") + + all_vehicles = [] + + # Get all makes + makes = self.get_makes() + + # Limit to first 5 makes for testing + makes = makes[:5] if len(makes) > 5 else makes + + for make in makes: + models = self.get_models_for_make(make) + all_vehicles.extend(models) + + # Limit total records for testing + if len(all_vehicles) > 20: + break + + print(f"Total vehicles found: {len(all_vehicles)}") + return all_vehicles + + def save_to_database(self, vehicles: List[Dict]): + """Save scraped data to the vehicle database""" + print(f"Saving {len(vehicles)} vehicles to database...") + + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + + for vehicle in vehicles: + try: + # Insert brand + cursor.execute( + "INSERT OR IGNORE INTO brands (name) VALUES (?)", + (vehicle['make'],) + ) + cursor.execute("SELECT id FROM brands WHERE name = ?", (vehicle['make'],)) + brand_id = cursor.fetchone()[0] + + # Insert year + cursor.execute( + "INSERT OR IGNORE INTO years (year) VALUES (?)", + (vehicle['year'],) + ) + cursor.execute("SELECT id FROM years WHERE year = ?", (vehicle['year'],)) + year_id = cursor.fetchone()[0] + + # Insert engine (with unknown specs for now) + cursor.execute( + "INSERT OR IGNORE INTO engines (name) VALUES (?)", + (vehicle['engine'],) + ) + cursor.execute("SELECT id FROM engines WHERE name = ?", (vehicle['engine'],)) + engine_id = cursor.fetchone()[0] + + # Insert model + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, vehicle['model']) + ) + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, vehicle['model'])) + model_id = cursor.fetchone()[0] + + # Link model, year, and engine + cursor.execute( + """INSERT OR IGNORE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + except Exception as e: + print(f"Error saving vehicle {vehicle}: {e}") + + conn.commit() + conn.close() + print("Data saved to database successfully!") + + +def main(): + scraper = RockAutoScraper() + + print("Starting RockAuto data extraction...") + print("Note: This may take several minutes due to rate limiting.") + + try: + # Scrape vehicle data + vehicles = scraper.scrape_vehicle_data() + + if vehicles: + print(f"\nFound {len(vehicles)} vehicles:") + for i, v in enumerate(vehicles[:10]): # Show first 10 + print(f" {i+1}. {v['make']} {v['model']} {v['year']}") + + if len(vehicles) > 10: + print(f" ... and {len(vehicles)-10} more") + + # Save to database + scraper.save_to_database(vehicles) + + print("\nScraping completed successfully!") + else: + print("No vehicles found. This could be due to:") + print("1. RockAuto blocking automated requests") + print("2. Changes in website structure") + print("3. Network connectivity issues") + + except Exception as e: + print(f"An error occurred during scraping: {e}") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/vehicle_scraper/rockauto_scraper_enhanced.py b/vehicle_scraper/rockauto_scraper_enhanced.py new file mode 100644 index 0000000..0a5d4e3 --- /dev/null +++ b/vehicle_scraper/rockauto_scraper_enhanced.py @@ -0,0 +1,400 @@ +#!/usr/bin/env python3 +""" +RockAuto Vehicle Data Scraper - Enhanced Version +Extracts vehicle information (brands, models, years, engines) from RockAuto.com +""" + +import requests +from bs4 import BeautifulSoup +import time +import random +from urllib.parse import urljoin, urlparse +import json +import sqlite3 +from typing import List, Dict, Optional + + +class RockAutoScraper: + def __init__(self, db_path: str = "../vehicle_database/vehicle_database.db"): + self.base_url = "https://www.rockauto.com" + self.session = requests.Session() + self.session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', + 'Accept-Language': 'en-US,en;q=0.5', + 'Accept-Encoding': 'gzip, deflate', + 'Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1', + }) + self.db_path = db_path + + # Create a mapping of RockAuto brand names to standardized names + self.brand_mapping = { + 'acura': 'Acura', + 'alfa-romeo': 'Alfa Romeo', + 'audi': 'Audi', + 'bmw': 'BMW', + 'buick': 'Buick', + 'cadillac': 'Cadillac', + 'chevrolet': 'Chevrolet', + 'chrysler': 'Chrysler', + 'dodge': 'Dodge', + 'fiat': 'Fiat', + 'ford': 'Ford', + 'gmc': 'GMC', + 'honda': 'Honda', + 'hyundai': 'Hyundai', + 'infiniti': 'Infiniti', + 'isuzu': 'Isuzu', + 'jaguar': 'Jaguar', + 'jeep': 'Jeep', + 'kia': 'Kia', + 'land-rover': 'Land Rover', + 'lexus': 'Lexus', + 'lincoln': 'Lincoln', + 'mazda': 'Mazda', + 'mercedes-benz': 'Mercedes-Benz', + 'mercury': 'Mercury', + 'mitsubishi': 'Mitsubishi', + 'nissan': 'Nissan', + 'oldsmobile': 'Oldsmobile', + 'plymouth': 'Plymouth', + 'pontiac': 'Pontiac', + 'porsche': 'Porsche', + 'ram': 'Ram', + 'saab': 'Saab', + 'saturn': 'Saturn', + 'scion': 'Scion', + 'subaru': 'Subaru', + 'suzuki': 'Suzuki', + 'tesla': 'Tesla', + 'toyota': 'Toyota', + 'volkswagen': 'Volkswagen', + 'volvo': 'Volvo' + } + + def get_page(self, url: str) -> Optional[BeautifulSoup]: + """Get a page and return BeautifulSoup object""" + try: + # Add random delay to be respectful to the server + time.sleep(random.uniform(2, 4)) + response = self.session.get(url) + response.raise_for_status() + return BeautifulSoup(response.content, 'html.parser') + except requests.RequestException as e: + print(f"Error fetching {url}: {e}") + return None + + def get_makes_enhanced(self) -> List[str]: + """Enhanced method to get makes from RockAuto""" + print("Fetching list of makes (enhanced)...") + + # Try multiple approaches to get makes + makes = [] + + # Approach 1: Visit the main catalog page + soup = self.get_page(f"{self.base_url}/catalog/catalog.php") + + if not soup: + return makes + + # Look for links that contain make information in the URL + links = soup.find_all('a', href=True) + + for link in links: + href = link.get('href', '').lower() + + # Check if the href contains a known make + for key, value in self.brand_mapping.items(): + if f"/{key}/" in href and value not in makes: + makes.append(value) + + # Approach 2: Look for JavaScript variables or data attributes that might contain makes + scripts = soup.find_all('script') + for script in scripts: + if script.string: + # Look for common patterns in JavaScript + import re + # Look for patterns like make names in quotes + matches = re.findall(r'["\']([a-z-]+)["\']', script.string) + for match in matches: + if match in self.brand_mapping and self.brand_mapping[match] not in makes: + makes.append(self.brand_mapping[match]) + + print(f"Found {len(makes)} makes: {makes[:10]}{'...' if len(makes) > 10 else ''}") + return makes + + def get_detailed_models_for_make(self, make: str) -> List[Dict]: + """Get detailed models for a specific make by exploring deeper pages""" + print(f"Fetching detailed models for {make}...") + + # Convert make to RockAuto format + make_key = None + for key, value in self.brand_mapping.items(): + if value.lower() == make.lower(): + make_key = key + break + + if not make_key: + print(f"Make {make} not found in mapping") + return [] + + models = [] + + # Visit the make-specific page + url = f"{self.base_url}/catalog/catalog.php?c={make_key}" + soup = self.get_page(url) + + if not soup: + return models + + # Look for year links first + year_links = soup.find_all('a', href=lambda x: x and f'/catalog/{make_key}/' in x and any(str(y) in x for y in range(1900, 2030))) + + for link in year_links: + href = link.get('href', '') + text = link.get_text().strip() + + # Extract year from URL or text + import re + year_match = re.search(r'\b(19|20)\d{2}\b', text) + if not year_match: + year_match = re.search(r'\b(19|20)\d{2}\b', href) + + if year_match: + year = int(year_match.group()) + + # Extract model from text or URL + # Remove year from text to get model + model_text = re.sub(r'\b(19|20)\d{2}\b', '', text).strip() + + if model_text: + # Create a record + record = { + 'make': make, + 'model': model_text, + 'year': year, + 'engine': 'Unknown', # Will need to extract from deeper pages + 'href': href + } + + if record not in models: + models.append(record) + + # If no year-specific links found, try alternative approach + if not models: + # Look for links that might contain both make and year + all_links = soup.find_all('a', href=True) + for link in all_links: + href = link.get('href', '').lower() + text = link.get_text().strip() + + if f"/{make_key}/" in href: + # Look for year in the text or href + year_match = re.search(r'\b(19|20)\d{2}\b', text) + if not year_match: + year_match = re.search(r'\b(19|20)\d{2}\b', href) + + if year_match: + year = int(year_match.group()) + + # Extract model info + model_parts = [part for part in text.split() if not re.match(r'\b(19|20)\d{2}\b', part)] + model = ' '.join(model_parts) + + if model: + record = { + 'make': make, + 'model': model, + 'year': year, + 'engine': 'Unknown', + 'href': link.get('href') + } + + if record not in models: + models.append(record) + + print(f"Found {len(models)} models for {make}") + return models + + def explore_categories(self, make: str) -> List[Dict]: + """Explore categories for a specific make to find models and years""" + print(f"Exploring categories for {make}...") + + # Convert make to RockAuto format + make_key = None + for key, value in self.brand_mapping.items(): + if value.lower() == make.lower(): + make_key = key + break + + if not make_key: + print(f"Make {make} not found in mapping") + return [] + + models = [] + + # Visit the make-specific page + url = f"{self.base_url}/catalog/catalog.php?c={make_key}" + soup = self.get_page(url) + + if not soup: + return models + + # Look for elements that represent vehicle categories + # RockAuto typically organizes by year/model + category_elements = soup.find_all(['div', 'section', 'ul'], class_=lambda x: x and any(keyword in x.lower() for keyword in ['year', 'model', 'catalog', 'vehicle'])) + + if not category_elements: + # If no categorized elements found, try looking for all links with year info + all_links = soup.find_all('a', href=True) + for link in all_links: + href = link.get('href', '').lower() + text = link.get_text().strip() + + if f"/{make_key}/" in href and any(str(year) in href for year in range(1900, 2030)): + # Extract year and model + import re + year_match = re.search(r'\b(19|20)\d{2}\b', href) + if year_match: + year = int(year_match.group()) + + # Clean up text to extract model + clean_text = re.sub(r'\b(19|20)\d{2}\b', '', text).strip(' -_') + + if clean_text and len(clean_text) > 1: + record = { + 'make': make, + 'model': clean_text, + 'year': year, + 'engine': 'Unknown', + 'href': link.get('href') + } + + if record not in models: + models.append(record) + + print(f"Found {len(models)} entries for {make} through category exploration") + return models + + def scrape_vehicle_data(self) -> List[Dict]: + """Main method to scrape vehicle data from RockAuto""" + print("Starting enhanced RockAuto scraping...") + + all_vehicles = [] + + # Get all makes using enhanced method + makes = self.get_makes_enhanced() + + # Limit to first 3 makes for testing + makes = makes[:3] if len(makes) > 3 else makes + + for make in makes: + # Try multiple approaches to get models + models = self.get_detailed_models_for_make(make) + + # If still no models, try category exploration + if not models: + models = self.explore_categories(make) + + all_vehicles.extend(models) + + # Limit total records for testing + if len(all_vehicles) > 15: + break + + print(f"Total vehicles found: {len(all_vehicles)}") + return all_vehicles + + def save_to_database(self, vehicles: List[Dict]): + """Save scraped data to the vehicle database""" + print(f"Saving {len(vehicles)} vehicles to database...") + + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + + for vehicle in vehicles: + try: + # Insert brand + cursor.execute( + "INSERT OR IGNORE INTO brands (name) VALUES (?)", + (vehicle['make'],) + ) + cursor.execute("SELECT id FROM brands WHERE name = ?", (vehicle['make'],)) + brand_id = cursor.fetchone()[0] + + # Insert year + cursor.execute( + "INSERT OR IGNORE INTO years (year) VALUES (?)", + (vehicle['year'],) + ) + cursor.execute("SELECT id FROM years WHERE year = ?", (vehicle['year'],)) + year_id = cursor.fetchone()[0] + + # Insert engine (with unknown specs for now) + engine_name = vehicle['engine'] if vehicle['engine'] != 'Unknown' else f"Engine_{vehicle['year']}_{vehicle['model'][:10]}" + cursor.execute( + "INSERT OR IGNORE INTO engines (name) VALUES (?)", + (engine_name,) + ) + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,)) + engine_id = cursor.fetchone()[0] + + # Insert model + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name, body_type) VALUES (?, ?, ?)", + (brand_id, vehicle['model'], 'Unknown') + ) + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, vehicle['model'])) + model_id = cursor.fetchone()[0] + + # Link model, year, and engine + cursor.execute( + """INSERT OR IGNORE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + except Exception as e: + print(f"Error saving vehicle {vehicle}: {e}") + + conn.commit() + conn.close() + print("Data saved to database successfully!") + + +def main(): + scraper = RockAutoScraper() + + print("Starting enhanced RockAuto data extraction...") + print("Note: This may take several minutes due to rate limiting.") + + try: + # Scrape vehicle data + vehicles = scraper.scrape_vehicle_data() + + if vehicles: + print(f"\nFound {len(vehicles)} vehicles:") + for i, v in enumerate(vehicles[:10]): # Show first 10 + print(f" {i+1}. {v['make']} {v['model']} {v['year']}") + + if len(vehicles) > 10: + print(f" ... and {len(vehicles)-10} more") + + # Save to database + scraper.save_to_database(vehicles) + + print("\nScraping completed successfully!") + else: + print("No vehicles found. This could be due to:") + print("1. RockAuto blocking automated requests") + print("2. Changes in website structure") + print("3. Network connectivity issues") + print("4. Anti-bot measures implemented by RockAuto") + + except Exception as e: + print(f"An error occurred during scraping: {e}") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/vehicle_scraper/rockauto_scraper_v2.py b/vehicle_scraper/rockauto_scraper_v2.py new file mode 100644 index 0000000..d7ec6c1 --- /dev/null +++ b/vehicle_scraper/rockauto_scraper_v2.py @@ -0,0 +1,350 @@ +#!/usr/bin/env python3 +""" +RockAuto Vehicle Data Scraper v2 +Extrae información de vehículos (marcas, años, modelos, motores) de RockAuto.com +""" + +import requests +from bs4 import BeautifulSoup +import time +import random +import sqlite3 +import re +import sys +from typing import List, Dict, Set, Optional +from urllib.parse import unquote + + +class RockAutoScraperV2: + def __init__(self, db_path: str = "../vehicle_database/vehicle_database.db"): + self.base_url = "https://www.rockauto.com/en/catalog" + self.session = requests.Session() + self.session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', + 'Accept-Language': 'en-US,en;q=0.5', + }) + self.db_path = db_path + self.delay_range = (1, 2) # Segundos entre peticiones + + def _delay(self): + """Pausa respetuosa entre peticiones""" + time.sleep(random.uniform(*self.delay_range)) + + def _get_soup(self, url: str) -> Optional[BeautifulSoup]: + """Obtiene y parsea una página""" + try: + self._delay() + response = self.session.get(url, timeout=30) + response.raise_for_status() + return BeautifulSoup(response.content, 'html.parser') + except Exception as e: + print(f" Error al obtener {url}: {e}") + return None + + def _clean_name(self, name: str) -> str: + """Limpia y formatea un nombre""" + name = unquote(name.replace('+', ' ')) + name = re.sub(r'\s+', ' ', name).strip() + return name.upper() + + def get_all_brands(self) -> List[str]: + """Obtiene todas las marcas disponibles""" + print("Obteniendo lista de marcas...") + soup = self._get_soup(f"{self.base_url}/") + + if not soup: + return [] + + brands = set() + links = soup.find_all('a', href=True) + + for link in links: + href = link['href'] + # Buscar enlaces como /en/catalog/MARCA + match = re.match(r'/en/catalog/([^,/]+)$', href) + if match: + brand = self._clean_name(match.group(1)) + if brand and len(brand) > 1 and not brand.isdigit(): + brands.add(brand) + + brands_list = sorted(brands) + print(f" Encontradas {len(brands_list)} marcas") + return brands_list + + def get_years_for_brand(self, brand: str) -> List[int]: + """Obtiene los años disponibles para una marca""" + brand_url = brand.lower().replace(' ', '+') + soup = self._get_soup(f"{self.base_url}/{brand_url}") + + if not soup: + return [] + + years = set() + links = soup.find_all('a', href=True) + + for link in links: + href = link['href'] + # Buscar patrones como /catalog/brand,YEAR + match = re.search(rf'/catalog/{re.escape(brand_url)},(\d{{4}})', href, re.IGNORECASE) + if match: + year = int(match.group(1)) + if 1900 < year <= 2030: + years.add(year) + + return sorted(years, reverse=True) + + def get_models_for_brand_year(self, brand: str, year: int) -> List[str]: + """Obtiene los modelos para una marca y año""" + brand_url = brand.lower().replace(' ', '+') + soup = self._get_soup(f"{self.base_url}/{brand_url},{year}") + + if not soup: + return [] + + models = set() + links = soup.find_all('a', href=True) + + for link in links: + href = link['href'] + # Buscar patrones como /catalog/brand,year,MODEL + pattern = rf'/catalog/{re.escape(brand_url)},{year},([^,/]+)' + match = re.search(pattern, href, re.IGNORECASE) + if match: + model = self._clean_name(match.group(1)) + if model and len(model) > 0 and not model.isdigit(): + models.add(model) + + return sorted(models) + + def get_engines_for_vehicle(self, brand: str, year: int, model: str) -> List[str]: + """Obtiene los motores para un vehículo específico""" + brand_url = brand.lower().replace(' ', '+') + model_url = model.lower().replace(' ', '+') + soup = self._get_soup(f"{self.base_url}/{brand_url},{year},{model_url}") + + if not soup: + return [] + + engines = set() + links = soup.find_all('a', href=True) + + for link in links: + href = link['href'] + text = link.get_text().strip() + + # Buscar patrones de motor en el href + pattern = rf'/catalog/{re.escape(brand_url)},{year},{re.escape(model_url)},([^,/]+)' + match = re.search(pattern, href, re.IGNORECASE) + if match: + engine = self._clean_name(match.group(1)) + # Filtrar solo motores válidos (contienen L, V, cilindros, etc.) + if engine and re.search(r'\d+\.?\d*L|V\d|I\d|HYBRID|ELECTRIC|DIESEL', engine, re.IGNORECASE): + engines.add(engine) + + return sorted(engines) + + def scrape_brand(self, brand: str, max_years: int = None, max_models_per_year: int = None) -> List[Dict]: + """Extrae todos los vehículos de una marca""" + print(f"\n{'='*50}") + print(f"Procesando marca: {brand}") + print('='*50) + + vehicles = [] + + # Obtener años + years = self.get_years_for_brand(brand) + if max_years: + years = years[:max_years] + + print(f" Años encontrados: {len(years)}") + + for year in years: + print(f"\n Año {year}:") + + # Obtener modelos + models = self.get_models_for_brand_year(brand, year) + if max_models_per_year: + models = models[:max_models_per_year] + + print(f" Modelos: {len(models)}") + + for model in models: + # Obtener motores + engines = self.get_engines_for_vehicle(brand, year, model) + + if engines: + for engine in engines: + vehicle = { + 'brand': brand, + 'year': year, + 'model': model, + 'engine': engine + } + vehicles.append(vehicle) + print(f" {model} - {engine}") + else: + # Si no hay motores específicos, agregar con motor genérico + vehicle = { + 'brand': brand, + 'year': year, + 'model': model, + 'engine': 'Standard' + } + vehicles.append(vehicle) + print(f" {model} - (sin motor específico)") + + print(f"\n Total vehículos para {brand}: {len(vehicles)}") + return vehicles + + def save_to_database(self, vehicles: List[Dict]): + """Guarda los vehículos en la base de datos""" + if not vehicles: + print("No hay vehículos para guardar") + return + + print(f"\nGuardando {len(vehicles)} vehículos en la base de datos...") + + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + + saved = 0 + skipped = 0 + + for vehicle in vehicles: + try: + # Insertar o obtener marca + cursor.execute( + "INSERT OR IGNORE INTO brands (name) VALUES (?)", + (vehicle['brand'],) + ) + cursor.execute("SELECT id FROM brands WHERE name = ?", (vehicle['brand'],)) + brand_id = cursor.fetchone()[0] + + # Insertar o obtener año + cursor.execute( + "INSERT OR IGNORE INTO years (year) VALUES (?)", + (vehicle['year'],) + ) + cursor.execute("SELECT id FROM years WHERE year = ?", (vehicle['year'],)) + year_id = cursor.fetchone()[0] + + # Insertar o obtener motor + cursor.execute( + "INSERT OR IGNORE INTO engines (name) VALUES (?)", + (vehicle['engine'],) + ) + cursor.execute("SELECT id FROM engines WHERE name = ?", (vehicle['engine'],)) + engine_id = cursor.fetchone()[0] + + # Insertar o obtener modelo + cursor.execute( + "INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", + (brand_id, vehicle['model']) + ) + cursor.execute( + "SELECT id FROM models WHERE brand_id = ? AND name = ?", + (brand_id, vehicle['model']) + ) + model_id = cursor.fetchone()[0] + + # Insertar relación modelo-año-motor + cursor.execute( + """INSERT OR IGNORE INTO model_year_engine + (model_id, year_id, engine_id) VALUES (?, ?, ?)""", + (model_id, year_id, engine_id) + ) + + if cursor.rowcount > 0: + saved += 1 + else: + skipped += 1 + + except Exception as e: + print(f" Error guardando {vehicle}: {e}") + skipped += 1 + + conn.commit() + conn.close() + + print(f" Guardados: {saved}, Omitidos (duplicados): {skipped}") + + def scrape_multiple_brands(self, brands: List[str], **kwargs) -> List[Dict]: + """Extrae vehículos de múltiples marcas""" + all_vehicles = [] + + for i, brand in enumerate(brands, 1): + print(f"\n[{i}/{len(brands)}] ", end="") + vehicles = self.scrape_brand(brand, **kwargs) + all_vehicles.extend(vehicles) + + return all_vehicles + + +def main(): + import argparse + + parser = argparse.ArgumentParser(description='Scraper de vehículos de RockAuto') + parser.add_argument('--brands', nargs='+', help='Marcas específicas a extraer') + parser.add_argument('--all-brands', action='store_true', help='Extraer todas las marcas') + parser.add_argument('--max-years', type=int, default=5, help='Máximo de años por marca (default: 5)') + parser.add_argument('--max-models', type=int, help='Máximo de modelos por año') + parser.add_argument('--list-brands', action='store_true', help='Solo listar marcas disponibles') + parser.add_argument('--db', default='../vehicle_database/vehicle_database.db', help='Ruta a la base de datos') + + args = parser.parse_args() + + scraper = RockAutoScraperV2(db_path=args.db) + + if args.list_brands: + brands = scraper.get_all_brands() + print("\nMarcas disponibles en RockAuto:") + for i, brand in enumerate(brands, 1): + print(f" {i:3}. {brand}") + print(f"\nTotal: {len(brands)} marcas") + return + + # Determinar qué marcas procesar + if args.brands: + brands_to_scrape = [b.upper() for b in args.brands] + elif args.all_brands: + brands_to_scrape = scraper.get_all_brands() + else: + # Por defecto, algunas marcas populares + brands_to_scrape = ['TOYOTA', 'HONDA', 'FORD', 'CHEVROLET', 'NISSAN'] + + print(f"\nMarcas a procesar: {', '.join(brands_to_scrape)}") + print(f"Máximo años por marca: {args.max_years}") + if args.max_models: + print(f"Máximo modelos por año: {args.max_models}") + + # Extraer datos + vehicles = scraper.scrape_multiple_brands( + brands_to_scrape, + max_years=args.max_years, + max_models_per_year=args.max_models + ) + + # Guardar en base de datos + if vehicles: + scraper.save_to_database(vehicles) + + print(f"\n{'='*50}") + print("RESUMEN") + print('='*50) + print(f"Total de vehículos extraídos: {len(vehicles)}") + + # Estadísticas + brands_count = len(set(v['brand'] for v in vehicles)) + models_count = len(set(f"{v['brand']}-{v['model']}" for v in vehicles)) + years_range = f"{min(v['year'] for v in vehicles)} - {max(v['year'] for v in vehicles)}" + + print(f"Marcas: {brands_count}") + print(f"Modelos únicos: {models_count}") + print(f"Rango de años: {years_range}") + else: + print("\nNo se encontraron vehículos") + + +if __name__ == "__main__": + main() diff --git a/vehicle_scraper/scrape_nissan_ford_chevrolet.py b/vehicle_scraper/scrape_nissan_ford_chevrolet.py new file mode 100644 index 0000000..b850595 --- /dev/null +++ b/vehicle_scraper/scrape_nissan_ford_chevrolet.py @@ -0,0 +1,393 @@ +#!/usr/bin/env python3 +""" +Scraper de Ford y Chevrolet +- Procesa de 5 en 5 años +- Espera 3 minutos (180 segundos) entre lotes para activar VPN +- Presiona ENTER para saltar la espera +- Años: 1975-2026 +""" + +import requests +from bs4 import BeautifulSoup +import sqlite3 +import time +import re +import os +import sys +import threading +from urllib.parse import unquote + +# Detectar ruta base del proyecto +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +if os.path.basename(SCRIPT_DIR) == "vehicle_scraper": + BASE_DIR = os.path.dirname(SCRIPT_DIR) +else: + BASE_DIR = SCRIPT_DIR +DB_PATH = os.path.join(BASE_DIR, "vehicle_database", "vehicle_database.db") + +BASE_URL = "https://www.rockauto.com/en/catalog" + +# Marcas a scrapear (Nissan ya fue procesado) +BRANDS = ["FORD", "CHEVROLET"] + +# Años de 1975 a 2026 (orden descendente) +ALL_YEARS = list(range(2026, 1974, -1)) + +# Configuración de lotes +BATCH_SIZE = 5 # años por lote +WAIT_TIME = 180 # 3 minutos entre lotes + +session = requests.Session() +session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml', + 'Accept-Language': 'en-US,en;q=0.9', +}) + +# Variable global para controlar salto de espera +skip_wait = False + +def wait_with_skip(seconds, message=""): + """Espera que se puede saltar presionando ENTER""" + global skip_wait + skip_wait = False + + print(f"\n{'*'*60}") + print(f" {message}") + print(f" ACTIVA/CAMBIA EL VPN AHORA") + print(f" >>> Presiona ENTER para saltar la espera <<<") + print(f"{'*'*60}") + + # Usar threading para detectar input + def check_input(): + global skip_wait + try: + input() + skip_wait = True + except: + pass + + input_thread = threading.Thread(target=check_input, daemon=True) + input_thread.start() + + for sec in range(seconds, 0, -1): + if skip_wait: + print(f"\n >>> ESPERA SALTADA <<<") + return + mins = sec // 60 + secs = sec % 60 + print(f"\r Continuando en {mins}:{secs:02d}... (ENTER para saltar) ", end="", flush=True) + time.sleep(1) + print() + +def clean_name(name): + name = unquote(name.replace('+', ' ')) + return re.sub(r'\s+', ' ', name).strip().upper() + +def get_soup(url, retries=3): + for attempt in range(retries): + try: + time.sleep(0.5) + response = session.get(url, timeout=15) + if response.status_code == 200: + return BeautifulSoup(response.content, 'html.parser') + elif response.status_code == 403: + print(f"\n [!] Bloqueado (403) - Cambia el VPN") + return None + except Exception as e: + if attempt < retries - 1: + time.sleep(3) + else: + print(f"\n Error: {e}") + return None + +def get_models(brand, year): + brand_url = brand.lower().replace(' ', '+') + soup = get_soup(f"{BASE_URL}/{brand_url},{year}") + if not soup: + return [] + + models = set() + for link in soup.find_all('a', href=True): + pattern = rf'/catalog/{re.escape(brand_url)},{year},([^,/]+)' + match = re.search(pattern, link['href'], re.I) + if match: + model = clean_name(match.group(1)) + if model and not model.isdigit() and len(model) > 1: + models.add(model) + return sorted(models) + +def get_engines(brand, year, model): + brand_url = brand.lower().replace(' ', '+') + model_url = model.lower().replace(' ', '+') + soup = get_soup(f"{BASE_URL}/{brand_url},{year},{model_url}") + if not soup: + return ['STANDARD'] + + engines = set() + for link in soup.find_all('a', href=True): + pattern = rf'/catalog/{re.escape(brand_url)},{year},{re.escape(model_url)},([^,/]+)' + match = re.search(pattern, link['href'], re.I) + if match: + engine = clean_name(match.group(1)) + if engine and re.search(r'\d+\.?\d*L|V\d|I\d|H\d|HYBRID|ELECTRIC|DIESEL', engine, re.I): + engines.add(engine) + return sorted(engines) if engines else ['STANDARD'] + +def save_to_db(conn, brand, year, model, engine): + cursor = conn.cursor() + try: + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", (brand,)) + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand,)) + brand_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine,)) + engine_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", (brand_id, model)) + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model)) + model_id = cursor.fetchone()[0] + + cursor.execute( + "INSERT OR IGNORE INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + return cursor.rowcount > 0 + except Exception as e: + print(f" DB Error: {e}") + return False + +def get_existing_years(conn, brand): + """Obtiene los años que ya existen para esta marca""" + cursor = conn.cursor() + cursor.execute(""" + SELECT DISTINCT y.year + FROM years y + JOIN model_year_engine mye ON y.id = mye.year_id + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + WHERE b.name = ? + """, (brand,)) + return set(row[0] for row in cursor.fetchall()) + +def process_batch(conn, brand, years_batch, batch_num, total_batches): + """Procesa un lote de 5 años""" + print(f"\n{'='*60}") + print(f"[{brand}] LOTE {batch_num}/{total_batches}: Años {years_batch}") + print('='*60) + + batch_saved = 0 + batch_total = 0 + + for year in years_batch: + print(f"\n[{brand} - Año {year}] Obteniendo modelos... ", end="", flush=True) + models = get_models(brand, year) + print(f"{len(models)} modelos encontrados") + + if not models: + print(f" No se encontraron modelos para {year}") + continue + + for model in models: + engines = get_engines(brand, year, model) + for engine in engines: + batch_total += 1 + if save_to_db(conn, brand, year, model, engine): + batch_saved += 1 + print(f" {model} - {engine}") + + # Guardar cambios del lote + conn.commit() + print(f"\n>> Lote {batch_num} completado: {batch_saved} nuevos de {batch_total} encontrados") + return batch_saved, batch_total + +def get_brand_batches(conn, brand): + """Obtiene los lotes disponibles para una marca""" + existing = get_existing_years(conn, brand) + years_to_process = [y for y in ALL_YEARS if y not in existing] + if not years_to_process: + return [], existing + batches = [years_to_process[i:i+BATCH_SIZE] for i in range(0, len(years_to_process), BATCH_SIZE)] + return batches, existing + +def process_brand(conn, brand, start_batch=1): + """Procesa una marca completa desde un lote específico""" + print(f"\n{'#'*60}") + print(f" PROCESANDO MARCA: {brand}") + print(f"{'#'*60}") + + # Verificar qué años ya existen + existing = get_existing_years(conn, brand) + print(f"Años existentes de {brand}: {len(existing)} años") + if existing: + print(f" Rango existente: {min(existing)}-{max(existing)}") + + # Filtrar solo los que faltan + years_to_process = [y for y in ALL_YEARS if y not in existing] + + if not years_to_process: + print(f"\n[OK] {brand}: Todos los años ya están en la base de datos!") + return 0, 0 + + print(f"\nAños por procesar para {brand}: {len(years_to_process)}") + print(f" De {max(years_to_process)} a {min(years_to_process)}") + + # Dividir en lotes de 5 + batches = [years_to_process[i:i+BATCH_SIZE] for i in range(0, len(years_to_process), BATCH_SIZE)] + total_batches = len(batches) + + print(f"Lotes de {BATCH_SIZE} años: {total_batches} lotes") + + if start_batch > 1: + print(f"\n>>> Comenzando desde el lote {start_batch} <<<") + + total_saved = 0 + total_found = 0 + + for i, batch in enumerate(batches, 1): + # Saltar lotes anteriores al inicial + if i < start_batch: + continue + + saved, found = process_batch(conn, brand, batch, i, total_batches) + total_saved += saved + total_found += found + + # Si no es el último lote, esperar para cambiar VPN + if i < total_batches: + wait_with_skip(WAIT_TIME, f"PAUSA DE {WAIT_TIME//60} MINUTOS - [{brand}] Lotes restantes: {total_batches - i}") + + return total_saved, total_found + +def show_batch_menu(conn): + """Muestra menú para seleccionar marca y lote inicial""" + print("\n" + "="*60) + print(" MENÚ DE SELECCIÓN DE LOTES") + print("="*60) + + brand_info = {} + for i, brand in enumerate(BRANDS, 1): + batches, existing = get_brand_batches(conn, brand) + brand_info[brand] = {'batches': batches, 'existing': existing} + + if batches: + print(f"\n {i}. {brand}") + print(f" Años existentes: {len(existing)}") + print(f" Lotes pendientes: {len(batches)}") + for j, batch in enumerate(batches, 1): + print(f" Lote {j}: años {batch[0]}-{batch[-1]}") + else: + print(f"\n {i}. {brand} - [COMPLETO]") + + print(f"\n 0. Procesar todo desde el inicio") + print("="*60) + + # Seleccionar marca + while True: + try: + choice = input("\nSelecciona marca (0 para todo): ").strip() + if choice == '0' or choice == '': + return None, 1 # Procesar todo + + brand_idx = int(choice) - 1 + if 0 <= brand_idx < len(BRANDS): + selected_brand = BRANDS[brand_idx] + break + print("Opción inválida") + except ValueError: + print("Ingresa un número válido") + + batches = brand_info[selected_brand]['batches'] + if not batches: + print(f"\n{selected_brand} ya está completo!") + return selected_brand, 1 + + # Seleccionar lote + print(f"\n--- Lotes de {selected_brand} ---") + for j, batch in enumerate(batches, 1): + print(f" {j}. Lote {j}: años {batch[0]}-{batch[-1]}") + + while True: + try: + batch_choice = input(f"\nComenzar desde lote (1-{len(batches)}): ").strip() + if batch_choice == '': + return selected_brand, 1 + + batch_num = int(batch_choice) + if 1 <= batch_num <= len(batches): + return selected_brand, batch_num + print(f"Ingresa un número entre 1 y {len(batches)}") + except ValueError: + print("Ingresa un número válido") + +def main(): + print("="*60) + print(" SCRAPER FORD, CHEVROLET") + print(f" Años: 1975-2026 | Lotes de {BATCH_SIZE} años") + print(f" Pausa entre lotes: {WAIT_TIME//60} minutos") + print(" >>> Presiona ENTER para saltar esperas <<<") + print("="*60) + + # Verificar base de datos + if not os.path.exists(DB_PATH): + print(f"\n[ERROR] Base de datos no encontrada: {DB_PATH}") + print("Verifica que la ruta sea correcta.") + sys.exit(1) + + print(f"\nBase de datos: {DB_PATH}") + + conn = sqlite3.connect(DB_PATH) + + # Mostrar estado inicial + print(f"\nMarcas a procesar: {', '.join(BRANDS)}") + print(f"Rango de años: {min(ALL_YEARS)}-{max(ALL_YEARS)} ({len(ALL_YEARS)} años)") + + # Menú de selección de lotes + selected_brand, start_batch = show_batch_menu(conn) + + grand_total_saved = 0 + grand_total_found = 0 + brand_stats = {} + + # Determinar qué marcas procesar + if selected_brand: + # Solo procesar la marca seleccionada desde el lote indicado + brands_to_process = [selected_brand] + start_batches = {selected_brand: start_batch} + else: + # Procesar todas las marcas desde el inicio + brands_to_process = BRANDS + start_batches = {brand: 1 for brand in BRANDS} + + for brand in brands_to_process: + saved, found = process_brand(conn, brand, start_batches.get(brand, 1)) + brand_stats[brand] = {'saved': saved, 'found': found} + grand_total_saved += saved + grand_total_found += found + + # Pausa entre marcas (si hay otra marca por procesar) + if brand != brands_to_process[-1]: + wait_with_skip(WAIT_TIME, f"PAUSA ENTRE MARCAS - Siguiente: {brands_to_process[brands_to_process.index(brand)+1]}") + + conn.close() + + print("\n" + "="*60) + print(" RESUMEN FINAL") + print("="*60) + for brand, stats in brand_stats.items(): + print(f" {brand}:") + print(f" Encontrados: {stats['found']}") + print(f" Nuevos guardados: {stats['saved']}") + print("-"*60) + print(f" TOTAL:") + print(f" Vehículos encontrados: {grand_total_found}") + print(f" Nuevos guardados: {grand_total_saved}") + print("="*60) + +if __name__ == "__main__": + main() diff --git a/vehicle_scraper/scrape_toyota.py b/vehicle_scraper/scrape_toyota.py new file mode 100644 index 0000000..3899bb3 --- /dev/null +++ b/vehicle_scraper/scrape_toyota.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +""" +Script optimizado para extraer todos los vehículos Toyota de RockAuto +Guarda datos incrementalmente para no perder progreso +""" + +import requests +from bs4 import BeautifulSoup +import sqlite3 +import time +import re +import sys +from urllib.parse import unquote + +DB_PATH = "/home/Autopartes/vehicle_database/vehicle_database.db" +BASE_URL = "https://www.rockauto.com/en/catalog" + +session = requests.Session() +session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml', + 'Accept-Language': 'en-US,en;q=0.9', +}) + +def clean_name(name): + name = unquote(name.replace('+', ' ')) + return re.sub(r'\s+', ' ', name).strip().upper() + +def get_soup(url, retries=3): + for attempt in range(retries): + try: + time.sleep(0.3) # Delay corto + response = session.get(url, timeout=10) + if response.status_code == 200: + return BeautifulSoup(response.content, 'html.parser') + except Exception as e: + if attempt < retries - 1: + time.sleep(2) + else: + print(f" Error: {e}") + return None + +def get_years(brand): + brand_url = brand.lower().replace(' ', '+') + soup = get_soup(f"{BASE_URL}/{brand_url}") + if not soup: + return [] + + years = set() + for link in soup.find_all('a', href=True): + match = re.search(rf'/catalog/{re.escape(brand_url)},(\d{{4}})', link['href'], re.I) + if match: + year = int(match.group(1)) + if 1950 < year <= 2030: + years.add(year) + return sorted(years, reverse=True) + +def get_models(brand, year): + brand_url = brand.lower().replace(' ', '+') + soup = get_soup(f"{BASE_URL}/{brand_url},{year}") + if not soup: + return [] + + models = set() + for link in soup.find_all('a', href=True): + pattern = rf'/catalog/{re.escape(brand_url)},{year},([^,/]+)' + match = re.search(pattern, link['href'], re.I) + if match: + model = clean_name(match.group(1)) + if model and not model.isdigit() and len(model) > 1: + models.add(model) + return sorted(models) + +def get_engines(brand, year, model): + brand_url = brand.lower().replace(' ', '+') + model_url = model.lower().replace(' ', '+') + soup = get_soup(f"{BASE_URL}/{brand_url},{year},{model_url}") + if not soup: + return [] + + engines = set() + for link in soup.find_all('a', href=True): + pattern = rf'/catalog/{re.escape(brand_url)},{year},{re.escape(model_url)},([^,/]+)' + match = re.search(pattern, link['href'], re.I) + if match: + engine = clean_name(match.group(1)) + if engine and re.search(r'\d+\.?\d*L|V\d|I\d|H\d|HYBRID|ELECTRIC|DIESEL', engine, re.I): + engines.add(engine) + return sorted(engines) if engines else ['Standard'] + +def save_to_db(conn, brand, year, model, engine): + cursor = conn.cursor() + try: + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", (brand,)) + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand,)) + brand_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine,)) + engine_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", (brand_id, model)) + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model)) + model_id = cursor.fetchone()[0] + + cursor.execute( + "INSERT OR IGNORE INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + return cursor.rowcount > 0 + except Exception as e: + print(f" DB Error: {e}") + return False + +def main(): + brand = "TOYOTA" + + print(f"Obteniendo años disponibles para {brand}...") + years = get_years(brand) + print(f"Encontrados {len(years)} años: {years[0]} - {years[-1]}") + + # Filtrar solo 1975-2026 + years = [y for y in years if 1975 <= y <= 2026] + print(f"Procesando años 1975-2026: {len(years)} años") + print("=" * 60) + + conn = sqlite3.connect(DB_PATH) + total_saved = 0 + total_vehicles = 0 + + for i, year in enumerate(years, 1): + print(f"\n[{i}/{len(years)}] Año {year}: ", end="", flush=True) + + models = get_models(brand, year) + print(f"{len(models)} modelos") + + year_count = 0 + for model in models: + engines = get_engines(brand, year, model) + for engine in engines: + total_vehicles += 1 + if save_to_db(conn, brand, year, model, engine): + total_saved += 1 + year_count += 1 + print(f" {model}: {engine}") + + conn.commit() + print(f" -> Guardados: {year_count} nuevos") + + conn.close() + + print("\n" + "=" * 60) + print(f"RESUMEN TOYOTA") + print(f" Años procesados: {len(years)}") + print(f" Total vehículos encontrados: {total_vehicles}") + print(f" Nuevos guardados: {total_saved}") + +if __name__ == "__main__": + main() diff --git a/vehicle_scraper/scrape_toyota_windows.py b/vehicle_scraper/scrape_toyota_windows.py new file mode 100644 index 0000000..16b8038 --- /dev/null +++ b/vehicle_scraper/scrape_toyota_windows.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +""" +Scraper de Toyota para Windows +- Procesa de 3 en 3 años +- Espera 60 segundos entre lotes para activar VPN +- Años faltantes: 1975-2003 +""" + +import requests +from bs4 import BeautifulSoup +import sqlite3 +import time +import re +import os +import sys +from urllib.parse import unquote + +# Detectar ruta base del proyecto +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +# Si estamos en vehicle_scraper, subir un nivel +if os.path.basename(SCRIPT_DIR) == "vehicle_scraper": + BASE_DIR = os.path.dirname(SCRIPT_DIR) +else: + BASE_DIR = SCRIPT_DIR +DB_PATH = os.path.join(BASE_DIR, "vehicle_database", "vehicle_database.db") + +BASE_URL = "https://www.rockauto.com/en/catalog" + +# Años que faltan por scrapear +MISSING_YEARS = [ + 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995, 1994, + 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984, + 1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975 +] + +session = requests.Session() +session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml', + 'Accept-Language': 'en-US,en;q=0.9', +}) + +def clean_name(name): + name = unquote(name.replace('+', ' ')) + return re.sub(r'\s+', ' ', name).strip().upper() + +def get_soup(url, retries=3): + for attempt in range(retries): + try: + time.sleep(0.5) + response = session.get(url, timeout=15) + if response.status_code == 200: + return BeautifulSoup(response.content, 'html.parser') + elif response.status_code == 403: + print(f"\n [!] Bloqueado (403) - Cambia el VPN") + return None + except Exception as e: + if attempt < retries - 1: + time.sleep(3) + else: + print(f"\n Error: {e}") + return None + +def get_models(brand, year): + brand_url = brand.lower().replace(' ', '+') + soup = get_soup(f"{BASE_URL}/{brand_url},{year}") + if not soup: + return [] + + models = set() + for link in soup.find_all('a', href=True): + pattern = rf'/catalog/{re.escape(brand_url)},{year},([^,/]+)' + match = re.search(pattern, link['href'], re.I) + if match: + model = clean_name(match.group(1)) + if model and not model.isdigit() and len(model) > 1: + models.add(model) + return sorted(models) + +def get_engines(brand, year, model): + brand_url = brand.lower().replace(' ', '+') + model_url = model.lower().replace(' ', '+') + soup = get_soup(f"{BASE_URL}/{brand_url},{year},{model_url}") + if not soup: + return ['STANDARD'] + + engines = set() + for link in soup.find_all('a', href=True): + pattern = rf'/catalog/{re.escape(brand_url)},{year},{re.escape(model_url)},([^,/]+)' + match = re.search(pattern, link['href'], re.I) + if match: + engine = clean_name(match.group(1)) + if engine and re.search(r'\d+\.?\d*L|V\d|I\d|H\d|HYBRID|ELECTRIC|DIESEL', engine, re.I): + engines.add(engine) + return sorted(engines) if engines else ['STANDARD'] + +def save_to_db(conn, brand, year, model, engine): + cursor = conn.cursor() + try: + cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", (brand,)) + cursor.execute("SELECT id FROM brands WHERE name = ?", (brand,)) + brand_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,)) + cursor.execute("SELECT id FROM years WHERE year = ?", (year,)) + year_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,)) + cursor.execute("SELECT id FROM engines WHERE name = ?", (engine,)) + engine_id = cursor.fetchone()[0] + + cursor.execute("INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)", (brand_id, model)) + cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model)) + model_id = cursor.fetchone()[0] + + cursor.execute( + "INSERT OR IGNORE INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)", + (model_id, year_id, engine_id) + ) + return cursor.rowcount > 0 + except Exception as e: + print(f" DB Error: {e}") + return False + +def get_existing_years(conn, brand): + """Obtiene los años que ya existen para esta marca""" + cursor = conn.cursor() + cursor.execute(""" + SELECT DISTINCT y.year + FROM years y + JOIN model_year_engine mye ON y.id = mye.year_id + JOIN models m ON mye.model_id = m.id + JOIN brands b ON m.brand_id = b.id + WHERE b.name = ? + """, (brand,)) + return set(row[0] for row in cursor.fetchall()) + +def process_batch(conn, brand, years_batch, batch_num, total_batches): + """Procesa un lote de 3 años""" + print(f"\n{'='*60}") + print(f"LOTE {batch_num}/{total_batches}: Años {years_batch}") + print('='*60) + + batch_saved = 0 + batch_total = 0 + + for year in years_batch: + print(f"\n[Año {year}] Obteniendo modelos... ", end="", flush=True) + models = get_models(brand, year) + print(f"{len(models)} modelos encontrados") + + if not models: + print(f" No se encontraron modelos para {year}") + continue + + for model in models: + engines = get_engines(brand, year, model) + for engine in engines: + batch_total += 1 + if save_to_db(conn, brand, year, model, engine): + batch_saved += 1 + print(f" {model} - {engine}") + + # Guardar cambios del lote + conn.commit() + print(f"\n>> Lote {batch_num} completado: {batch_saved} nuevos de {batch_total} encontrados") + return batch_saved, batch_total + +def main(): + brand = "TOYOTA" + + print("="*60) + print(" SCRAPER TOYOTA - WINDOWS") + print(" Procesa 3 años, guarda, espera 60s para VPN") + print("="*60) + + # Verificar base de datos + if not os.path.exists(DB_PATH): + print(f"\n[ERROR] Base de datos no encontrada: {DB_PATH}") + print("Verifica que la ruta sea correcta.") + sys.exit(1) + + print(f"\nBase de datos: {DB_PATH}") + + conn = sqlite3.connect(DB_PATH) + + # Verificar qué años ya existen + existing = get_existing_years(conn, brand) + print(f"Años existentes de {brand}: {sorted(existing)}") + + # Filtrar solo los que faltan + years_to_process = [y for y in MISSING_YEARS if y not in existing] + + if not years_to_process: + print("\n[OK] Todos los años ya están en la base de datos!") + conn.close() + return + + print(f"\nAños por procesar: {years_to_process}") + print(f"Total: {len(years_to_process)} años") + + # Dividir en lotes de 3 + batches = [years_to_process[i:i+3] for i in range(0, len(years_to_process), 3)] + total_batches = len(batches) + + print(f"Lotes de 3 años: {total_batches} lotes") + input("\nPresiona ENTER para comenzar...") + + total_saved = 0 + total_found = 0 + + for i, batch in enumerate(batches, 1): + saved, found = process_batch(conn, brand, batch, i, total_batches) + total_saved += saved + total_found += found + + # Si no es el último lote, esperar para cambiar VPN + if i < total_batches: + print(f"\n{'*'*60}") + print(f" PAUSA DE 60 SEGUNDOS - ACTIVA/CAMBIA EL VPN AHORA") + print(f" Lotes restantes: {total_batches - i}") + print(f"{'*'*60}") + + for sec in range(60, 0, -1): + print(f"\r Continuando en {sec} segundos... ", end="", flush=True) + time.sleep(1) + print() + + conn.close() + + print("\n" + "="*60) + print(" RESUMEN FINAL - TOYOTA") + print("="*60) + print(f" Años procesados: {len(years_to_process)}") + print(f" Vehículos encontrados: {total_found}") + print(f" Nuevos guardados: {total_saved}") + print("="*60) + +if __name__ == "__main__": + main()

BEl;>FB7eS9w3jZx**t%qL-QIP-0+Y; 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ʂ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°x5EjIlV?^ST=Hge% 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±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%0A^yrCs^4(x8OoPI(>NYInS>_Dw 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