Быстрый в изучении - мощный в программировании
Скрипт ИНВЕСТОР на 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()
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru yandex.ru
Комментариев: 1
  1. Привет.

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

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

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

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

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

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

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

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