artwist-polyakov/polyakov-claude-skills/telegram-channel-parser
Claude Code and agent skill by artwist-polyakov/polyakov-claude-skills
- community
Checking that the SKILL.md file is still in the repository.
Парсинг публичных Telegram-каналов через веб-превью t.me/s/. Посты, метрики, аналитика, дайджесты, конкурентный анализ. Cache-first подход для гигиены контекстного окна. Triggers: telegram канал, telegram channel, парсинг телеграм, дайджест каналов, telegram digest, анализ канала, шер-парад, telegram analytics, мониторинг каналов.
Install
npx vskill@latest install artwist-polyakov/polyakov-claude-skills/telegram-channel-parserSKILL.md
telegram-channel-parser
Парсинг публичных Telegram-каналов через веб-превью (t.me/s/). Без API-ключей, без MTProto, zero config.
Перед запуском
Перед любым запуском скриптов создай рабочую копию скилла в /home/claude/telegram-channel-parser и работай уже из неё:
prepare_runtime.sh копирует скилл и, если есть config/.env, нормализует его через sed -i: некавыченные значения с пробелами или кириллицей оборачиваются в кавычки в рабочей копии.
Config
Никаких токенов не требуется. Для дайджестов — скопировать .env.example:
Без `.env`: скилл работает, но каналы нужно передавать явно через --channel / --channels.
С `.env`: дайджест AI-каналов готов из коробки. Пользователь может добавить свои категории.
Структура `.env` (категории дайджестов):
Алгоритм агента при запросе дайджеста:
- Прочитать
config/.env(если есть) - Распарсить
TG_CATEGORIES— получить список доступных категорий - Для каждой категории:
TG_CHANNELS_<ID>= каналы,TG_CHANNELS_<ID>_LABEL= название - Определить нужную категорию:
- Пользователь назвал тему → сопоставить с
_LABEL - Не уточнил → использовать
TG_DEFAULT_CATEGORY - Несколько категорий подходят → предложить выбор
- Передать каналы нужной категории через
--channels
Если `.env` нет → спросить какие каналы парсить, предложить cp config/.env.example config/.env.
Приоритет: --channels явно > категория из .env > агент спрашивает.
Подробности: config/README.md.
Philosophy
- Always fresh — данные запрашиваются в реальном времени при каждом вызове. Никогда не пропустишь свежий пост.
- Context window hygiene — stdout ограничен 30 строками. Полные данные в TSV/CSV. LLM работает с компактным форматом, а не с сырым HTML.
- Rate limit — между запросами к t.me пауза 1.5с. Не жадничаем.
- Чистый POSIX sh — никаких зависимостей кроме curl, sed, awk, grep.
В JSON-дайджесте и сравнении каналов последняя страница используется и для постов, и для сведений о канале, без повторной загрузки. При каждом запуске она загружается заново; страницы истории также запрашиваются заново по мере необходимости.
Workflow
Парсинг одного канала
- Получи посты:
``bash bash scripts/fetch_posts.sh --channel countwithsasha --limit 50 `` Выведет последние 50 постов в TSV (id, date, views, reactions, fwd_from, fwd_link, text, media_url).
- Инфо о канале:
``bash bash scripts/channel_info.sh --channel countwithsasha ``
- Поиск по постам:
``bash bash scripts/search_posts.sh --channel countwithsasha --query "скилл" ``
- Топ постов (шер-парад):
``bash bash scripts/top_posts.sh --channel countwithsasha --limit 50 --sort reactions ``
- Расписание публикаций:
``bash bash scripts/posting_schedule.sh --channel countwithsasha --limit 100 ``
- Экспорт:
``bash bash scripts/export_csv.sh --channel countwithsasha --limit 100 --csv cache/export.csv ``
Дайджест по нескольким каналам
Периоды: today, yesterday, week, N (последние N дней).
Сравнение каналов
Таблица: подписчики, средние просмотры, частота публикаций, engagement.
React-артифакт для дайджеста
При запросе дайджеста — отображай результаты как React-артифакт (лента карточек).
Алгоритм (4 шага):
- Запусти
digest_json.sh— он пишет JSON в файл (не stdout!) и возвращает путь:
``bash bash scripts/digest_json.sh --period today # → prints: cache/digest_today.json ``
- Прочитай JSON-файл по выведенному пути
- Прочитай шаблон
assets/digest-feed.tsx - Замени
__DIGEST_DATA__в шаблоне на содержимое JSON, отрендери как React-артифакт
Важно: скрипт пишет в файл, а не в stdout, чтобы обойти лимит буфера sandbox (~200KB). Для 30-дневного дайджеста 15 каналов JSON может быть 500KB+.
Посты автоматически сортируются по дате (новые сверху), перемешаны между каналами. Пользователь фильтрует по периоду и каналу через UI.
Scripts
Общий паттерн вызова:
| Script | Description | Special params | ||||
|---|---|---|---|---|---|---|
fetch_posts.sh | Посты канала → TSV | --limit, --before, --after-date YYYY-MM-DD | ||||
channel_info.sh | Название, описание, подписчики | — | ||||
search_posts.sh | Полнотекстовый поиск | --query "text" | ||||
top_posts.sh | Ранжирование постов | `--sort views\ | reactions, --limit` | |||
posting_schedule.sh | Анализ времени публикаций | --limit | ||||
export_csv.sh | Экспорт в CSV | --csv path | ||||
digest.sh | Дайджест нескольких каналов | --channels "a,b,c", `--period today\ | yesterday\ | week\ | N` | |
digest_json.sh | Дайджест → JSON файл (для React-артифакта) | --channels "a,b,c", `--period today\ | yesterday\ | week\ | N` | |
compare_channels.sh | Сравнительная таблица | --channels "a,b,c", --limit N (положительное целое) |
Общие параметры
| Param | Required | Default | Description | |
|---|---|---|---|---|
--channel | да* | — | Username канала (без @) | |
--channels | нет | из .env | Несколько каналов через запятую | |
--limit | нет | 20 | Сколько постов загрузить | |
--before | нет | — | ID поста для пагинации | |
--after-date | нет | — | Не загружать посты старше даты (YYYY-MM-DD) | |
--csv | нет | — | Путь для экспорта |
*--channel для одного канала, --channels для мультиканальных команд.
Ввод канала
Скилл принимает канал в любом формате:
countwithsasha— просто username@countwithsasha— с собакойhttps://t.me/countwithsasha— прямая ссылкаhttps://t.me/s/countwithsasha— ссылка на веб-превьюt.me/countwithsasha?before=500— с параметрами
Всё автоматически нормализуется до голого username.
Ограничения
- Только публичные каналы (у которых есть t.me/s/ превью)
- Некоторые посты Telegram не отдаёт через веб-превью. Если вместо текста приходит предложение открыть Telegram, поле текста в TSV/JSON содержит
[Текст недоступен в веб-превью Telegram: https://t.me/<channel>/<id>]. Это пометка скилла, а не текст автора: сообщи о пропуске и дай ссылку, не пересказывай такой пост. Медиа без подписи остаётся с пустым текстом, если Telegram не пометил его как неподдерживаемое. - Счётчик пересылок (shares) недоступен — t.me/s/ его не отдаёт, только MTProto API
- Зато парсится откуда переслан пост (fwd_from + ссылка на оригинал)
- Реакции парсятся суммарно (общее количество по всем эмодзи)
- Пагинация: ~20 постов на страницу, для 100 постов = 5 запросов
- Rate limit: 1.5с между запросами к t.me
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugins/telegram-channel-parser/skills/telegram-channel-parser/SKILL.md
Popularity
- Repository stars
- 168
- Repository forks
- 38
- 7-day trend score
- 26
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 8 Jul 2026, 3 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/artwist-polyakov/polyakov-claude-skills/telegram-channel-parser)