Scraper automático para extraer artículos de El Orden Mundial y enviarlos a Reader de Readwise via email, de modo que permita la integración con el sistema de feed/intake de información con mucha menos fricción y en un lugar centralizado.
- ✅ Extracción de contenido abierto completo
- ✅ Preview de contenido premium (requiere suscripción para contenido completo)
- ✅ Detección incremental con filtro temporal (
after) - ✅ Integración con Readwise via email
- ✅ Gestión de estado persistente
- ✅ Rate limiting y manejo de errores
- ✅ Modo dry-run para testing
- 🔄 Autenticación premium (en desarrollo)
# Clonar/descargar archivos del proyecto
cd eom-scraper
# Crear entorno virtual (recomendado)
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# Instalar dependencias
pip install -r requirements.txt
# Configurar variables de entorno
cp .env.example .env
nano .env # Editar credenciales
# Test
python main.py --test# Email para envío a Readwise
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=tu-email@gmail.com
SMTP_PASSWORD=tu-app-password # App Password de Gmail
FROM_EMAIL=tu-email@gmail.com
READWISE_EMAIL=tu-email@reader.readwise.io # Email de Readwise Reader
# Opcional: credenciales EOM para contenido premium
EOM_USERNAME=tu-usuario-eom
EOM_PASSWORD=tu-password-eom
EOM_ENABLE_PREMIUM=true- Habilitar autenticación de 2 factores
- Generar App Password específica para el scraper
- Usar el App Password en
SMTP_PASSWORD
- En Readwise Reader, ir a Settings → Email
- Copiar tu email único de importación
- Usarlo en
READWISE_EMAIL
python main.py --testpython main.py --test-emailpython main.pypython main.py --dry-runpython main.py --log-level DEBUG# Editar crontab
crontab -e
# Ejecutar cada 2 horas
0 */2 * * * cd /ruta/a/eom-scraper && /ruta/a/venv/bin/python main.py
# Ejecutar diariamente a las 9:00
0 9 * * * cd /ruta/a/eom-scraper && /ruta/a/venv/bin/python main.py- Abrir Task Scheduler
- Create Basic Task
- Configurar trigger (ej: daily)
- Action: Start Program
- Program:
python.exe - Arguments:
main.py - Start in: ruta al directorio del scraper
- Detección incremental: Usa
afterparameter para obtener solo artículos nuevos - Clasificación automática: Distingue entre contenido abierto y premium
- Procesamiento diferencial:
- Contenido abierto: artículo completo
- Contenido premium: preview + enlace
- Envío a Readwise: Emails HTML formateados para óptima lectura
- Gestión de estado: Tracking de artículos procesados para evitar duplicados
eom-scraper/
├── main.py # Script principal
├── config/
│ └── settings.py # Configuración
├── core/
│ ├── api_client.py # Cliente WordPress REST API
│ ├── content_processor.py # Procesamiento de contenido
│ └── auth.py # Autenticación (futuro)
├── storage/
│ └── state_manager.py # Gestión de estado
├── delivery/
│ └── email_sender.py # Envío de emails
└── utils/
└── helpers.py # Utilidades
- Extracción de contenido abierto
- Detección incremental con
after - Envío a Readwise via email
- Gestión de estado persistente
- Rate limiting y error handling
- Autenticación para contenido premium
- Scraping HTML para contenido protegido
- Dockerización
- Dashboard web
- Integración directa con Readwise API
- Filtros por categorías/tags
- Notificaciones de errores
- Métricas y monitoring
Los logs se guardan en:
eom_scraper.log: Log completo- Consola: Output en tiempo real
- Verificar App Password de Gmail
- Verificar que 2FA esté habilitado
- Probar con
--test
- Verificar email de Readwise Reader
- Verificar en spam
- Probar con
--test-email
- Normal si no hay contenido nuevo
- Verificar
eom_state.jsonpara timestamp - Usar
--log-level DEBUGpara más detalles
MIT License - Ver LICENSE file para detalles