Привет, красавицы, как дела? Оставив мир искусственного интеллекта, сегодня я расскажу, как создал простого бота, который перечисляет основные новости, связанные с технологиями, из интернета и публикует их в 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 помогает вам создавать более эффективные приложения для ваших клиентов с гораздо большим удобством. Поймите как!

И что мы будем делать дальше, так это создавать трубопровод и приложение на этой платформе, то есть мы загрузим наш код. Я научу вас простому способу, используя github, и оставлю вам полный код.
После загрузки файлов на git и предполагая, что учетная запись heroku уже создана, мы создадим «новое приложение», выполнив следующие шаги:
На вкладке deploy мы подключим платформу к нашему github и найдем репозиторий проекта.
В настройках мы установим переменные окружения.
Наконец, мы вернемся на предыдущую вкладку и в конце страницы начнем развертывание. Если сборка завершилась успешно, приложение будет готово к использованию.
Теперь нам нужно включить планировщик задач для запуска нашего скрипта, мы сделаем это с помощью дополнений Heroku.
Давайте перейдем в меню ресурсов и в разделе Add Ons найдем «schedule», мы будем использовать Advanced Schedule.
Далее есть опция «бесплатно», выберите ее в соответствии с изображением.
Далее, давайте создадим наш первый триггер, присвоим имя нашей задаче и в command вставим команду «python scheduler.py».
В качестве следующего шага мы определим настройки нашей задачи, например, интервалы выполнения.
Да, мы закончили. Это так просто.
Вы можете тестировать, выполняя триггер вручную, но каждый день или в любое настроенное время триггер будет срабатывать, выполняя загруженный нами код, и в итоге мы получим еще одну классную автоматизированную задачу.
На сегодня это все, надеюсь, вам понравилась эта статья, и если вы хотите ознакомиться с ней полностью, не стесняйтесь следовать за мной: @thaisplicandoo.
Целую и до скорой встречи!