Скрипт предназначен для поиска постов в группах Вконтакте, которые содержат определенные слова, и разработан с учетом того, что будет запускаться переодически по расписанию (например, с помощью планировщика задач).
Результаты предыдущих запусков скрипта сохраняются в БД sqlite3. При первом запуске скрипта БД и нужные таблицы создадутся атоматически. SQL запросы для взаимодействия с БД параметризированы для увеличения производительности и защиты от union-based SQL инъекций. При каждом запуске скрипта осуществляется обработка 100 последних записей каждой группы с учетом уже сохраненных в БД данных, что означает что скрипт не проделывает лишнюю работу.
Если в результате работы скрипта были найдены интересные посты, они отправляются в диалог с ботом Telegram.
Так как Telegram заблокирован на территории России, для работы скрипта необходимо использовать прокси,
предпочтительным вариантом является развертывание службы Tor на тачке, на которой бует работать скрипт
(в Windows данная служба при неизмененной конфигурации создает SOCKS5 сокет на порту 9050 локалхоста).
Как поднять службу Tor и добавить её в автозапуск? Just google it. При этом перед запуском службы ее необходимо
сконфигурировать таким образом, чтобы выходные ноды из стран, в которых Telegram запрещен, игнорировались, например,
ExcludeExitNodes {ru},{ua},{by},{kz},{cn}
Взаимодействие с API VK осуществлялось методами пакета vk_api, вся ответственность за учетные данные за автором vk_api. В связи с открытостью исходного кода данного пакета, можете провести его независимый аудит.
Поиск осуществляется только по тексту обычных постов, поиск по комментариям к посту, по постам-опросникам и т.п. не осуществляется, но возможна модификация скрипта для расширения соответствующего функционала.
Выполнять из терминала, запущенного из под администратора (должен быть установлен python, pip и git):
git clone https://github.com/rsherstnev/keywordsnotify.git
cd keywordsnotify
python -m pip install --upgrade pip
python -m pip install pipenv
pipenv shell
pipenv sync
Дальнейший запуск скрипта:
keywordsnotify.py --login +79632286969 --password yourverysecurepassword --keywords-file ./keywords.txt --groups-file ./groups.txt --profile-id 322 --bot-token yoursecurebottoken --proxy socks5://127.0.0.1:9050
Опция | Обязательна ли | Описание |
---|---|---|
-l, --login | - | Логин учётной записи VK, из под которой будут производиться запросы к API VK |
-p, --password | - | Пароль учётной записи VK, из под которой будут производиться запросы к API VK |
-k, --keywords-file | + | Файл с ключевыми словами, которые будут искаться в постах групп Вконтакте |
-g, --groups-file | + | Файл с именами групп Вконтакте, в которых будет осуществлен поиск ключевых слов |
-i, --profile-id | - | ID учетной записи Telegram, которой будет отсылаться сообщение с найденными группами, свой ID можно узнать у бота @userinfobot |
-t, --bot-token | - | Токен Telegram бота |
--proxy | - | Адрес прокси сервера в формате socks5://127.0.0.1:9050 |
Опции --login
и --password
не являются обязательными, если вы не хотите светить учетными данными в истории
командного интерпретатора, их можно выпустить, тогда скрипт запросит учетные данные интерактивно.
Значения опций --profile-id
и --bot-token
так же могут быть запрошены интерактивно.
Значение опций --keywords-file
и --groups-file
могут представлять как абсолютный путь к файлу, так и относительный.
Если в вашей стране не блокируют Telegram, опция --proxy
не обязательна.
Ключевые слова должны быть записаны в файле каждый с новой строки, пример:
безопасность
защита
информация
При этом регистр символов не важен, так как поиск осуществляется регистронезависимо.
Имена групп Вконтакте должны быть записаны в файле каждый с новой строки, пример:
ck_sfu
onlyorly
ctsv_sibsu
При этом именем группы является все то, что написано в URL в адресной строке браузера справа от https://vk.com/
- Возможно ускорить работу скрипта путем распараллеливания задач по нескольким потокам. Лучший вариант - по потоку на каждую группу.