Как я создал бота для Twitter и запустил его на Heroku

Привет, красавицы, как дела? Оставив мир искусственного интеллекта, сегодня я расскажу, как создал простого бота, который перечисляет основные новости, связанные с технологиями, из интернета и публикует их в Twitter.
ThaisPosta, помимо каламбура с моим именем, те, кто меня знает, знают, что это обычное явление здесь, придумал намерение делиться каждый день списком полезных ссылок для новых и старых разработчиков. 
Прежде всего, стоит отметить, что проект выполняет свою работу, как и обещал, однако ему есть куда совершенствоваться, так что давайте начнем?


Чтобы иметь возможность создавать ботов для twitter, нам нужно создать аккаунт разработчика здесь: https://developer.twitter.com/en. 
Помимо создания аккаунта на портале разработчика, необходимо будет создать проект и дать более высокие права доступа к API через продукты, чтобы было проще разобраться, я оставлю ниже статью о том, как создать доступ и получить токены.

Twitter API: создание аккаунта разработчика и получение токенов | Автор Бруно Анастасио | Programmers Helping Programmers | Medium

Бруно Анастасио ・・・
Средний

Создав проект и имея на руках необходимые токены: consumer_key, consumer_key_secret, access_token и access_secret, приступим к разработке проекта.
Как обычно, наш проект будет на языке python, и нам понадобятся следующие библиотеки:

pip install tweepy
pip install requests
Войдите в полноэкранный режим Выход из полноэкранного режима

Tweepy — это библиотека, которая позволяет нам легко получить доступ к API Twitter и, как следует из названия, делать запросы. Еще одна библиотека, предлагаемая beautifulsoup4, предназначена для соскабливания веб-контента, который не предоставляет нам конечных точек, однако мы выберем простой вариант и оставим соскабливание веб-контента на потом.

Теперь мы создадим поиск статей, сначала я использовал dev.to и medium в качестве источников, оба имеют API, доступные извне, что облегчило поиск.

import random
import requests
TAGS_DEV = ['javascript', 'python', 'webdev', 'devops', 'react', 'vue',
            'typescript', 'github', 'css', 'tutorial', 'beginners', 'node']


def get_top_articles_devto():
    tags = random.sample(TAGS_DEV, k=3)
    list_articles = []

    for tag in tags:

        url = f'https://dev.to/api/articles?per_page=3&tag={tag}&top=2'
        articles = requests.get(url).json()

        for a in articles:
            obj_article = {
                'tag': tag,
                'title':  a['title'],
                'description': a['description'],
                'link': a['url']}

            list_articles.append(obj_article)

    return list_articles

Войдите в полноэкранный режим Выход из полноэкранного режима

Теперь мы продолжаем создавать аутентификацию с API twitter и функцию, которая позволит нам создавать посты, как показано в примере.

import os
import tweepy

def post_twitter():
    consumer_key = os.getenv('CONSUMER_KEY')
    consumer_secret = os.getenv('CONSUMER_SECRET')
    access_token = os.getenv('ACCESS_TOKEN')
    access_secret = os.getenv('ACCESS_SECRET')
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

    auth = tweepy.OAuthHandler(
        consumer_key=consumer_key,
        consumer_secret=consumer_secret)
    auth.set_access_token(access_token, access_secret)
    api = tweepy.API(auth)
    post_twitter_devto(api)

 def post_twitter_devto(api):
    message = '📚 ThaisPosta links do dia: n'

    body_message = []
    # Busca os artigos
    dev_to = get_top_articles_devto()
    b_new = []
    count = 0
    for i, dev in enumerate(dev_to):
        message_body = f'{dev.get("tag").upper()}: 👉 {dev.get("title")}nlink: {dev.get("link")}'

        # Como o twitter tem limite de caracteres é necessário verificar, se ultrapassar o tamanho exigido, vamos postar uma thread.
        if len(message) + len(''.join(body_message)) <= 247:
            body_message.append(message_body)
        else:
            b_new.append({count: body_message})
            count += 1
            body_message = [message_body]

    b_new.append({count: body_message})

    status = None
    thread = None
    for i, b in enumerate(b_new):
        if i == 0:
            # publica no twitter
            status = api.update_status(message + 'n'.join(b[i]))
        else:
            # verifica se é um post inicial, ou se é uma resposta, criando assim uma thread se necessário
            if thread is not None:
                _id = thread
            elif status._json['id']:
                _id = status._json['id']

            if _id is not None:
                # publica no twitter, usando como referencia o post inicial
                thread = api.update_status(status='n'.join(b[i]),
                                           in_reply_to_status_id=_id,
                                           auto_populate_reply_metadata=True)
                status = None
                thread = thread._json['id']

    return thread

Войдите в полноэкранный режим Выход из полноэкранного режима

Вот и все! Если вы успешно прошли этот путь, то теперь, когда мы запустим python scheduler.py, наши ссылки будут опубликованы в twitter.
Но, тайцы, если я хочу автоматизировать эту задачу, что я могу сделать?

Это изображение известно в мире разработчиков, но поскольку мой контент охватывает всех, и если «все» не знают, что такое Heroku, я нашел для вас очень хорошее определение.

Heroku: что это такое и как он помогает масштабируемой разработке

Heroku помогает вам создавать более эффективные приложения для ваших клиентов с гораздо большим удобством. Поймите как!

imaginedone.co.uk

И что мы будем делать дальше, так это создавать трубопровод и приложение на этой платформе, то есть мы загрузим наш код. Я научу вас простому способу, используя github, и оставлю вам полный код. 
После загрузки файлов на git и предполагая, что учетная запись heroku уже создана, мы создадим «новое приложение», выполнив следующие шаги:


На вкладке deploy мы подключим платформу к нашему github и найдем репозиторий проекта.

В настройках мы установим переменные окружения.


Наконец, мы вернемся на предыдущую вкладку и в конце страницы начнем развертывание. Если сборка завершилась успешно, приложение будет готово к использованию.
Теперь нам нужно включить планировщик задач для запуска нашего скрипта, мы сделаем это с помощью дополнений Heroku.
Давайте перейдем в меню ресурсов и в разделе Add Ons найдем «schedule», мы будем использовать Advanced Schedule.

Далее есть опция «бесплатно», выберите ее в соответствии с изображением.

Далее, давайте создадим наш первый триггер, присвоим имя нашей задаче и в command вставим команду «python scheduler.py».

В качестве следующего шага мы определим настройки нашей задачи, например, интервалы выполнения.

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

На сегодня это все, надеюсь, вам понравилась эта статья, и если вы хотите ознакомиться с ней полностью, не стесняйтесь следовать за мной: @thaisplicandoo.
Целую и до скорой встречи!

Оцените статью
devanswers.ru
Добавить комментарий