Script para buscar e tratar mensagens do GMail automaticamente



Receba nosso boletim semanal!
Tecnologia que Interessa!

Google Apps Scripts


Conforme prometi há alguns meses, segue a primeira de algumas lições que passarei aqui sobre o Google Apps Script, este recurso interessantíssimo para quem utiliza os inúmeros serviços da Big G (quem não usa ?), e que permite automatizar uma série de tarefas rotineiras.

Neste primeiro script, que não criei, mas adaptei às minhas necessidades, veremos como analisar as mensagens enviadas pelos alertas do Google. Como tenho muitos alertas, e costumo selecionar a opção "Todos os resultados", isto gera uma quantidade grande de "resumos" numa única mensagem do alerta. É comum receber mensagens com 50 ou mais notícias e links relacionados a um tema, especialmente se este tema for abrangente como Big Data ou Android, pra ficar em dois exemplos. Com o agravante de que o alerta criado em inglês gera ainda mais resultados.

Diante disso, resolvi pesquisar um script que filtrasse as mensagens de alertas do Google pra trazer somente os trechos que contivessem algumas palavras chave. E aqui vai uma dica: identifique as palavras chave mais relevantes para o tema que busca. Identifiquei que, para qualquer tema, palavras chave como "melhor" e "dica" são bastante relevantes, enquanto pra temas como Android, palavras chave como "atualização" e "dicas" apresentam bons resultados.

O funcionamento do script é bem simples: basta indicar na planilha uma lista de palavras chave, na primeira coluna, uma abaixo da outra, e então executar. Mas há um pré-requisito: o script só verifica as mensagens com o label alerts, pra reduzir a quantidade de mensagens analisadas e evitar que o script seja interrompido pela Google, que só permite a execução por no máximo 5 minutos. Por isso você deve marcar as mensagens que quiser que o script analise com o label alerts.


Vejamos o código:
function BuscaPalavraChaveAlertas() { 
  var label = GmailApp.getUserLabelByName('alerts');
  var threads = label.getThreads();
  var results = "";
  var keywords = [];
  var sheet = SpreadsheetApp.getActiveSheet();
  for (var i = 1; i < sheet.getLastRow(); i++)
    keywords[i - 1] = sheet.getRange(i + 1, 1).getValue().toUpperCase();
  var keywordList;
  var choice = sheet.getRange(1, 1).getValue().toUpperCase();
  if(choice.equals("ALL"))
    keywordList = new RegExp('(?=[\\s\\S]*\\b' + keywords.join('\\b[\\s\\S]*)(?=[\\s\\S]*\\b') + '\\b[\\s\\S]*)');
  else if(choice.equals("ANY"))
    keywordList = new RegExp('\\b' + keywords.join('\\b|\\b') + '\\b');
  else    //invalid choice
    return;
  Logger.log(keywordList);
  var messages, msg, parts, x, y, z, cnt = 0;
  for (x = 0; x < threads.length; x++) {    
    messages = threads[x].getMessages();
    for (y = 0; y < messages.length && cnt < 20; y++) {
      msg = messages[y].getPlainBody();
      Logger.log(messages[y].getSubject());
      if (msg != null) {
        msg = msg.replace(/===(.*)===(\s*)/g, '');
        msg = msg.replace(/(\s*)- - - - - - - - - -[\s\S]*/g, '');
        msg = msg.replace(/See all stories on this topic:(.*)(\s*)<(.*)>/g, '');
        msg = msg.replace(/\r\n\r\n/g, '|||');
        parts = msg.split('|||');
        for(i = 0; i < parts.length; i++) {
          if(keywordList.test(parts[i].replace(/\n/g, ' ').toUpperCase())) {
            results = results + parts[i] + "\n\n";
            cnt++; 
          }
        }
      }
    }
    label.removeFromThread(threads[x]);
    Utilities.sleep(200);
  }
  GmailApp.sendEmail(Session.getActiveUser().getEmail(), "Sumário de Alertas do Google", results);
}
Para executar o código acima e testar, tudo que você precisa fazer é:

1 - Marcar as mensagens de alertas do Google que quer analisar com o label alerts;

2 - Criar uma nova planilha do Google Docs e preencher a primeira célula com ALL ou ANY. Esta opção indica se as mensagens devem conter todas as palavras chave ou qualquer uma delas;

3 - Preencher as células abaixo da primeira com as palavras chave (recomendo usar duas, que foi o que já testei com bons resultados);

4 - Ir em Ferramentas - Editor de Scripts, colar o código acima e salvar;

5 - Executar o script clicando no botão "play" (triângulo).

Agora é aguardar a mensagem na sua caixa de entrada com o assunto "Sumário de alertas do Google", que vai conter somente os trechos dos alertas que contém as palavras chave indicadas.

Agora vejamos o que você pode aprender com este script:

1 - Como pesquisar mensagens do GMail e manipular o resultado da pesquisa;

2 - Como manipular células de planilhas do Google Docs;

3 - Como extrair texto de mensagens usando separadores (split);

Notem o contador cnt, que limita a quantidade de resultados e evita que o script demore mais de 5 minutos. Fique à vontade pra testar outros valores e encontrar o que funciona melhor pra você, lembrando que quanto maior o valor, maior a quantidade de resultados na mensagem de sumário.

Notem também o sleep, que evita que o script rode "rápido demais", algo que o Google também não gosta e que pode fazer com que seu script não funcione direito.

Bom, por hoje é só, espero que o script seja útil pra alguém, e se fizerem adaptações ou descobrirem outros scripts interessantes, não deixem de comentar aqui. Obrigado!

Receba nosso boletim semanal!
Tecnologia que Interessa!

Christian Guerreiro

Professor por vocação, blogueiro e servidor público por opção, amante da tecnologia e viciado em informação.


Ensino a distância em Tecnologia da Informação: Virtualização com VMware, Big Data com Hadoop, Certificação ITIL 2011 Foundations e muito mais.


Suporte o Tecnologia que Interessa!

Você acha que as informações compartilhadas aqui são úteis?
Então me ajude a produzir ainda mais e melhores conteúdos!


É muito fácil. Basta divulgar nossos treinamentos pra alguém que conheça!


E se for de Salvador, podemos estruturar um curso presencial para sua empresa!

Eu vou ficar muito grato (e quem fizer os curso também :)!