Oi gente linda, tudo beleza com vocês? Saindo um pouco do mundo de IA, hoje vou explicar como eu criei um bot simples, que lista as principais noticias, referentes à tecnologia, da internet e posta no Twitter.
O ThaisPosta, além de vir de um trocadilho com meu nome, quem me conhece sabe que isso é comum por aqui, surgiu na intenção de compartilhar todos os dias uma lista de links úteis para novos e antigos desenvolvedores.
Antes de mais nada, vale ressaltar que o projeto faz sua função conforme prometido, contudo, tem muito espaço para ser aprimorado, então vamos começar?
Para conseguirmos criar bots para o twitter, precisamos criar uma conta de desenvolvedor aqui: https://developer.twitter.com/en.
Além de criar a conta no portal do desenvolvedor, será necessário criar o projeto e dar permissões mais elevadas para as API's através de products, para facilitar o entendimento, vou deixar aqui embaixo um artigo sobre como criar os acessos e obter os tokens.
API do Twitter: criando a conta de desenvolvedor e obtendo os tokens | by Bruno Anastacio | Programadores Ajudando Programadores | Medium
Bruno Anastacio ・ ・
Medium
Após criado o projeto e tendo em mãos os tokens necessários: consumer_key, consumer_key_secret, access_token e access_secret, vamos iniciar o desenvolvimento do projeto.
Como sempre, nosso projeto será em python e vamos precisar das seguintes bibliotecas:
pip install tweepy
pip install requests
Tweepy é uma biblioteca que nos permite acessar facilmente a API do Twitter e requests, como o nome já diz, para fazermos nossas requisições. Outra sugestão de biblioteca é a beautifulsoup4, para rasparmos conteúdos da web que não nos fornece endpoints, contudo, vamos optar pelo simples e deixarmos o web scraping para mais tarde.
Criaremos agora a busca dos artigos, a principio usei o dev.to e o medium como fontes, ambos possuem API's disponíveis externamente, o que facilitou a minha busca.
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
Seguimos agora criando a autenticação com a API do twitter e a função que nos permitirá criar as postagens, conforme o exemplo.
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
Pronto! Se chegou até aqui com sucesso, agora ao rodarmos python scheduler.py, nossos links serão publicados no twitter.
Mas Thais, se eu quiser automatizar essa tarefa, o que eu faço?
Essa imagem é famosa no mundo dev, mas como meu conteúdo abrange todo mundo e se "todo mundo" não sabe o que é o Heroku, encontrei uma definição muito boa para vocês.
E o que faremos a seguir, é criarmos um pipeline e um aplicativo nessa plataforma, ou seja, vamos subir nosso código. Vou ensinar uma forma simples, usando o github, já aproveito e deixo com vocês o código completo.
Após subir os arquivos para o git e supondo que a conta do heroku já esteja criada, vamos criar um "new app", com os seguintes passos:
Na aba deploy, vamos conectar a plataforma ao nosso github e buscar pelo repositório do projeto.
Já em settings, vamos configurar nossas variáveis de ambiente.
Por fim, voltaremos na aba anterior e no fim da página iremos dar start no deploy. Se o build foi finalizado com sucesso, o aplicativo já estará pronto para ser usado.
Agora precisamos incluir um agendador de tarefas para rodar nosso script, faremos isso com a ajuda dos complementos do Heroku.
Vamos para o menu de recursos e em Add Ons, vamos procurar por 'schedule', usaremos o Advanced Schedule.
Avançando, há uma opção “free”, selecione-a conforme a imagem.
Em seguida, vamos criar nosso primeiro gatilho, iremos atribuir um nome para nossa tarefa e em command inserir o comando "python scheduler.py".
Como próximo passo, vamos definir as configurações da nossa tarefa, como os intervalos de execução.
Sim, acabamos. Simples assim.
Você pode testar executando a trigger de forma manual, mas todos os dias ou em todo horário configurado, o gatilho será disparado rodando o código que subimos, e por fim desfrutaremos de mais uma tarefa legal e automatizada.
Por hoje é só pessoALL, espero que tenham gostado desse artigo e se quiserem conferir na íntegra, fiquem a vontade para me seguir: @thaisplicandoo.
Beijos e até breve!
Top comments (2)
Nice post!
Tip: you do not need to request elevated access on the Twitter API - you can do all of this with Essential access (which is free and the easiest option). Instead of using
tweepy.api.update_status
which uses the legacy v1.1 API, you can usetweepy.client.create_tweet
which uses the new modern API v2! This API is better supported for the future, so I recommend that you look at this alternative.Thanks for writing a nice post about the Twitter API!
Wonderful Andy, as I said, it has a huge potential to improve, I will do what you suggested and by God this API is wonderful, thank you very much!