Saltar a contenido

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 run o docker compose up y la API queda en el puerto 8000.

    Inicio rápido

  • Referencia de la API


    Cada endpoint, parámetro, campo de respuesta y error, con ejemplos reales.

    Referencia de la API

  • Despliegue en producción


    Contenedores reforzados, despliegues en varios servidores con reversión automática, proxy inverso y configuración de caché.

    Despliegue

  • Cómo funciona


    Capas, caché, agrupación de solicitudes, el actualizador del feed y los componentes nativos (Rust / C) que hacen el trabajo pesado.

    Funcionamiento interno

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.

curl https://tme.koval-dev.org/v1/body/durov
{
  "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.