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_token

Hallazgos

  • 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.