TelegramMe¶
TelegramMe convierte la vista previa web pública de cualquier canal de Telegram
(https://t.me/s/<channel>) en una API JSON limpia y tipada: perfiles de
canales, publicaciones con entidades de texto, multimedia, encuestas,
reacciones, respuestas, reenvíos y botones inline, paginación por cursor,
vistas previas de canales y un feed de varios canales ordenado por relevancia.
No hace falta una cuenta de Telegram, un token de bot ni una sesión MTProto: solo se puede acceder a los canales públicos, exactamente como los ve un navegador.
-
En marcha en un minuto
Un
docker runodocker compose upy la API queda en el puerto 8000. -
Referencia de la API
Cada endpoint, parámetro, campo de respuesta y error, con ejemplos reales.
-
Despliegue en producción
Contenedores reforzados, despliegues en varios servidores con reversión automática, proxy inverso y configuración de caché.
-
Cómo funciona
Capas, caché, agrupación de solicitudes, el actualizador del feed y los componentes nativos (Rust / C) que hacen el trabajo pesado.
Pruébalo¶
Hay una demo pública en https://tme.koval-dev.org: prueba un canal en su página de inicio, explora la API en Swagger UI o lee esta documentación en /docs.
{
"channel": {
"username": "durov",
"title": {"string": "Pavel Durov", "html": "Pavel Durov"},
"description": {"string": "Founder of Telegram.", "html": "Founder of Telegram."},
"avatar": "https://cdn4.telesco.pe/file/…",
"counters": {"subscribers": "10.3M", "photos": "102", "videos": "47", "files": null, "links": "200"},
"labels": ["verified"]
},
"content": {"posts": [ … 20 posts … ]},
"meta": {"offset": {"before": 531, "after": null}}
}
Endpoints de un vistazo¶
| Método | Ruta | Qué devuelve |
|---|---|---|
GET |
/v1/body/{channel} |
Perfil del canal, últimas publicaciones (o las publicaciones alrededor de ?position=), cursores de paginación |
GET |
/v1/more/{channel}/{direction}/{position} |
Publicaciones más antiguas (before) o más recientes (after) que una publicación dada |
GET |
/v1/post/{channel}/{id} |
Una publicación |
GET |
/v1/preview/{channel} |
Resumen breve del canal desde t.me/<channel> |
POST |
/v1/previews |
Hasta 100 vistas previas a la vez |
POST |
/v1/feed |
Publicaciones de hasta 100 canales, ordenadas por interacción y actualidad (desactivado por defecto) |
GET |
/healthz |
Sonda de disponibilidad (liveness) |
Qué hay dentro¶
- FastAPI + Pydantic v2 para la capa HTTP y modelos de respuesta estrictos.
- wreq (Rust: tokio, BoringSSL) para todo el tráfico hacia t.me: un único cliente HTTP/2 con pool de conexiones fuera del GIL, cuyos TLS, HTTP/2 y cabeceras coinciden con un navegador (Cliente HTTP); pyreqwest se mantiene, pero no se usa en producción.
- telegram-me-native (Rust, de este proyecto) para el análisis de HTML (html5ever) y la clasificación del feed.
- granian (Rust) como servidor HTTP, con uvloop (C) como bucle de eventos.
- Una caché dentro del proceso en Rust (moka, zstd) por worker, delante de Redis / Valkey (opcional, con hiredis, C), compartido por todos los workers y servidores.
Consulta Rendimiento para ver cifras medidas.
Licencia y datos¶
telegram-me se distribuye bajo la licencia Apache-2.0. Es un proyecto independiente, sin relación con Telegram. Lee páginas públicas de t.me: las publicaciones, los archivos multimedia y los datos de los canales que devuelve pertenecen a sus autores y no están cubiertos por la licencia. Si ejecutas una instancia, eres responsable de cumplir los términos de servicio de Telegram y las leyes que te sean aplicables, incluida la normativa de protección de datos.