artwist-polyakov/telegram-channel-parser
| Парсинг публичных Telegram-каналов через веб-превью t.me/s/. Посты, метрики, аналитика, дайджесты, конкурентный анализ. Cache-first подход для гигиены контекстного окна. дайджест каналов, telegram digest, анализ канала, шер-парад, telegram analytics, мониторинг каналов.
npx skills add https://github.com/artwist-polyakov/polyakov-claude-skills --skill telegram-channel-parser
Парсинг публичных Telegram-каналов через веб-превью (t.me/s/). Без API-ключей, без MTProto, zero config.
Перед любым запуском скриптов создай рабочую копию скилла в /home/claude/telegram-channel-parser и работай уже из неё:
bash scripts/prepare_runtime.sh
cd /home/claude/telegram-channel-parser
prepare_runtime.sh копирует скилл и, если есть config/.env, нормализует его через sed -i: некавыченные значения с пробелами или кириллицей оборачиваются в кавычки в рабочей копии.
Никаких токенов не требуется. Для дайджестов — скопировать .env.example:
cp config/.env.example config/.env
Без .env: скилл работает, но каналы нужно передавать явно через --channel / --channels.
С .env: дайджест AI-каналов готов из коробки. Пользователь может добавить свои категории.
Структура .env (категории дайджестов):
TG_CATEGORIES=ai,crypto # реестр доступных категорий
TG_DEFAULT_CATEGORY=ai # дефолтная при запросе "дайджест"
TG_CHANNELS_AI_LABEL="AI и технологии"
TG_CHANNELS_AI=countwithsasha,evilfreelancer,...
TG_CHANNELS_CRYPTO_LABEL="Криптовалюты"
TG_CHANNELS_CRYPTO=channel1,channel2
Алгоритм агента при запросе дайджеста:
config/.env (если есть)TG_CATEGORIES — получить список доступных категорийTG_CHANNELS_<ID> = каналы, TG_CHANNELS_<ID>_LABEL = название_LABELTG_DEFAULT_CATEGORY--channelsЕсли .env нет → спросить какие каналы парсить, предложить cp config/.env.example config/.env.
Приоритет: --channels явно > категория из .env > агент спрашивает.
Подробности: config/README.md.
bash scripts/fetch_posts.sh --channel countwithsasha --limit 50
Выведет последние 50 постов в TSV (id, date, views, reactions, fwd_from, fwd_link, text, media_url).
bash scripts/channel_info.sh --channel countwithsasha
bash scripts/search_posts.sh --channel countwithsasha --query "скилл"
bash scripts/top_posts.sh --channel countwithsasha --limit 50 --sort reactions
bash scripts/posting_schedule.sh --channel countwithsasha --limit 100
bash scripts/export_csv.sh --channel countwithsasha --limit 100 --csv cache/export.csv
# Явный список каналов
bash scripts/digest.sh --channels "countwithsasha,evilfreelancer,aostrikov_ai_agents" --period today
# Дефолтный набор (без --channels)
bash scripts/digest.sh --period today
Периоды: today, yesterday, week, N (последние N дней).
bash scripts/compare_channels.sh --channels "channel1,channel2,channel3" --limit 30
Таблица: подписчики, средние просмотры, частота публикаций, engagement.
При запросе дайджеста — отображай результаты как React-артифакт (лента карточек).
Алгоритм (4 шага):
digest_json.sh — он пишет JSON в файл (не stdout!) и возвращает путь: bash scripts/digest_json.sh --period today
# → prints: cache/digest_today.json
assets/digest-feed.tsx__DIGEST_DATA__ в шаблоне на содержимое JSON, отрендери как React-артифактВажно: скрипт пишет в файл, а не в stdout, чтобы обойти лимит буфера sandbox (~200KB). Для 30-дневного дайджеста 15 каналов JSON может быть 500KB+.
Посты автоматически сортируются по дате (новые сверху), перемешаны между каналами. Пользователь фильтрует по периоду и каналу через UI.
Общий паттерн вызова:
bash scripts/<script>.sh --channel <username> [--limit N] [--before <post_id>] [--csv path]
| 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" |
| 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.
Take artwist-polyakov/telegram-channel-parser from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.