Tech Pulse es un pipeline completo de automatización: scraping de 515 fuentes, resúmenes con IA, notificaciones Telegram, newsletter por email, tips de IT y herramientas IA. Pero para que funcione, necesitas configurar varias API keys. Cada una tiene su purpose y te explico cómo obtenerlas.
1. Por qué Tech Pulse (y no otra cosa)
| Herramienta | Qué hace | Limitación |
|---|---|---|
| Feedly | Lee RSS | No filtra por relevancia, no genera resúmenes IA |
| Google News | Noticias tech | No scraping directo, no personalizable |
| Herramientas manuales | Scraping a medida | Requieren mantenimiento constante |
| Tech Pulse | Scraping + IA + notificaciones + dashboard | Todo automatizado, 515 fuentes, 134 tests |
¿Por qué Python? Ecosistema de scraping (requests, beautifulsoup), IA (google-generativeai), flexibilidad para integrar todo en un solo pipeline.
¿Por qué Gemini? Gratis tier generoso, buena calidad en español, resúmenes naturales. Fallback a Ollama/Qwen local si falla.
¿Por qué GitHub Actions? CI/CD gratis, cron integrado, secrets seguros, despliegue automático a Surge.sh/Vercel.
2. Requisitos previos
| Requisito | Para qué | Cómo obtenerlo |
|---|---|---|
| Python 3.11+ | Lenguaje principal | python.org/downloads |
| Git | Clonar el repo | git-scm.com |
| API Key de Gemini (recomendado) | Resúmenes IA, tips, herramientas | Google AI Studio — explicado abajo |
| Token de Telegram (opcional) | Notificaciones | @BotFather — explicado abajo |
| API Key de Mailgun (opcional) | Newsletter email | mailgun.com — explicado abajo |
3. Obtener la API Key de Gemini
Qué es: Una clave que le da acceso a tu script a los modelos de IA de Google (Gemini). Se usa para generar resúmenes de noticias, tips de programación y herramientas IA.
Cómo obtenerla:
- Ve a aistudio.google.com/apikey
- Inicia sesión con tu cuenta de Google (la misma que usas para Gmail)
- Haz clic en “Create API Key”
- Selecciona un proyecto (o crea uno nuevo — da igual cuál)
- Copia la API key que empieza por
AIza... - Guarda esa key — la necesitarás en el paso 8
¿Es gratis? Sí, el tier gratuito permite 1500 requests/día. Tech Pulse hace ~100 requests/día, así que sobra.
¿Qué pasa si no la configuro? El sistema usa fallback: primero intenta Gemini, si falla usa una base de datos local de definiciones. Los tips y herramientas funcionan igual, pero con menos variedad.
4. Obtener el token de Telegram
Qué es: La “contraseña” de tu bot de Telegram. Se usa para enviar notificaciones de noticias.
Cómo obtenerlo:
- Abre Telegram (en el móvil o en el escritorio) y busca @BotFather
- Envía
/newbot(escribe/newboty dale a enviar) - BotFather te preguntará: “¿Cómo se llamará tu bot?” — Escribe un nombre descriptivo, ej: “Tech Pulse Bot”
- BotFather te preguntará: “¿Cuál será el username?” — Debe terminar en
bot. Ejemplo:techpulse_bot - BotFather te dará un token como
8580222159:AAE4e21gzeq6q.... Copia y guarda ese token inmediatamente - Si pierdes el token, puedes pedirlo de nuevo con
/mybots→ selecciona tu bot → “API Token”
¿Y el chat_id? Es el ID del canal o grupo donde quieres recibir notificaciones. Para obtenerlo:
Opción A (grpib):
- Añade tu bot al grupo de Telegram
- Envía un mensaje al grupo
- Abre
https://api.telegram.org/botTU_TOKEN/getUpdatesen el navegador - Busca
"chat":{"id":-1001234567890}— ese número es tu chat_id
Opción B (simple):
- Crea un canal privado en Telegram
- Añade tu bot como administrador
- Envía un mensaje al canal
- Usa el mismo método de arriba para obtener el chat_id
¿Por qué no funciona sin chat_id? Porque Telegram necesita saber dónde enviar el mensaje. Sin chat_id, el bot no tiene destino.
5. Obtener la API Key de Mailgun
Qué es: Un servicio de envío de emails transaccionales. Se usa para enviar la newsletter diaria con resúmenes de noticias.
Cómo obtenerla:
- Ve a signup.mailgun.com
- Crea una cuenta (gratis: 100 emails/día durante 30 días, luego $1/mes)
- En el dashboard, ve a Sending → API Keys
- Copia la API key (empieza por
key-...) - En Domains, verifica un dominio (o usa el dominio de prueba
sandbox...mailgun.org)
¿Es indispensable? No. Si no configuras Mailgun, el newsletter no se envía pero el resto funciona (dashboard, Telegram, tips).
¿Qué pasa si uso el dominio de prueba? Solo puedes enviar emails a direcciones que hayas verificado en Mailgun. Para envíos reales, necesitas un dominio propio.
6. Clonar y configurar
# 1. Clonar el repo
git clone https://github.com/jorbencas/test_githubActions.git
cd test_githubActions
# 2. Crear entorno virtual
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# .venv\Scripts\activate # Windows
# 3. Instalar dependencias
pip install -r requirements.txt
¿Qué instala? Todas las dependencias necesarias: requests, beautifulsoup4, google-generativeai, telethon, etc.
7. Configurar variables de entorno
Crea el archivo .env en la raíz del proyecto:
cat > .env << EOF
# Gemini API (recomendado — para resúmenes y tips)
GEMINI_API_KEY=AIzaSy...tu_api_key
# Telegram (opcional — para notificaciones)
TELEGRAM_BOT_TOKEN=8580222159:AAE4e21gzeq6q...
TELEGRAM_CHAT_ID=-1004332325883
# Mailgun (opcional — para newsletter email)
MAILGUN_API_KEY=key-...tu_api_key
MAILGUN_DOMAIN=tudominio.com
EMAIL_USER=tu@email.com
EOF
Por qué cada variable
| Variable | Para qué | Si no la pones |
|---|---|---|
GEMINI_API_KEY | Resúmenes IA, tips, herramientas | Fallback a DB local (funciona pero con menos variedad) |
TELEGRAM_BOT_TOKEN | Enviar notificaciones | Notificaciones Telegram deshabilitadas |
TELEGRAM_CHAT_ID | Destino de notificaciones | Notificaciones Telegram deshabilitadas |
MAILGUN_API_KEY | Enviar newsletter email | Email deshabilitado |
MAILGUN_DOMAIN | Dominio de envío | Email deshabilitado |
EMAIL_USER | Email destino | Email deshabilitado |
Dónde va el archivo
En la raíz de test_githubActions/:
test_githubActions/
├── .env ← AQUÍ
├── requirements.txt
├── scripts/
└── ...
8. Probar el scraping
# Scraping completo (todas las 515 fuentes — tarda ~30 min)
python -m scripts.scrapers.scrape_news --tier full
# Scraping ligero (solo quick sources, ~15 min)
python -m scripts.scrapers.scrape_news --tier light
# Scrapear herramientas de GitHub
python -m scripts.scrapers.scrape_tools
¿Qué genera? Archivos JSON en files/:
noticias_historico.json— Todas las noticias scrapeadasherramientas.json— Herramientas de GitHub
¿Cuánto tarda? El scraping completo tarda ~30 minutos. El ligero ~15 minutos. Es normal porque hay 515 fuentes que consultar.
¿Qué pasa si falla alguna fuente? El sistema tiene fallbacks: si una fuente falla, la salta y sigue con las demás. No se detiene por un error individual.
9. Generar el dashboard
# Generar solo el HTML del dashboard
python -m scripts.publishers.generate_weekly --dashboard-only
# Previsualizar
python -m http.server -d public
# Abrir http://localhost:8000 en el navegador
¿Qué genera? Un archivo public/index.html con el dashboard completo: noticias, vídeos, ranking GitHub, filtros combinables.
10. Probar notificaciones
# Telegram (sin enviar — dry-run)
python -m scripts.publishers.send_telegram --dry-run --max-items 3
# Email (sin enviar — dry-run)
python -m scripts.publishers.send_email --dry-run --max-items 5
¿Qué hace el dry-run? Muestra lo que enviaría sin enviar nada. Así puedes verificar que la configuración es correcta antes de enviar de verdad.
11. Generar tips y herramientas
# Ver categorías de tips disponibles
python scripts/tips_generator.py --list-categories
# Previsualizar tips
python scripts/tips_generator.py --dry-run
# Generar herramientas IA
python scripts/ai_tools_generator.py --dry-run
¿Qué son los tips? 283 conceptos de programación con preguntas de entrevista. Se generan con Gemini + Wikipedia + fallback local.
¿Qué son las herramientas IA? 150 categorías de herramientas de IA con auto-detección de GitHub, Product Hunt y HuggingFace.
12. Ejecutar tests
# Todos los tests (134 tests)
python -m pytest tests/ -v
# Tests específicos
python -m pytest tests/test_solutions_db.py -v
¿Por qué tests? Porque el pipeline tiene muchos scripts que se ejecutan en cadena. Si uno falla, el resto falla. Los tests detectan problemas antes de que lleguen a producción.
13. Uso en GitHub Actions (recomendado)
El proyecto está diseñado para ejecutarse automáticamente via GitHub Actions. Los workflows ya están configurados:
| Workflow | Frecuencia | Qué hace |
|---|---|---|
scrape_hourly.yml | Cada hora | Scraping de quick sources |
scrape_6h.yml | Cada 6 horas | Scraping de standard sources |
daily_tips.yml | Cada 3 horas | Generar tips de IT |
daily_ai_tools.yml | Cada 3 horas | Generar herramientas IA |
send_email.yml | Diario (09:00 UTC) | Enviar newsletter |
send_telegram.yml | Cada 30 min | Enviar noticias a Telegram |
Configurar GitHub Secrets
En tu fork del repo, ve a Settings → Secrets and variables → Actions y añade:
| Secret | Valor |
|---|---|
GEMINI_API_KEY | Tu API key de Gemini |
TELEGRAM_BOT_TOKEN | Token del bot |
TELEGRAM_CHAT_ID | ID del chat/grupo |
MAILGUN_API_KEY | API key de Mailgun |
MAILGUN_DOMAIN | Dominio de Mailgun |
EMAIL_USER | Email destino |
¿Por qué GitHub Secrets y no .env? Porque GitHub Actions no puede leer archivos .env. Los secrets se inyectan como variables de entorno durante la ejecución del workflow.
14. Verificación final
# Comprobar que el scraping funciona
ls -la files/noticias_historico.json
# Comprobar que el dashboard se genera
ls -la public/index.html
# Comprobar que los tests pasan
python -m pytest tests/ -v --tb=short
Troubleshooting
| Problema | Causa | Solución |
|---|---|---|
ModuleNotFoundError | Falta instalar dependencias | pip install -r requirements.txt con venv activado |
GEMINI_API_KEY not set | No configurada | Añadir al .env o configurar en GitHub Secrets |
Rate limit exceeded | Demasiadas peticiones | Esperar o reducir frecuencia de scraping |
Telegram send failed | Token o chat_id incorrecto | Verificar en .env o GitHub Secrets |
Connection refused (Mailgun) | API key incorrecta | Verificar en dashboard de Mailgun |
No module named 'bs4' | Falta beautifulsoup | pip install beautifulsoup4 |
Timeout | scraping tarda mucho | Normal en --tier full; usar --tier light para probar |
¿Quieres ver cómo funciona el ecosistema completo? Consulta:
