{"id":25376480,"url":"https://github.com/rafavermar/marine_mvp","last_synced_at":"2026-04-13T23:32:26.064Z","repository":{"id":276843278,"uuid":"930492007","full_name":"Rafavermar/MARINE_MVP","owner":"Rafavermar","description":"Este repositorio contiene un MVP (Minimum Viable Product) para la gestión de precios de amarre en puertos deportivos y la consulta de ocupación (mock). Incluye:","archived":false,"fork":false,"pushed_at":"2025-02-10T18:29:03.000Z","size":2804,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-10T19:25:28.142Z","etag":null,"topics":["fastapi","mongodb","rest-api","streamlit"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rafavermar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-10T18:07:44.000Z","updated_at":"2025-02-10T19:00:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"24156421-f283-435b-a5bb-05f2499b4baa","html_url":"https://github.com/Rafavermar/MARINE_MVP","commit_stats":null,"previous_names":["rafavermar/marine-mvp"],"tags_count":null,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rafavermar%2FMARINE_MVP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rafavermar%2FMARINE_MVP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rafavermar%2FMARINE_MVP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rafavermar%2FMARINE_MVP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rafavermar","download_url":"https://codeload.github.com/Rafavermar/MARINE_MVP/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248017997,"owners_count":21034042,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fastapi","mongodb","rest-api","streamlit"],"created_at":"2025-02-15T04:28:04.021Z","updated_at":"2026-04-13T23:32:26.021Z","avatar_url":"https://github.com/Rafavermar.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Marine MVP: Marina Tariff \u0026 Occupancy Calculator\nEste repositorio contiene un MVP (Minimum Viable Product) para la gestión de precios de amarre en puertos deportivos y la consulta de ocupación (mock). Incluye:\n\n\n- Backend (FastAPI + MongoDB)\n- Frontend (Streamlit)\n- Scrapers (BeautifulSoup) para extraer tarifas de distintas webs (actualmente Puerto Benalmádena y Puerto de Marbella).\n\n## Contenido\n1. Requisitos\n2. Estructura del Proyecto\n3. Configuración Inicial\n4. Instrucciones de Ejecución\n5. Uso de la Aplicación\n6. Detalles de Scraping\n7. Notas sobre Certificados SSL\n8. Contribuir\n9. Licencia\n\n## Requisitos\n- Docker y Docker Compose instalados.\n- Opcionalmente, Python 3.9+ si deseas ejecutar entornos locales sin Docker.\n\n## Estructura del Proyecto\n\nmarine-mvp/\n\n├── .env                          # Variables de entorno (ej. MONGO_URI)\n\n├── docker-compose.yml            # Orquestación Docker (Mongo, backend, frontend)\n\n├── requirements.txt              # Dependencias Python (si ejecutas local)\n\n├── scraper/\n\n│   ├── benalmadena_scraper.py    # Lógica de scraping para Puerto Benalmádena\n\n│   ├── marbella_scraper.py       # Lógica de scraping para Puerto Marbella\n\n│   ├── base_scraper.py           # (opcional) Clase base si la hubiera\n\n│   └── run_scrapers.py           # Punto de entrada para ejecutar todos los scrapers\n\n├── backend/\n\n│   ├── main.py                   # FastAPI (endpoints: /calculate_price, /check_occupancy, etc.)\n\n│   ├── database.py               # Conexión a MongoDB\n\n│   ├── models.py                 # Modelos Pydantic (PriceQuery, etc.)\n\n│   └── ...\n\n├── frontend/\n\n│   └── app.py                    # Streamlit (UI Mooring Calculator, Reservations, etc.)\n\n├── certs/                        # Certificados SSL si los necesitas\n\n└── README.md                     \n\n## Principales Componentes\n- Scraper: Extrae datos de tarifas de Benalmádena y Marbella, los cuales se guardan en MongoDB.\n- Backend:\n  - FastAPI que expone endpoints REST:\n    -  POST /calculate_price\n    -  POST /check_occupancy\n  - Se conecta a MongoDB para guardar y leer datos scrapeados.\n- Frontend:\n  - Streamlit que provee una interfaz web:\n    - Cálculo de precios de amarre.\n    - Comparación entre puertos.\n    - Mock de disponibilidad (ocupación).\n    - Reserva (simulada) con formulario e imagen.\n\n\n\n## Instrucciones de Ejecución\n1. Clona este repositorio:\n\n```\ngit clone https://github.com/tu-usuario/marine-mvp.git\ncd marine-mvp\n```\n\n2. Levanta los contenedores con Docker Compose:\n\n```\ndocker-compose up -d\n```\n\nEsto:\n\n- Iniciará MongoDB.\n- Levantará el contenedor del Backend (FastAPI).\n- Levantará el contenedor del Frontend (Streamlit).\n- \n3. Comprueba que los contenedores estén en funcionamiento:\n\n```\ndocker-compose ps\n```\n4. Accede a la interfaz de Streamlit en tu navegador (por defecto, http://localhost:8501).\n\n\n## Uso de la Aplicación\n1. Mooring Calculator (pestaña principal):\n   - Selecciona puerto (Benalmádena o Marbella).\n   - Indica eslora, fechas de llegada y salida, si deseas electricidad/agua.\n   - Pulsa \"Calculate\" para ver el precio estimado.\n2. Compare Ports:\n   - Usa los mismos datos y compara con el otro puerto.\n3. Check Occupancy:\n   - Devuelve una tabla mock con puertos y fechas en la base de datos para ~30 días.\n4. Reservations:\n   - Permite simular una reserva, ingresar datos de embarcación y mostrar una imagen de la marina.\n\n## Detalles de Scraping\n   - **Benalmádena**: scraper/benalmadena_scraper.py parsea varias tablas (tablepress-17, tablepress-18, etc.) para tarifas diarias, exceso de medidas, etc.\n   - **Marbella**: scraper/marbella_scraper.py parsea tablas de temporada alta, baja, anual, etc.\n   - Cada vez que inicias el contenedor, se ejecutan los scrapers (ver run_all_scrapers()), se borran datos previos en db.pricing y se insertan los nuevos.\n\n## Notas sobre Certificados SSL\n   - El dominio de Marbella (puertodeportivo.marbella.es) puede presentar problemas de verificación SSL dentro del contenedor.\n   - Solución rápida (pero insegura): en marbella_scraper.py, usar requests.get(..., verify=False) e ignorar advertencias.\n   - Solución ideal: instalar el CA bundle o el certificado en certs/, copiarlo a /usr/local/share/ca-certificates y update-ca-certificates en el Dockerfile. Luego, se quita verify=False.\n\n## Contribuir\n   1. Fork este repositorio.\n   2. Crea una rama con tu feature o fix: git checkout -b feature/mi-mejora.\n   3. Realiza tus cambios y haz commits.\n   4. Envía un Pull Request detallando tus aportes.\n\n## Roadmap (Ideas)\n   - Añadir más puertos deportivos con sus scrapers.\n   - Mejorar la lógica de precios si las fechas abarcan cambio de temporada.\n   - Integrar un pequeño scheduler (APScheduer) para scraping diario.\n   - Autenticación y guardado de reservas reales.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafavermar%2Fmarine_mvp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafavermar%2Fmarine_mvp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafavermar%2Fmarine_mvp/lists"}