Monitorar uma página web e ser avisado em caso de alguma alteração pode ser útil por diversos motivos, seja para monitorar falhas, testar desempenho ou simplesmente acompanhar um determinado conteúdo de um site.
Para esta tarefa eu usei o Crontab para inicializar o script em um determinado horário, o navegador Lynx para acessar o site e o cliente de e-mail Mutt para me enviar o alerta por e-mail, todos rodando no LXteminal.
Minha maior dificuldade foi encontrar uma alternativa para ler o conteúdo quando o site usava JavaScript. Consegui resolver o problema pergando o conteúdo pelo navegador Chromium e entregando para o Lynx via terminal. Precisei instalar o Snapd para instalar o Chromium e assim resolver essa questão.
Se você deseja experimentar no Linux algo no estilo google alerta, vai precisar preparar o ambiente e depois rodar o script. Segue abaixo os passos que executei para montar um simplificado sisteminha de monitoramento.
1 - Atualizar o Sistema: sudo apt upgrade
2 - Atualizar repositórios: sudo apt update
3 - Instalar o snapd: sudo apt install snapd
4 - Instalar o Chromium: sudo snap install chromium
5 - Instalar Mutt: sudo apt install mutt
6 - Instalar Lynxsudo: sudo apt install lynx
7 - Instalar CronTab: sudo apt install cron
8 - Instalar Grep: sudo apt install grep
9 - Instalar Curl: sudo apt install curl
Depois de instalar as ferramentas necessárias, você precisa configurar o cliente de e-mail Mutt. Geralmente o arquivo de configuração fica na raiz da pasta do usuário no caso dos sistemas baseados no Debian.
sudo nano /home/pastadousuario/.muttrc
No arquivo .muttrc você precisa inserir os dados do servidor de e-mail que irá se conectar. No meu caso usei o server do Hotmail.
Na linha onde está dois arrobas, é assim mesmo. Não é erro de digitação.
set imap_user = "usuario@hotmail.com" set imap_pass = "#SUASENHA" set smtp_url = "smtp://usuario@hotmail.com@smtp.office365.com:587/" set smtp_pass = "#SUASENHA" set from = "usuario@hotmail.com" set realname = "SEU NOME" set ssl_force_tls = yes set editor = "nano" set folder = "imaps://imap-mail.outlook.com:993" set spoolfile = "+INBOX" set imap_check_subscribed set hostname = hotmail.com set mail_check = 25 set timeout = 300 set imap_keepalive = 300 set postponed = "+[hotmail]/Drafts" set record = "+[hotmail]/Sent Mail" set header_cache=~/.mutt/cache/headers set message_cachedir=~/.mutt/cache/bodies set certificate_file=~/.mutt/certificates set move = no set include set sort = 'threads' set sort_aux = 'reverse-last-date-received' set auto_tag = yes ignore "Authentication-Results:" ignore "DomainKey-Signature:" ignore "DKIM-Signature:" hdr_order Date From To Cc alternative_order text/plain text/html * auto_view text/html
Uma vez configurado, salve o arquivo pressionando CTRL+o e saia do editor nano com o comando CRTL+x
Se a configuração estiver certinha você conseguirá enviar um e-mail pelo terminal linux digitando:
echo "meu primeiro email pelo terminal" | mutt -s "Testando" "usuario@emaildestino.com"
A sequência do comando acima, entre aspas, é: mensagem+subject+emaildestino
Abra um editor de texto, copie e cole as linhas de código abaixo e altere conforme sua necessidade:
#!/bin/bash
URL="https://coloque.aqui.o.site.que.deseja.monitorar" ARQUIVO_ANTERIOR="insira o caminho para gravar o site visitado" ARQUIVO_NOVO="insira o caminho para gravar o site atual" EMAIL_DESTINO="usuario@emaildestino.com" ASSUNTO="insiraoSUBJECT" keyword="palavra que deseja procurar no site"
chromium --headless --disable-gpu --dump-dom "$URL" | lynx -stdin -dump -nolist > "$ARQUIVO_NOVO"
result=$(chromium --headless --disable-gpu --dump-dom "$URL" | lynx -stdin -dump -nolist | grep -i "$keyword")
if ! diff "$ARQUIVO_ANTERIOR" "$ARQUIVO_NOVO" > /dev/null ; then # Enviar um email de alerta usando o Mutt echo "Parece ter ocorrido alguma atividade em:
$URL
$result " | mutt -s "$ASSUNTO" "$EMAIL_DESTINO"
fi
mv "$ARQUIVO_NOVO" "$ARQUIVO_ANTERIOR"
O script acima vai abrir o endereço web da variável URL e gravar toda a página, depois vai comparar os arquivos, se alguma coisa mudou na comparação um e-mail será enviado e o arquivo novo vai substituir o antigo. Uma outra possibilidade está no script abaixo, nele vai ser gerado um arquivo apenas com as palavras-chave e não com a página inteira.
Salve o arquivo e de permissão para que ele seja executado. Abra o terminal na pasta onde slavou o arquivo e digite: chmod +x onomedoarquivo
#!/bin/bash
url="insira.o.site.que.deseja.monitorar" keyword="palavra-chave1" keyword2="palavra-chave2"
ARQUIVO_ANTERIOR="insira o caminho para gravar as palavras encontradas" ARQUIVO_NOVO="insira o caminho para gravar as palavras encontradas na nova visita" EMAIL_DESTINO="usuario@emaildestino.com" ASSUNTO="insiraoSUBJECT"
result=$(chromium --headless --disable-gpu --dump-dom "$url" | lynx -stdin -dump -nolist | grep -i "$keyword") result2=$(chromium --headless --disable-gpu --dump-dom "$url" | lynx -stdin -dump -nolist | grep -i "$keyword2")
echo $result $result2 >> $ARQUIVO_ANTERIOR
if ! diff "$ARQUIVO_ANTERIOR" "$ARQUIVO_NOVO" > /dev/null ; then # Enviar um email de alerta usando o Mutt
echo "Parece ter ocorrido alguma atividade em:
$url
$result $result2 " | mutt -s "$ASSUNTO" "$EMAIL_DESTINO"
fi
mv "$ARQUIVO_NOVO" "$ARQUIVO_ANTERIOR"
No exemplo acima o script procura pela palavra-chave e se encontra grava num arquivo, na proxima visita ao site o script compara o arquivo guardado com o que é encontrado na nova visita e se algo for diferente um e-mail é enviado.
#!/bin/bash
keywords="palavra1,palavra2,palavra3"
result=$(curl -s "https://news.google.com/search?q=$keywords")
relevant_info=$(echo "$result" | grep -E 'palavra1|palavra2|palavra3' | awk '{print $1}')
if [ -n "$relevant_info" ]; then echo "Informações relevantes encontradas:
$relevant_info" | mail -s "Google Alerta" useremail@seuemail.com
fi
No script acima a página de busca do google é aberta e as palavras-chave são procuradas, se a palavra é encontrada, um e-mail é enviado.
Com esses três exemplos de script é possível criar diversas maneiras de pesquisar online e emitir alertas por e-mail. Sua criatividade é o limite!
Para deixar tudo automatizado, basta agendar um horário pelo crontab e executar o arquivo do script que você criou.
No entanto, quando tentei executar diretamente no crontab, ocorreu instabilidade no script, então precisei primeiro abrir uma janela do terminal e executar o script com o terminal aberto. Para esta tarefa siga os passos abaixo:
1 - Abra o crontab: crontab -e
2 - Insira o comando 10 10 * * * export DISPLAY=:0 && /usr/bin/lxterminal -e "cd /caminhododiretórioondestaoarquivo && ./nomedoarquivo.sh; exec bash" > /dev/null 2>&1
no meu caso o comando exato foi: 10 10 * * * export DISPLAY=:0 && /usr/bin/lxterminal -e "cd /home/jefersonsilva/teste && ./busca.sh; exec bash" > /dev/null 2>&1
No comando acima, inserido lá no crontab, o arquivo executável nomeado de busca.sh que está na pasta teste e contendo um dos scripts de exemplo acima, é aberto na janela do lxterminal, todo o dia quando o relógio registra 10 horas e 10 minutos.
Eu executo versões dos scripts acima em um raspberry pi 4 e eles atendem minha necessidade. Espero que ajude em sua busca também.
Jeferson Silva - PU3OSI