Criando um bot no Telegram para postar feeds de Twitter em seu chat em php

Photo of Criando um bot no Telegram para postar feeds de Twitter em seu chat em php
Facebook
VKontakte
share_fav

O Twitter ainda é um dos maiores meios utilizados por desenvolvedores para ficarem a par dos acontecimentos do mundo e da programação. Mas, nos últimos tempos, o Twitter está bem bagunçado, tanto as postagens não aparecem mais em formato de timeline (agora aparece um monte de mensagens postadas em horários aleatórios no que seria a sua timeline). Além disso, geralmente seguimos um monte de pessoas e empresas que nem sabemos o porquê estão ali e somos extremamente preguiçosos de ficar apagando tudo que já não nos interessa mais no Twitter.

Por outro lado, o aumento de número de usuários no Telegram, bem como a possibilidade de integrações e a criação de “bots”, faz com que essa seja uma ferramenta de comunicação muito interessante e indispensável para o desenvolvedor atual.

E porque não unir o útil ao agradável? O Twitter tá uma bagunça e seu smartphone já está com o Telegram instalado e recebendo mensagens daqueles mil grupos que você nunca lê nem responde. Talvez seja a hora de usá-lo para algo útil.

Neste artigo vamos ver como em poucas linhas de código php, composer, mais um crontab ou agendador de tarefas, e um servidor qualquer, você pode criar um serviço que atualiza um chat do Telegram sobre os posts de qualquer usuário do twitter. O objetivo desse artigo é mostrar que muitas vezes conseguimos fazer integrações com poucas linhas de código.

Para começar, devemos criar um aplicação em nossa conta do twitter. Para isso, estando logado, vá em https://apps.twitter.com/, depois em “Create new App”. Coloque um nome qualquer em Name e uma descrição qualquer em description. Em website coloque uma url válida, pode ser de qualquer domínio seu ou o endereço no twitter https://twitter.com/seunick. E aceitar os termos.

Depois de criar a aplicação, você deverá ir em Keys and Access Tokens. Anotar a “Consumer Key” e a “Consumer Secret”; criar um novo token em “Your Access Token”-> Create new Token e anotar o “Access Token” e o “Access Token Secret”.

Criando um bot no telegram para postar feeds de twitter em seu chat em php

Bem, agora vamos ter que criar um bot no Telegram.

O ideal é que os próximos passos sejam feitos no cliente para celular do Telegram, já que algumas funcionalidades simplesmente “bugam” no cliente web.

Para começar basta abrir uma conversa com o BotFather. Para isso pesquise BotFather e abra um chat com ele.

  • Digite: /newbot
  • Depois digite o nome do seu bot
  • Em seguida o username do seu bot terminando em bot. Exemplo: newbot
  • Assim que você enviar o nome do seu bot, o BotFather irá retornar um token de acesso. Anote também esse token.

Criando um bot no telegram para postar feeds de twitter em seu chat em php

Agora temos que pegar o id da nossa conta do Telegram para que o bot possa abrir o chat conosco através da API. Para isso, basta abrir um chat com “userinfobot” e anotar o ID que ele fornece.

Com todos os tokens e ids anotados, agora vamos por a mão na massa!

Antes de começar a codar, precisamos utilizar uma biblioteca PHP para realizar a conexão com o Twitter. Nesse caso usaremos o “Abraham\TwitterOauth”, que está no github.

No seu console, crie a pasta do projeto. Por exemplo telegram, entre na pasta e utilizando o composer, digite:

composer require abraham/twitteroauth

O composer irá instalar todas as dependências e a biblioteca TwitterOauth.

Primeiro criamos um arquivo chamado “id” e em seu conteúdo deixamos 1

Criamos então o arquivo “telegram.php”:

get("statuses/user_timeline", ["screen_name" => "imasters"]); //retorna os 20 últimos tweets de um usuário, no caso como exemplo do usuário imasters
/* Abaixo uma pequena lógica para pegar apenas os tweets que ainda não foram enviados 
* ao chat. No caso, definimos o primeiro id como 1, e utilizaremos o arquivo id para 
* armazenar os próximos ids. E, vamos verificar qual é o id do último tweet que a conta fez
* enquanto o número armazenado no arquivo for menor que o último tweet. Então o 
* sistema enviará uma requisição para a API do telegram disparar o tweet. Caso o id do 
* último tweet seja igual ao último id armazenado no arquivo, não fará nada
$ultimoId = file_get_contents('id'); //retorna o último id armazenado no arquivo
$i = 19; //inicia o contador decremental de tweets
$ultimoIdNovo = $statuses[0]->id; //recebe o id do último tweet
$id = $statuses[$i]->id; //recebe o id do primeiro tweet do retorno
while ( $i>=0 ) { //enquanto o contador não for menor que 0
if ($id > $ultimoId) { //caso o id do tweet seja maior que o id armazenado no arquivo
 $url = $apiUrl.'sendMessage?chat_id='.$chatId.'&text='.urlencode($statuses[$i]->text); //url referente a API do Telegram para enviar uma mensagem para o chat do seu usuário do telegram com o texto sendo o tweet.
 $x = file_get_contents($url); //faz uma requisição a API do telegram
 }
 $i--; //decrementa o contador
 $id = $statuses[$i]->id; //recebe o id do próximo tweet
}
file_put_contents('id', $ultimoIdNovo); //armazena o id do último tweet enviado

Como podemos perceber no código, existem melhoras que podemos fazer. Como por exemplo utilizar a biblioteca GuzzleHttp para fazer a requisição à API do Telegram, mas para efeito didático utilizamos algo mais simples, como um file_get_contents.

Agora a última parte é fazer um crontab (linux) ou um agendador de tarefas (windows) para iniciar o serviço de “x” em “x” minutos. (Vale lembrar que esse tempo deverá ser menor que o tempo em que a conta do twitter faça mais de 20 tweets, já que a chamada a biblioteca nos retorna os 20 últimos tweets)

Utilizando o crontab, basta dar “crontab -e” no seu console.

E depois, por exemplo, adicionar a linha abaixo:

*/30 * * * * php /var/www/console/telegram/telegram.php

Onde, a cada 30 minutos será iniciado o serviço. Que no caso está em /var/www/console/telegram/telegram.php

E o resultado é algo similar com isso:

Desejo que seja útil para vocês.

Até mais!

ver iMasters
#linux
#api
#chat
#telegram
#php
#bots
#desenvolvimento
#twitter