Перейти к содержанию

TelegramMe

TelegramMe превращает публичное веб-превью любого Telegram-канала (https://t.me/s/<channel>) в аккуратный типизированный JSON API: профили каналов, посты с текстовыми сущностями, медиа, опросы, реакции, ответы, пересылки и inline-кнопки, курсорная пагинация, превью каналов и ранжированная лента из нескольких каналов.

Не нужны ни аккаунт Telegram, ни токен бота, ни сессия MTProto: доступны только публичные каналы, ровно так, как их видит браузер.

  • Запуск за минуту


    Один docker run или docker compose up — и API работает на порту 8000.

    Быстрый старт

  • Справочник API


    Каждый эндпоинт, параметр, поле ответа и ошибка — с реальными примерами.

    Справочник API

  • Развёртывание в продакшене


    Защищённые контейнеры, развёртывание на нескольких серверах с автоматическим откатом, обратный прокси и настройка кэширования.

    Развёртывание

  • Как это работает


    Слои, кэширование, объединение запросов, фоновое обновление ленты и нативные компоненты (Rust / C), которые берут на себя тяжёлую работу.

    Внутреннее устройство

Попробуйте

Публичное демо работает по адресу https://tme.koval-dev.org: попробуйте канал на стартовой странице, изучите API в Swagger UI или читайте эту документацию на /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}}
}

Эндпоинты в двух словах

Метод Путь Что возвращает
GET /v1/body/{channel} Профиль канала, последние посты (или посты вокруг ?position=), курсоры пагинации
GET /v1/more/{channel}/{direction}/{position} Более старые (before) или более новые (after) посты относительно заданного
GET /v1/post/{channel}/{id} Один пост
GET /v1/preview/{channel} Краткая сводка о канале со страницы t.me/<channel>
POST /v1/previews До 100 превью за раз
POST /v1/feed Посты до 100 каналов, ранжированные по вовлечённости и свежести (по умолчанию выключено)
GET /healthz Проверка живости (liveness probe)

Что внутри

  • FastAPI + Pydantic v2 — HTTP-слой и строгие модели ответов.
  • wreq (Rust: tokio, BoringSSL) — весь трафик к t.me: один HTTP/2-клиент с пулом соединений вне GIL, у которого TLS, HTTP/2 и заголовки совпадают с одним браузером (HTTP-клиент); pyreqwest остался, но в продакшене не используется.
  • telegram-me-native (Rust, часть этого проекта) — разбор HTML (html5ever) и ранжирование ленты.
  • granian (Rust) — HTTP-сервер, uvloop (C) — цикл событий.
  • Кэш внутри процесса на Rust (moka, zstd) в каждом воркере перед Redis / Valkey (необязательно, с hiredis, C), общим для всех воркеров и серверов.

Измеренные цифры — на странице Производительность.

Лицензия и данные

telegram-me распространяется по лицензии Apache-2.0. Это независимый проект, не связанный с Telegram. Он читает публичные страницы t.me: посты, медиа и сведения о каналах, которые он возвращает, принадлежат их авторам и не подпадают под лицензию. Если вы запускаете свой экземпляр, вы отвечаете за соблюдение условий использования Telegram и применимых к вам законов, включая законодательство о защите данных.