Executando verificação de segurança...
3

🤖 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.

Carregando publicação patrocinada...
1
1
1
1

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.

1

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, 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.