X/Twitter vía RSSHub local (post-nitter)
Fecha: 2026-08-27 Contexto: Nitter/XCancel murieron (cease & desist de X Corp, ago-2026). Proyecto: Surtidito
Decisión
Timelines de X se sirven con RSSHub self-hosted en Docker local, autenticado con TWITTER_AUTH_TOKEN de una cuenta secundaria (librospirata).
Comandos
docker run -d --name rsshub-surtido --restart unless-stopped -p 1200:1200 \
-e NODE_ENV=production -e CACHE_TYPE=memory \
-e TWITTER_AUTH_TOKEN="<auth_token>" \
diygod/rsshub:latest
# renovar token: login manual en x.com → F12 → Cookies → auth_tokenHallazgos
- Login user/password/email por API: MUERTO en RSSHub (comentado en master, X da 403). Solo TWITTER_AUTH_TOKEN (cookie) o OAuth de app.
- Twitter /keyword (búsqueda): 404 con cuentas nuevas (SearchTimeline restringido).
- /twitter/trends: requiere OAuth de app (pago) — descartado.
- /twitter/home: funciona — es el feed personal de la cuenta logueada.
- X bloquea teléfonos ya usados / cuentas nuevas en el primer login desde dispositivo desconocido (muro “try using a different method to sign up”).
- RSSHub versiones 2026-02-06 y anteriores sí tenían login user/pass pero X lo bloqueó por API; la vía cookie (latest) es la única estable.
Estructura en el repo
- feed.py: RSSHUB_URL (default http://localhost:1200) → fallback RSS del medio.
- x_login.py: intento de login automatizado (quedó como referencia).
- .env.local: TWITTER_AUTH_TOKEN, TWITTER_USER/PASSWORD/EMAIL/PHONE.
Pendiente
- Sección “qué está pasando en X”: home timeline de la cuenta (seguir a Ruzzarin + medios) o transcripción de lives vía ingest.py.