Skip to content

Python script for periodically parsing VK groups and notify for interesting posts at Telegram

Notifications You must be signed in to change notification settings

rsherstnev/keywordsnotify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

keywordsnotify

Скрипт предназначен для поиска постов в группах Вконтакте, которые содержат определенные слова, и разработан с учетом того, что будет запускаться переодически по расписанию (например, с помощью планировщика задач).

Результаты предыдущих запусков скрипта сохраняются в БД 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/

Возможные улучшения скрипта

  • Возможно ускорить работу скрипта путем распараллеливания задач по нескольким потокам. Лучший вариант - по потоку на каждую группу.

About

Python script for periodically parsing VK groups and notify for interesting posts at Telegram

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages