Быстрый в изучении - мощный в программировании
Скрипт ИНВЕСТОР на Python

Попробуйте себя в качестве инвестора имея в помощники мощный алгоритм советника на Python...

Все уроки по PyQt5

PyQt5 реализован как комплект Python-модулей. Он включает в себя около 620 классов и 6000 функций и методов...

Скрипт отправки SMS через Python

Была задача отправить SMS-ки большому списку номеров телефона с уточнением цены за всю рассылку "До" ее отправки...

Как подружить Slack и VK с помощью Python?

Как подружить Slack и VK с помощью Python?

Slack обладает прекрасным потенциалом расширения стандартных возможностей. Но, на практике возникают сложности с интеграцией некоторых соц. сетей в чаты.

Для того, чтобы подружить Вконтакте и Slack мы воспользуемся Python и API. Ниже будет рассматривать базовый рецепт того, как сделать так, чтобы Slack-бот мог получать данные по последним комментариям из постов на стенах сообществ или групп Вконтакте.

Детские батуты – прекрасное развлечение

За программированием не стоит забывать о наших детях. Им нужно уделять время и развлекаться вместе с ними. Батуты, игры, аттракционы и прочее - вот то, что нужно нашим детям. И мы, как родители, должны разделять с ними эти развлечения и положительные эмоции! Любите и радуйте своих детей!

Итак, вернемся к нашей задаче.

Slack API

Популярный мессенджер Slack имеет простой и удобный API. Он позволяет настроить легкое управление чат-ботами и осуществлять разные манипуляции с каналами. Мы разберем простейший способ создания чат-бота:

  1. Заходим на Slack.com (нужно зарегистрироваться, чтобы управлять вашей командой).
  2. Переходим в управление приложениями slack.com/apps и открываем «Configure».
  3. Открываем «Custom Integrations» и создаем нашего первого боту (нужно придумать имя, выбрать комнату, в которую он будет слать сообщения).
  4. Slack предоставит вам API token, используемый для авторизации вашего бота.

Slack-Bot.py

Первый этап завершен, теперь нужно написать бота. Чтобы программа работала понадобится установленный Python 3 с некоторыми дополнительными библиотеками, нужными для использования API. Установим slacker с VK_api:

$ pip install slacker
$ pip install vk_api

Теперь создадим базовый файл Slack-Bot.py (подойдет любой редактор кода), и приступим к написанию бота.

Импортируем необходимые библиотеки:

from slacker import Slacker
import vk_api

Авторизуемся в Slack по token:

slack = Slacker('Полученный ранее API token')

Авторизуемся в Вконтакте:

login, password = 'Login', 'pass'
    vk_session = vk_api.VkApi(login, password)
 
    try:
        vk_session.authorization()
    except vk_api.AuthorizationError as error_msg:
        print(error_msg)
        return
 
    vk = vk_session.get_api()

Далее сделаем так, чтобы наш бот получал информации со стены групп в VK:

man_id = str(-29534144) 
postidlist = vk.wall.get(owner_id=man_id, count=1, offset=0) 
a = str(postidlist['items'][0]['id']) 
 
response = vk.wall.getComments(owner_id=man_id, post_id=a, count=1, sort='desc', offset=0)

По дефолту мы будем получать ответ в виде массива, чтобы получить текст, необходимо выбрать нужные нам строки:

b = response['items'][0]['text']

Теперь полученный текст нужно отправить ботом в Slack (параметр #vk используется для обозначения комнаты, в которую будет отправляться сообщение ботом):

slack.chat.post_message('#vk', 'Новый комментарий: ' + b)

Теперь у нас имеется базовый функционал для получения комментариев и передачи их в комнаты чата Slack.

Вот исходный код функционирующего бота:

from slacker import Slacker
import vk_api
import time
 
slack = Slacker('Вставить token Slack bot')
 
def main():
    login, password = 'login', 'pass'
    vk_session = vk_api.VkApi(login, password)
 
    try:
        vk_session.authorization()
    except vk_api.AuthorizationError as error_msg:
        print(error_msg)
        return
 
    vk = vk_session.get_api()
 
    while True: 
        man_id = str(-29534144) 
        postidlist = vk.wall.get(owner_id=man_id, count=1, offset=0) 
        a = str(postidlist['items'][0]['id']) 
        time.sleep(5)
        ts = 10
        bts = 10
 
        while ts == bts: 
            response = vk.wall.getComments(owner_id=man_id, post_id=a, count=1, sort='desc', offset=0) 
            ts = str(response['items'][0]['date']) 
            time.sleep(5) 
            response = vk.wall.getComments(owner_id=man_id, post_id=a, count=1, sort='desc', offset=0)
            bts = str(response['items'][0]['date'])
            print('новых комментариев нет ' + ts + bts)
            time.sleep(5) 
 
        response = vk.wall.getComments(owner_id=man_id, post_id=a, count=1, sort='desc', offset=0)  
        b = response['items'][0]['text'] 
        slack.chat.post_message('#vk', 'Новый комментарий: ' + b) 
       
if __name__ == '__main__':
    main()
Комментариев: 2
  1. Привет.

    Столкнулся с множеством проблем с библиотекой vk для python и к сожалению автор видимо слишком занят чтобы поддерживать ее, вообщем сделал fork проекта, у уже внесено множество улучшений и исправлений, большая часть проекта покрыта тестами, добавлены полезные продакшн фичи, например, авто-разрешение конфликтов при входе с неизвестного места (когда деплоимся на aws или где-то не на домашнем лэптопе)

    Надеюсь кто-то так же найдет это полезным. Извиняюсь за внимание.

    Ссылка на проект: https://github.com/prawn-cake/vk-requests

  2. Здравствуйте. Можно глупый вопрос? Я написал небольшой скриптик, хеллоу ворлд бота. Точнее сказать, модифицировал ваш. Но пока что никак не могу разобраться как, собственно, запустить бота. Посоветуйте что прочесть или что погуглить, чтобы понять, как заставить скрипт посылать команды на сервер slack.

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)