Instalación de Tech Pulse: Dashboard de Noticias Tech con IA

Instalación de Tech Pulse: Dashboard de Noticias Tech con IA

Guía completa para instalar y configurar Tech Pulse: scraping de 515 fuentes, resúmenes con Gemini, notificaciones Telegram, newsletter Mailgun, tips de IT y herramientas IA.

FECHA:
ACTUALIZADO:
AUTOR:Jorge Beneyto Castelló
LECTURA:9 MINUTOS DE LECTURA

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)

HerramientaQué haceLimitación
FeedlyLee RSSNo filtra por relevancia, no genera resúmenes IA
Google NewsNoticias techNo scraping directo, no personalizable
Herramientas manualesScraping a medidaRequieren mantenimiento constante
Tech PulseScraping + IA + notificaciones + dashboardTodo 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

RequisitoPara quéCómo obtenerlo
Python 3.11+Lenguaje principalpython.org/downloads
GitClonar el repogit-scm.com
API Key de Gemini (recomendado)Resúmenes IA, tips, herramientasGoogle AI Studio — explicado abajo
Token de Telegram (opcional)Notificaciones@BotFather — explicado abajo
API Key de Mailgun (opcional)Newsletter emailmailgun.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:

  1. Ve a aistudio.google.com/apikey
  2. Inicia sesión con tu cuenta de Google (la misma que usas para Gmail)
  3. Haz clic en “Create API Key”
  4. Selecciona un proyecto (o crea uno nuevo — da igual cuál)
  5. Copia la API key que empieza por AIza...
  6. 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:

  1. Abre Telegram (en el móvil o en el escritorio) y busca @BotFather
  2. Envía /newbot (escribe /newbot y dale a enviar)
  3. BotFather te preguntará: “¿Cómo se llamará tu bot?” — Escribe un nombre descriptivo, ej: “Tech Pulse Bot”
  4. BotFather te preguntará: “¿Cuál será el username?” — Debe terminar en bot. Ejemplo: techpulse_bot
  5. BotFather te dará un token como 8580222159:AAE4e21gzeq6q.... Copia y guarda ese token inmediatamente
  6. 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):

  1. Añade tu bot al grupo de Telegram
  2. Envía un mensaje al grupo
  3. Abre https://api.telegram.org/botTU_TOKEN/getUpdates en el navegador
  4. Busca "chat":{"id":-1001234567890} — ese número es tu chat_id

Opción B (simple):

  1. Crea un canal privado en Telegram
  2. Añade tu bot como administrador
  3. Envía un mensaje al canal
  4. 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:

  1. Ve a signup.mailgun.com
  2. Crea una cuenta (gratis: 100 emails/día durante 30 días, luego $1/mes)
  3. En el dashboard, ve a Sending → API Keys
  4. Copia la API key (empieza por key-...)
  5. 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

VariablePara quéSi no la pones
GEMINI_API_KEYResúmenes IA, tips, herramientasFallback a DB local (funciona pero con menos variedad)
TELEGRAM_BOT_TOKENEnviar notificacionesNotificaciones Telegram deshabilitadas
TELEGRAM_CHAT_IDDestino de notificacionesNotificaciones Telegram deshabilitadas
MAILGUN_API_KEYEnviar newsletter emailEmail deshabilitado
MAILGUN_DOMAINDominio de envíoEmail deshabilitado
EMAIL_USEREmail destinoEmail 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 scrapeadas
  • herramientas.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:

WorkflowFrecuenciaQué hace
scrape_hourly.ymlCada horaScraping de quick sources
scrape_6h.ymlCada 6 horasScraping de standard sources
daily_tips.ymlCada 3 horasGenerar tips de IT
daily_ai_tools.ymlCada 3 horasGenerar herramientas IA
send_email.ymlDiario (09:00 UTC)Enviar newsletter
send_telegram.ymlCada 30 minEnviar noticias a Telegram

Configurar GitHub Secrets

En tu fork del repo, ve a Settings → Secrets and variables → Actions y añade:

SecretValor
GEMINI_API_KEYTu API key de Gemini
TELEGRAM_BOT_TOKENToken del bot
TELEGRAM_CHAT_IDID del chat/grupo
MAILGUN_API_KEYAPI key de Mailgun
MAILGUN_DOMAINDominio de Mailgun
EMAIL_USEREmail 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

ProblemaCausaSolución
ModuleNotFoundErrorFalta instalar dependenciaspip install -r requirements.txt con venv activado
GEMINI_API_KEY not setNo configuradaAñadir al .env o configurar en GitHub Secrets
Rate limit exceededDemasiadas peticionesEsperar o reducir frecuencia de scraping
Telegram send failedToken o chat_id incorrectoVerificar en .env o GitHub Secrets
Connection refused (Mailgun)API key incorrectaVerificar en dashboard de Mailgun
No module named 'bs4'Falta beautifulsouppip install beautifulsoup4
Timeoutscraping tarda muchoNormal en --tier full; usar --tier light para probar

¿Quieres ver cómo funciona el ecosistema completo? Consulta:

COMPARTIR:
COMENTARIOS:

📋 Contenido