Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rsherstnev/keywordsnotify

Python script for periodically parsing VK groups and notify for interesting posts at Telegram
https://github.com/rsherstnev/keywordsnotify

grabber telegram-bot-api vk-api vkontakte-api

Last synced: about 1 month ago
JSON representation

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

Awesome Lists containing this project

README

        

# 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/`

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