BookinglyTech News
Infraestructura

Leer contenido de Xiaohongshu y Douyin desde servidores: el reto técnico

Un desarrollador explica por qué los agentes de IA no pueden leer estos links y qué trucos de HTTP y caché son necesarios para extraer la información real.

2 min de lecturaDev.to0 vistas

Pegar un enlace de Xiaohongshu, Douyin o TikTok en un agente de IA suele resultar en un fallo silencioso. El sistema intenta hacer un fetch de la URL, recibe un shell de descarga de la app o una pared de login, y devuelve que no hay contenido. No es un error del modelo, sino una limitación estructural: el contenido real (video, imágenes y texto quemado en las mismas) no está en el HTML que devuelve el servidor inicial.

El problema del User Agent y la sesión

El desarrollador Jack Che, autor de LinkDigest, detalla que solicitar una nota de Xiaohongshu con un User Agent (UA) móvil devuelve 202 KB de código basura, mientras que un UA de escritorio devuelve 85 KB con el contenido real. Ambas respuestas tienen estado HTTP 200, lo que confunde a cualquier parser genérico. Además, una petición fría sin sesión previa es rechazada. La solución técnica es replicar el comportamiento del navegador: hacer un primer request a la página de exploración para obtener las cookies de sesión (acw_tc, abRequestId) y utilizarlas en la petición siguiente.

Otro punto crítico es la limitación de IP. Douyin bloquea las peticiones anónimas con CAPTCHAs o errores 403, exigiendo cookies de sesión iniciada. YouTube, por su parte, no bloquea a la laptop del desarrollador, pero sí a las rangos de IP de centros de datos como EC2 o Lambda. Esto hace que soluciones que funcionan localmente fallen en producción sin que ningún ajuste de configuración pueda corregirlo.

La trampa de la caché

El error más insidioso descrito no está en la extracción, sino en el manejo de fallos. Un incidente anterior mostró cómo un límite de tasa del proveedor de visión causaba que las imágenes se procesaran como vacías. El sistema devolvía un resultado bien formateado pero vacío (images: 0, ocr: 0) y lo cacheaba con una TTL de 30 días. Al ser más barato servir desde caché, el error perpetuó durante semanas aunque el problema original se hubiera corregido.

La lección operativa es doble: los resultados parciales o degradados deben marcarse explícitamente para distinguirlos de un post genuinamente corto, y las entradas de caché con datos incompletos deben tener una TTL muy corta (una hora, por ejemplo) para evitar servir información obsoleta o vacía de forma indefinida.

LinkDigest se presenta como una solución en la nube que resuelve esto mediante un servidor MCP y una API REST, convirtiendo los enlaces en Markdown o JSON legible por LLMs. Sin embargo, también admite sus limitaciones: Bilibili devuelve HTTP 412 a direcciones de datacenter y Facebook requiere sesión iniciada. Para quien construya pipelines de datos similares, la conclusión es clara: el manejo de errores y la gestión de caché son tan críticos como el scraping en sí.