Создаём Slack бота для отслеживания вашего бренда в Twitter

Разработка /
Разработка: Создаём Slack бота для отслеживания вашего бренда в Twitter
Сегодня мы рассмотрим как отслеживать упоминания нашего домена в Twitter и постить об этом в канал Slack. Для этого отлично подойдут модули slacker и twython. Также мы используем configparser и logging в нашем проекте.

Настройки проекта

Мы будем использовать slacker и twython, поэтому установите их с помощью pip install или выполните команду pip install -r requirements.txt (после создания virtual env).

Вам понадобится токены от Twitter API и от Slack.

С помощью configparser мы прочитаем эти токены из конфигурационного файла. Внимание: это только шаблон конфига, настоящий мы добавили в игнор-лист, чтобы защитить эти секретные данные.

В случае со Slack вы должны сначала создать бота и добавить его в ваш канал.

Разработка

Полный код проекта находится здесь. Ниже я разберу его по шагам:

— импортируем настройки и токены:

import configparser
import logging

from slacker import Slacker
from twython import TwythonStreamer

config = configparser.ConfigParser()
config.read('config.ini')

CONSUMER_KEY = config['Twitter']['cs_key']
CONSUMER_SECRET = config['Twitter']['cs_secret']
ACCESS_TOKEN = config['Twitter']['acc_token']
ACCESS_SECRET = config['Twitter']['acc_secret']
SLACK_TOKEN = config['Slack']["token"]

— Зададим несколько констант. Помните, что CHANNEL должен содержать знак #, а домен для отслеживания должен быть задан как кортеж. Сообщение составлено так, чтобы можно было быстро перейти к твиту и понять кто его запостил:

CHANNEL = '#pybites-mentions'
DOMAIN = ('pybit', 'es')
MSG = '''A new mention of {domain}:

{user} (name: {name} / followers {followers}) tweeted:
{tweet_text}

Link to tweet: https://twitter.com/{user}/status/{tweet_id}
'''

— Создадим объект Slacker:

slack = Slacker(SLACK_TOKEN)

— настроим логгирование для возможной отладки в будущем:

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='bot.log')

— Метод создания сообщения в канале Slack:

def create_post(data):
    tweet_text = data['text']
    tweet_id = data['id_str']
    user = data['user']['screen_name']
    name = data['user']['name']
    followers = data['user']['followers_count']
    return MSG.format(domain='.'.join(DOMAIN),
                    user=user,
                    name=name,
                    followers=followers,
                    tweet_text=tweet_text,
                    tweet_id=tweet_id)

— Очень круто, что у нас есть Streaming API. TwythonStreamer позволяет очень легко начать мониторить Twitter: всего 6 строк кода в документации и 10 здесь, так как мы добавили обработку исключений, логгирование и постинг в Slack:

class MyStreamer(TwythonStreamer):
    ''' https://twython.readthedocs.io/en/latest/usage/streaming_api.html '''

    def on_success(self, data):
        post = create_post(data)
        logging.debug(post)
        try:
            slack.chat.post_message(CHANNEL, post, as_user=True)
        except Exception as exc:
            logging.error('cannot post to channel: {}'.format(exc))

    def on_error(self, status_code, data):
        print('An error occurred: {}, exiting'.format(status_code))
        self.disconnect()

— Приступим к Streamer. Внимание: pybit.es (одним словом) не работает, поэтому мы должны обрабатывать stream.statuses.filter 'pybit es', который работает как логическое И (подробнее об этом здесь):

if __name__ == "__main__":

    stream = MyStreamer(CONSUMER_KEY, CONSUMER_SECRET,
                        ACCESS_TOKEN, ACCESS_SECRET)

    # https://dev.twitter.com/streaming/overview/request-parameters#track
    stream.statuses.filter(track=' '.join(DOMAIN))

Деплой

Я запускаю этот скрипт на своём сервере. Так как я хочу, чтобы он работал круглосуточно, я написал командный сценарий, который оживляет скрипт при его остановке (Об этом я писал в предыдущей статье).

Результат

При любом упоминании нашего домена, мы получаем уведомление об этом:

Разработка: Создаём Slack бота для отслеживания вашего бренда в Twitter

По материалам «How to Write a Simple Slack Bot to Monitor Your Brand on Twitter»
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.