Criando um bot de previsão do tempo para o Twitter em menos de 10 minutos com Node-RED

Vitor Henckel
Bots Brasil
Published in
6 min readMar 16, 2018

--

A intenção deste tutorial é mostrar como o Node-RED pode agilizar e facilitar o desenvolvimento de API's.

Vamos focar no desenvolvimento do bot, caso você ainda não conheça o Node-RED fica aqui uma leitura para fazer antes de seguir com este tutorial.

Vamos utilizar o Node-RED dentro da plataforma IBM Cloud (ex-Bluemix), a IBM disponibiliza em cloud vários serviços de forma gratuita, como o Watson Conversation por exemplo, muito utilizado para criação de chatbots.

O bot

Vamos desenvolver um bot simples para o Twitter. O robô vai ficar escutando todos os tweets públicos que contenham frases como: "qual a previsão do tempo?", "alguém sabe a previsão do tempo?" ou somente "previsão do tempo".

Quando o robô identificar um tweet que contenha alguma destas frases, vamos tentar identificar a localização do usuário, caso o tweet venha com a localização, vamos tweetar marcando o usuário com a previsão do tempo para o dia atual e o próximo dia na cidade dele.

Para pegar a previsão do tempo, vamos utilizar a API do site https://hgbrasil.com/ . Eles disponibilizam uma API gratuita para previsão do tempo, bastando apenas um cadastro simples dos dados do usuário e cadastro da URL que utilizará o serviço.

Mãos a obra

Para iniciar nosso bot, criei uma conta no Twitter chamado Botzão do Tempo (@BotSaoPedro).

Aba SaoPedroBot onde ficarão os nodes com os códigos dos nosso bot

No Node-RED criei uma aba também chamada de SaoPedroBot, não é obrigatório, fiz uma nova aba apenas para separar o código do nosso bot dos outros que já possuo no node-RED.

Agora insira um bloco de entrada do Twitter como mostrado na imagem abaixo. Clique duas vezes sobre o bloco e a aba de edição do bloco irá abrir.

Nesta aba, clique no ícone de lápis ao lado do campo Twitter ID. Uma nova aba será aberta com um botão para que você autentique o aplicativo em sua conta do Twitter.

Na tela do Twitter, clique em "Autorizar aplicativo" e após a mensagem de sucesso já pode fechar a página.

No campo Twitter ID no Node-RED agora já estará aparecendo o @ do seu bot, no nosso caso aqui: @BotSaoPedro. Clique em "Add" e pronto. O Node-RED voltará para a aba abaixo já com sua conta do Twitter autenticada.
Agora nesta aba, no campo Search vamos deixar selecionado a opção: "All public tweets" para que nosso bot possa ficar monitorando tudo e encontrar quem deseja saber sobre o tempo.

No campo "For" você pode especificar o que o bot deve procurar, neste campo você pode adicionar várias palavras ou frases separadas por vírgulas, pode inserir um usuário específico (por exemplo monitorar e responder sempre que alguém marca o usuário da sua empresa!) e pode ainda adicionar #hashtags.

Você pode ainda fazer condições, utilizando vírgulas entre as palavras sua busca vai funcionar como OR, uma palavra ou outra. Se utilizar espaço entre as palavras, será considerado AND, então precisa conter todas as palavras.

Vamos inserir agora um bloco chamado "function", é neste bloco que vamos receber os tweets encontrados, descobrir a localização do usuário, montar a URL da API e enviar ao próximo bloco que vai fazer a chamada a API.

Aqui ao lado um código simples:
1- recebemos um objeto com todos os dados do tweet e armazenamos na variável tweet.
2- Um "if" apenas para verificar se o tweet contém a informação da localização do usuário.
3- Guardamos os dados do location do usuário
4- Algumas contas tem o location cadastrado desta forma "cidade, estado, país" outras aparecem como "cidade/estado/país", algumas tem só o país e outras tem o campo vazio, por isso precisamos fazer este tratamento. Então quebramos o location pela vírgula (,) e 5 - pela barra (/).
6- Aqui fizemos um if para descobrir se o primeiro parâmetro é diferente do país (então temos a cidade…)
7- Armazenamos em msg.method como o próximo bloco que fará a requisição a API deve fazer a chamada, neste caso "GET".
8- Em msg.url montamos a URL da API que será chamada no próximo bloco.
9- Aqui damos o return da msg na primeira saída do bloco, essa saída direciona para a requisição da API.
10- Return na segunda saída do bloco que mata a execução sem nenhum retorno para o Twitter.

Código dentro do bloco no Node-RED

Agora inserimos um node chamado http-request, damos um duplo clique para editar este bloco.
No campo method selecionamos a opção "- set by msg.method" e o campo return selecionar a opção "a parsed JSON object".
A informação do método e da URL virão do nosso bloco anterior.
Agora vamos inserir um novo bloco function para tratar o recebimento da API e gerar o tweet.

JSON gerado pela API

Aqui montamos o tweet com base nas informações retornadas pela API. Iniciamos com o '@' + msg.tweet.user.screen_name para marcarmos o usuário no tweet.
O restante dos dados são informações da API, hora, cidade, tempo agora, descrição, temperatura agora, vento, umidade do ar, máxima e mínima de hoje e de amanhã.

Agora inserimos o bloco final de saída para o Twitter, este bloco é o responsável pelo envio do tweet. Inserimos também um bloco de "debug" (bloco verde) na última saída para podermos ver os tweets que estão sendo enviados.

Agora sempre que alguém perguntar sobre previsão do tempo nosso bot irá tentar responder como mostram as imagens abaixo:

Tweet perguntando sobre a previsão do tempo
Tweet do nosso bot respondendo ao usuário
Debug do Node-RED

Aqui a aba de debug do Node-RED mostrando a chegada no tweet encontrado e abaixo o envio após o processamento dos dados.

Bom, era isso. Rápido e fácil desenvolver um bot simples utilizando Node-RED como orquestrador.
Espero que o conteúdo não tenha ficado muito confuso, mas quem ficar com dúvidas ou queira saber mais sobre Node-RED, fico à disposição total para tentar auxiliar.
E como podem ver na imagem abaixo, o bot continua respondendo previsões de tempo aos usuários e já com alguns seguidores! 😉

--

--

Vitor Henckel
Bots Brasil

Apaixonado pelo mundo das Startups, empreendedorismo, Inteligência Artificial, ChatBots!