add abstraction ob platform and article + vinted
" Signed-off-by: Omar Sánchez Pizarro <omar.sanchez@pistacero.net>
This commit is contained in:
115
README.md
115
README.md
@@ -1,13 +1,15 @@
|
||||
|
||||
# Wallabicher 🛎️
|
||||
**Automatiza tus búsquedas en Wallapop y recibe notificaciones instantáneas en Telegram cuando aparezcan nuevos artículos!**
|
||||
Wallabicher monitoriza Wallapop según tus parámetros personalizados, analiza novedades y te avisa en tiempo real a tu canal o chat de Telegram.
|
||||
**Automatiza tus búsquedas en marketplaces (Wallapop, Vinted, etc.) y recibe notificaciones instantáneas en Telegram cuando aparezcan nuevos artículos!**
|
||||
Wallabicher monitoriza múltiples plataformas según tus parámetros personalizados, analiza novedades y te avisa en tiempo real a tu canal o chat de Telegram.
|
||||
|
||||
## Índice
|
||||
- [Instalación](#instalación-)
|
||||
- [Configuración](#configuración-)
|
||||
- [Uso](#uso-)
|
||||
- [Nuevas Funcionalidades](#nuevas-funcionalidades-)
|
||||
- [Arquitectura Multi-Plataforma](#arquitectura-multi-plataforma-)
|
||||
- [Añadir Nuevas Plataformas](#añadir-nuevas-plataformas-)
|
||||
|
||||
## Instalación 🔧
|
||||
|
||||
@@ -30,6 +32,7 @@
|
||||
### Parámetros:
|
||||
| Parámetro | Descripción | Ejemplo | Obligatorio |
|
||||
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|-------------------|
|
||||
| `platform` | Plataforma a monitorizar: `wallapop`, `vinted`, etc. (por defecto: `wallapop`) | `"wallapop"` | No |
|
||||
| `search_query` | Término de búsqueda principal; solo se mostrarán artículos con este texto en el título. | `"laptop"` | **Sí** |
|
||||
| `min_price` | Precio mínimo del artículo. | `100` | **Sí** |
|
||||
| `max_price` | Precio máximo del artículo. | `500` | **Sí** |
|
||||
@@ -77,10 +80,118 @@
|
||||
```json
|
||||
{
|
||||
"name": "Nintendo 64",
|
||||
"platform": "wallapop",
|
||||
"search_query": "nintendo 64",
|
||||
"thread_id": 6
|
||||
}
|
||||
```
|
||||
|
||||
## Arquitectura Multi-Plataforma 🏗️
|
||||
|
||||
Wallabicher ahora soporta múltiples plataformas de marketplace mediante una arquitectura desacoplada y extensible:
|
||||
|
||||
### Plataformas Soportadas
|
||||
|
||||
- ✅ **Wallapop** - Totalmente funcional
|
||||
- ✅ **Vinted** - Implementado (ver nota sobre limitaciones)
|
||||
- 🚧 **Buyee** - Por implementar
|
||||
- 🚧 **Tu plataforma** - ¡Fácil de añadir!
|
||||
|
||||
### Características de la Arquitectura
|
||||
|
||||
- **Desacoplada**: La lógica de filtrado es común para todas las plataformas
|
||||
- **Extensible**: Añade nuevas plataformas sin modificar el código existente
|
||||
- **Modular**: Cada plataforma implementa solo su lógica específica
|
||||
- **Factory Pattern**: Instanciación dinámica de plataformas
|
||||
|
||||
### Estructura del Proyecto
|
||||
|
||||
```
|
||||
wallamonitor/
|
||||
├── platforms/ # Implementaciones de plataformas
|
||||
│ ├── base_platform.py # Clase abstracta base
|
||||
│ ├── platform_factory.py # Factory para crear plataformas
|
||||
│ ├── wallapop_platform.py # Implementación de Wallapop
|
||||
│ ├── vinted_platform_template.py # Plantilla para Vinted
|
||||
│ └── README.md # Documentación de plataformas
|
||||
├── models/ # Modelos de datos genéricos
|
||||
│ └── article.py # Modelo Article (común a todas las plataformas)
|
||||
├── managers/ # Gestores de lógica de negocio
|
||||
│ ├── worker.py # Worker con filtros comunes
|
||||
│ ├── queue_manager.py # Gestión de cola de notificaciones
|
||||
│ └── telegram_manager.py # Gestión de Telegram
|
||||
└── datalayer/ # Capa de datos
|
||||
├── item_monitor.py # Configuración de monitoreo
|
||||
└── general_monitor.py # Configuración global
|
||||
```
|
||||
|
||||
## Añadir Nuevas Plataformas 🔧
|
||||
|
||||
Para añadir una nueva plataforma de marketplace:
|
||||
|
||||
1. **Crea tu clase de plataforma** heredando de `BasePlatform`:
|
||||
```python
|
||||
from platforms.base_platform import BasePlatform
|
||||
from models.article import Article
|
||||
|
||||
class MiPlataformaPlatform(BasePlatform):
|
||||
def get_platform_name(self):
|
||||
return "mi_plataforma"
|
||||
|
||||
def create_url(self):
|
||||
# Construir URL de búsqueda
|
||||
pass
|
||||
|
||||
def fetch_articles(self):
|
||||
# Obtener artículos
|
||||
pass
|
||||
|
||||
def parse_response(self, data):
|
||||
# Parsear respuesta a objetos Article
|
||||
pass
|
||||
```
|
||||
|
||||
2. **Registra la plataforma** en `platform_factory.py`:
|
||||
```python
|
||||
from platforms.mi_plataforma_platform import MiPlataformaPlatform
|
||||
|
||||
_platforms = {
|
||||
'wallapop': WallapopPlatform,
|
||||
'mi_plataforma': MiPlataformaPlatform,
|
||||
}
|
||||
```
|
||||
|
||||
3. **Configura workers.json** con tu nueva plataforma:
|
||||
```json
|
||||
{
|
||||
"name": "Mi búsqueda",
|
||||
"platform": "mi_plataforma",
|
||||
"search_query": "gameboy",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Consulta `platforms/README.md` y `platforms/vinted_platform_template.py` para más detalles y ejemplos completos.
|
||||
|
||||
### Uso de Vinted
|
||||
|
||||
Vinted está implementado y funcional, pero puede experimentar bloqueos debido a protecciones anti-bot:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Gameboy Vinted",
|
||||
"platform": "vinted",
|
||||
"country": "es",
|
||||
"search_query": "gameboy",
|
||||
"min_price": 15,
|
||||
"max_price": 120,
|
||||
"check_every": 180
|
||||
}
|
||||
```
|
||||
|
||||
**Países soportados**: `es`, `fr`, `de`, `it`, `pl`, `cz`, `lt`, `uk`, `us`, `nl`, `be`, `at`
|
||||
|
||||
**Importante**: Usa `check_every` de 120-300 segundos para evitar bloqueos. Ver `VINTED_NOTES.md` para más detalles y alternativas.
|
||||
|
||||
## Uso 🚀
|
||||
|
||||
|
||||
Reference in New Issue
Block a user