Инструмент для поиска и фильтрации групп/каналов Telegram по ключевым словам и количеству участников.
- Поиск групп/каналов Telegram по ключевым словам
- Генерация комбинаций город+слово для комплексного регионального поиска
- Автоматическое удаление дублирующихся поисковых запросов
- Фильтрация результатов по минимальному количеству участников
- Возобновление прерванных операций (отслеживание прогресса)
- Ограничение скорости и защита от флуда
- Раздельные процессы поиска и фильтрации для лучшей производительности
-
Установите зависимости:
npm install telegram
-
Создайте учетные данные Telegram API:
- Перейдите на https://my.telegram.org/apps
- Создайте новое приложение
- Получите ваши
API_IDиAPI_HASH
-
Настройте окружение: Создайте файл
.env:API_ID=ваш_api_id API_HASH=ваш_api_hash PHONE_NUMBER=+79001234567 TG_2FA=ваш_пароль_2fa # Опционально, только если включена 2FA
-
Подготовьте поисковые запросы: Создайте файл
queries.txtс одним поисковым термином на строку:криптовалюта трейдинг биткоин эфириум программирование работа москва фриланс
Шаг 1: Поиск групп
Вариант A: Обычный поиск
node parse.jsВариант B: Поиск по комбинациям городов
node parse.js --citiesДругие опции:
node parse.js --reset-progress # Сбросить прогресс поиска
node parse.js --help # Показать справкуЭто будет:
- Автоматически удалять дубли из
queries.txt,cities.txtиwords.txt - Искать группы/каналы по ключевым словам из
queries.txt(обычный режим) или по сгенерированным комбинациям (режим городов) - Сохранять результаты с количеством участников в
groups.json - Отслеживать прогресс в
processed_queries.json - Продолжать с места остановки при прерывании
Режим городов (--cities):
- Генерирует все комбинации из
cities.txtиwords.txt - Создает файл
queries_cities.txtс комбинациями типа "Москва работа", "Москва фриланс" и т.д. - Использует эти комбинации для поиска вместо
queries.txt
Шаг 2: Извлечение ID групп (опционально)
node extract_ids.js # Извлечь ID с фильтрацией по участникам
node extract_ids.js --with-usernames # Извлечь ID с username
node extract_ids.js --no-filter # Извлечь все ID без фильтрации
node extract_ids.js --help # Показать справкуЭто будет:
- Читать группы из
groups.json - Фильтровать по минимальному количеству участников (из конфига)
- Извлекать только ID групп (по одному на строку)
- Сохранять в
group_ids.txt
Отредактируйте config.json для настройки параметров:
{
"search": {
"queriesFile": "queries.txt",
"limitPerQuery": 20,
"saveFile": "groups.json",
"processedQueriesFile": "processed_queries.json",
"twoLevelParsing": {
"enabled": true,
"firstLevel": {
"limitPerQuery": 100,
"maxWords": 30
},
"secondLevel": {
"limitPerQuery": 20,
"useAllWords": true
}
}
},
"extract": {
"inputFile": "groups.json",
"outputFile": "group_ids.txt",
"includeUsernames": false,
"minParticipants": 1000,
"filterByParticipants": true
},
"throttle": {
"betweenQueriesMs": 3000,
"betweenRequestsMs": 1200,
"maxRetries": 3,
"retryBackoffMultiplier": 2,
"floodWaitCapSec": 900
}
}Поиск (search):
queriesFile- файл с ключевыми словами для поискаlimitPerQuery- максимальное количество результатов на запросsaveFile- файл для сохранения всех найденных группprocessedQueriesFile- файл для отслеживания обработанных запросовtwoLevelParsing- настройки двухуровневого парсинга:enabled- включить двухуровневый парсингfirstLevel.limitPerQuery- лимит результатов для первого уровня (высокий)firstLevel.maxWords- количество первых слов для первого уровняsecondLevel.limitPerQuery- лимит результатов для второго уровня (обычный)secondLevel.useAllWords- использовать все слова для второго уровня
Извлечение ID (extract):
inputFile- входной файл с группами (по умолчанию groups.json)outputFile- выходной файл с ID (по умолчанию group_ids.txt)includeUsernames- добавлять ли @username после IDminParticipants- минимальное количество участников для фильтрацииfilterByParticipants- включить ли фильтрацию по участникам
Ограничения (throttle):
betweenQueriesMs- задержка между поисковыми запросами (мс)betweenRequestsMs- задержка между API запросами (мс)maxRetries- максимальное количество повторов при ошибкеretryBackoffMultiplier- множитель увеличения задержки при повторахfloodWaitCapSec- максимальное время ожидания при FLOOD_WAIT (сек)
Новая функция для более эффективного сбора данных в режиме городов:
Принцип работы:
- Первый уровень: Использует высокий лимит (100) для первых N слов (30)
- Второй уровень: Использует обычный лимит (20) для всех слов
Преимущества:
- Больше результатов для популярных запросов
- Экономия времени на менее популярных запросах
- Гибкая настройка через конфигурацию
Пример:
- 28 городов × 30 первых слов = 840 запросов с лимитом 100
- 28 городов × 129 всех слов = 3612 запросов с лимитом 20
- Итого: 4452 запроса вместо 3612 в обычном режиме
Тестирование:
node test_two_level.js # Проверить настройки двухуровневого парсингаСовременный веб-интерфейс для удобного управления:
Установка:
npm install # Установить зависимости
npm run server # Запустить API сервер (порт 3001)
npm run dev # Запустить React приложение (порт 3000)Доступ: Откройте http://localhost:3000 в браузере
Возможности:
- 🔍 Управление парсингом - Запуск/остановка с логами в реальном времени
- 📋 Извлечение ID - Извлечение ID групп с настройками фильтрации
- 📁 Управление файлами - Редактирование queries, cities, words файлов
- ⚙️ Конфигурация - Управление всеми настройками включая двухуровневый парсинг
- 📊 Статистика - Статистика в реальном времени с отслеживанием прогресса
Продакшен:
npm run build # Сборка для продакшена
npm run preview # Предпросмотр сборкиAPI Endpoints:
POST /api/parse- Запуск обычного парсингаPOST /api/parse-cities- Запуск парсинга городовPOST /api/extract- Извлечение ID с опциямиGET /api/files/:filename- Получить содержимое файлаPUT /api/files/:filename- Сохранить содержимое файлаGET /api/config- Получить конфигурациюPUT /api/config- Сохранить конфигурациюGET /api/stats- Получить статистикуws://localhost:3001/ws- Логи в реальном времени через WebSocket
node parse.js --reset-progress # Сбросить прогресс поискаГруппы сохраняются в формате JSON:
[
{
"id": "123456789",
"title": "Название группы",
"username": "username_группы",
"type": "supergroup",
"access_hash": "значение_хеша",
"participants_count": 1500
}
]group- обычная группаsupergroup- супергруппаchannel- канал
Основные скрипты:
parse.js- Основной скрипт поискаextract_ids.js- Скрипт извлечения ID с фильтрациейtest_two_level.js- Утилита тестирования двухуровневого парсинга
Конфигурация:
config.json- Основная конфигурация.env- Переменные окружения (API ключи)
Файлы данных:
queries.txt- Ключевые слова для поиска (обычный режим)cities.txt- Список городов (для режима --cities)words.txt- Список слов (для режима --cities)queries_cities.txt- Сгенерированные комбинации город+слово
Выходные файлы:
groups.json- Все найденные группы с количеством участниковgroup_ids.txt- Извлеченные ID групп (только ID)processed_queries.json- Прогресс поискаsession.json- Сессия Telegram
Веб-интерфейс:
server.js- Express API серверsrc/- Исходный код React приложенияindex.html- HTML шаблонvite.config.js- Конфигурация Vitepackage.json- Зависимости и скрипты
-
Ошибка "Password is empty"
- Добавьте пароль 2FA в файл
.env:TG_2FA=ваш_пароль - Или введите его при запросе скрипта
- Добавьте пароль 2FA в файл
-
Ошибки FLOOD_WAIT
- Скрипт автоматически обрабатывает их и ждет нужное время
- При необходимости увеличьте задержки в
config.json
-
Сессия истекла
- Удалите файл
session.jsonи запустите скрипт заново - Пройдите авторизацию повторно
- Удалите файл
-
Группы не найдены
- Проверьте поисковые термины в
queries.txt - Попробуйте более общие или популярные ключевые слова
- Убедитесь, что термины написаны правильно
- Проверьте поисковые термины в
-
Ошибка "Account has 2FA enabled"
- У вас включена двухфакторная аутентификация
- Добавьте пароль 2FA в
.envили введите при запросе
-
Медленная работа
- Это нормально из-за ограничений Telegram API
- Не уменьшайте задержки слишком сильно, чтобы избежать блокировки
- Используйте прогресс-файлы для возобновления работы
-
Для лучших результатов поиска:
- Используйте разнообразные ключевые слова
- Включайте синонимы и вариации написания
- Добавляйте как русские, так и английские термины
- Не беспокойтесь о дублях в
queries.txt- они автоматически удаляются
-
Для стабильной работы:
- Не запускайте несколько экземпляров одновременно
- Регулярно проверяйте логи на наличие ошибок
- Делайте резервные копии результатов
-
Для оптимизации:
- Сначала запустите поиск с небольшим количеством запросов
- Настройте параметры фильтрации под ваши нужды
- Используйте разные минимальные значения участников для разных целей
# queries.txt
криптовалюта
биткоин
ethereum
трейдинг
блокчейн
DeFi
NFT
# config.json - увеличиваем минимум участников
"minParticipants": 5000Обычный режим:
# queries.txt
работа москва
вакансии
фриланс
удаленная работа
программист
дизайнер
# config.json - уменьшаем минимум участников
"minParticipants": 500Режим городов (рекомендуется):
# cities.txt
Москва
Санкт-Петербург
Казань
Новосибирск
# words.txt
работа
вакансии
фриланс
программист
дизайнер
# Запуск
node parse.js --cities# queries.txt
программирование
python
javascript
курсы
обучение
IT
# config.json
"minParticipants": 1000