TelegramMe¶
TelegramMe превращает публичное веб-превью любого Telegram-канала
(https://t.me/s/<channel>) в аккуратный типизированный JSON API: профили
каналов, посты с текстовыми сущностями, медиа, опросы, реакции, ответы,
пересылки и inline-кнопки, курсорная пагинация, превью каналов и ранжированная
лента из нескольких каналов.
Не нужны ни аккаунт Telegram, ни токен бота, ни сессия MTProto: доступны только публичные каналы, ровно так, как их видит браузер.
-
Запуск за минуту
Один
docker runилиdocker compose up— и API работает на порту 8000. -
Справочник API
Каждый эндпоинт, параметр, поле ответа и ошибка — с реальными примерами.
-
Развёртывание в продакшене
Защищённые контейнеры, развёртывание на нескольких серверах с автоматическим откатом, обратный прокси и настройка кэширования.
-
Как это работает
Слои, кэширование, объединение запросов, фоновое обновление ленты и нативные компоненты (Rust / C), которые берут на себя тяжёлую работу.
Попробуйте¶
Публичное демо работает по адресу https://tme.koval-dev.org: попробуйте канал на стартовой странице, изучите API в Swagger UI или читайте эту документацию на /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}}
}
Эндпоинты в двух словах¶
| Метод | Путь | Что возвращает |
|---|---|---|
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 и применимых к вам законов, включая законодательство о защите данных.