🤖 Construindo um BOT para o Tabnews - part 1

BOT's podem ser incriveis e também extremamente chatos, então use esse conteudo com sabedoria.

✨ Introdução

Diferente de outros lugares o Tabnews foi contruindo como API First, facilitando assim a criações de BOT's e interações automatizadas. Ao final desse post vamos ter contruido um simples BOT para fazer publicações.

Para esse exemplo utilizaremos Python e a biblioteca Requests, no entanto com esses conceitos você pode contruir em qualquer outra linguagem que tenha um Cliente HTTP.

💻 Show me the code

  • Instalar o Requests
  • Obter um token de Sessão
  • Publicar o Conteúdo

Instalar o Requests

No terminal iremos digitar o seguinte comando:

pip install requests

Após isso iremos criar um arquivo main.py e em seguida iremos importar a biblioteca e definir uma variavel com a URL base da API do tabnews:

import requests

BASE_URL = 'https://www.tabnews.com.br/api/v1'

Obter um token de Sessão

Agora vamos obter um Token de sessão para que consigamos fazer nossa publicação. Iremos fazer uma requisição do tipo POST no endpoint /sessions

token_payload = {
    'email': 'SEU E-MAIL',
    'password': 'SUA SENHA',
}

response = requests.post(url=f'{BASE_URL}/sessions', data=token_payload).json()

session_token = response['token']
  • Começamos definindo o token_payload que será enviado no corpo da requisição, nele passaremos nosso Email e Senha

    • Email e Senha são informações extremamentes sensiveis, estou fazendo dessa forma apenas para exemplificar, o ideal seria usar variaveis de ambiente.

  • Em seguida vamos fazer uma requisição do tipo POST com requests.post(...) e passaremos no corpo da requisição a nossa url e nosso token_payload e retonaremos a resposta para response pegando o json retornando com o .json()

    • O retorno sera algo semelhante a:
    {
        'created_at': '2022-06-30T18:56:37.207Z',
        'expires_at': '2022-07-30T18:56:37.207Z',
        'id': '845e839b-9d17-40d6-2022-a32120aa5d8b',
        'token': '1bb6e98fabdf18a14d7b2ce97f2ee8877fea536c55c6bdf6d178bbb08e46869110da77f884d0a85b72ba098a2bdfca8c',
        'updated_at': '2022-06-30T18:56:37.207Z'
     }
    
  • desse retorno pegaremos apenas o conteudo do token e amazenaremos na variavel session_token com session_token = response['token']

Publicar o Conteúdo

Depois de obtermos um session_token, podemos fazer uma publicação, Iremos fazer uma requisição do tipo POST no endpoint /contents

post_payload = {
    'body': 'O CONTEUDO DO SEU POST',
    'source_url': 'www.SUAFONTE.com',
    'title': 'O TITULO DO SEU POST'
    'status': 'published',
    
}

cookies = {
    'session_id': session_token
}

response = requests.post(url=f"{BASE_URL}/contents",data=post_payload,
                          cookies=cookies).json()
  • De forma semelhante ao passo anterior iremos passar um payload, dessa vez sera nossa publicação. Então no post_payload iremos passar body, source_url,title é status, lembrando que status precisa ser igual a published

  • Dessa vez precisamos enviar também cookies, nesse caso definiremos cookies com a chave session_id e a ela atribuiremos o session_token que pegamos anteriormente.

  • Em seguida vamos fazer uma requisição do tipo POST com requests.post(...) e passaremos no corpo da requisição a nossa url nosso post_payload e agora também os cookies, e retonaremos a resposta para response pegando o json retornando com o .json()

    • O retorno sera algo semelhante a:
    {
     'body': 'O CONTEUDO DO SEU POST',
     'created_at': '2022-06-29T19:05:00.939Z',
     'deleted_at': None,
     'id': '110bc17b-5957-494d-8529-e1b70a0e856d',
     'owner_id': 'acdde5e4-874c-45a3-8bf7-1c73bcdb5671',
     'parent_id': None,
     'parent_slug': None,
     'parent_title': None,
     'parent_username': None,
     'published_at': '2022-06-29T19:05:00.938Z',
     'slug': 'bot-teste',
     'source_url': 'www.SUAFONTE.com',
     'status': 'published',
     'title': 'O TITULO DO SEU POST',
     'updated_at': '2022-06-29T19:05:00.939Z',
     'username': 'VOCE'
     }
    

✅ Pronto, você acaba de fazer o seu primeiro post de maneira automatizada 🎉!!

🤙 Considerações finais

Você pode encontrar esse código na intrega aqui

Também pode ver um exemplo do BOT que eu fiz para postar o Treding do Github Aqui, ele é um exemplo de consumir um API e postar o conteudo dessa API, ele tem uma politaca de Retry para as requisições no caso de falhas e também esta usando variaveis de ambiente que eu recomendo fortemente.

Na part 2 publicarei o passo a passo para fazer o deploy dessa automação no Heroku e como configurar um Schedule para que ele poste o conteudo seguindo determinado padrão de tempo.

Deixe aqui nos comentarios ideias de BOT's que trariam valor concreto para o Tabnews.

🤝 Um abraço, Jr.

Que massa mn

interessante, talvez um bot que notificava as publicações, na api tem alguma rota onde faz um get das publicações?

sim, a `/contents`
Olá [@maiagusta](https://tabnews.com.br/maiagusta), **existe sim** uma rota para fazer um get das publicações. Nesse link https://www.tabnews.com.br/filipedeschamps/nova-melhoria-paginacao-na-api-e-no-site você consegue mais informações sobre HttpGet do TabNews.

Uma pergunta, perdoe por deixar aqui nesse post - o tutorial está muito interessante e mostra como a API do TabNews é excelente na questão da concepção do projeto. Parabéns.

Essa questão de APIs haverá algum permissionamento para impedir que pessoas abusem desse recurso e poluam o TabNews?

Tipo assim, um determinada aplicação que permite a escrita de posts poderia ser aprovada pelos administradores, antes de receber o acesso. Outros procedimentos menos problemáticos, como por exemplo ler posts, alterar o perfil do usuário, poderiam ser concedidos na hora.

Obrigado por levantar essas questões! Pelo que já vi o `Filipe` falar, futuramente vai existir um bloqueio para quantidade de posts que alguém pode publicar em determinada faixa de tempo. Outra coisa são as [tabcoins](https://www.tabnews.com.br/filipedeschamps/voce-ja-pode-testar-as-tabcoins-em-homologacao), um conteúdo que não agrega valor será rapidamente sinalizado de maneira negativa e logo sumira do ranqueamento. Mas sem sombra de dúvidas moderadores podem ser uma solução também, meu maior medo em relação a isso é que quando um grupo seleto tem o controle do conteúdo ficaremos a merce desse grupo seleto e seus interesses. Mas esse é um debate excelente, sugiro inclusive que você crie um post exclusivo a respeito disso para que possamos ter mais opniões a respeito.