sábado, 27 de junho de 2015

Phyton - Conversão de EML para HTML

Resolvi usar a linguagem Python para resolver alguns problemas que tenho no dia a dia, o primeiro deles é os e-mails que recebo da lista EFR, são dicas incríveis de inglês e gosto de guardá-las para estudo.

Meu problema é que o Thunderbird salva em formato EML e convenhamos que não é muito agradável armazenar estas dicas neste formato. Dentro deste arquivo existe o conteúdo da aula que está em formato HTML e, além disso, algumas dicas vem com um link para baixar o Áudio da aula. Deste modo tinha que realizar os seguintes passos:
  • Salvar com o Thunderbird o arquivo em formato EML.
  • Abrir o arquivo com um editor e copiar a parte HTML com o conteúdo desejado.
  • Salvar em um arquivo com a extensão HTML.
  • Abrir este arquivo, clicar no link contendo o áudio da aula e realizar o download.
Baixe aqui um exemplo deste arquivo.

Concordo que são ações bem simples em se fazer e gasto no máximo 5 minutos para realizá-las, porém são 3 emails por dia, ou seja 21 emails por semana o que pode tornar 5 minutos em 01:45 por semana. Já aprendi que tempo é muito valioso e não quero perdê-lo assim.

Python é uma linguagem muito simples, principalmente para aqueles que conhecem algum derivado do C como Java ou mesmo PHP e C#. No Linux já está instalado por padrão e nos outros ambiente basta baixar do site oficial. Aqui está o código que fiz para realizar todo o serviço descrito sobre o arquivo:
# ---------------------------------------------------------------------------------
# Script: LendoArqs.py
# Linguagem: Python
# Autor: Fernando Anselmo
# Criado em: 23/06/2015
# Funcionalidade:
#   Converter o email da lista 'Aprendendo Ingles para HTML e baixar o arquivo MP3,
#   caso exista.
# Arquivo de Entrada: formato EML (salvar pelo Thunderbird)
# ---------------------------------------------------------------------------------
import wget

class Leitura:
    def obterArquivo(self):
        print('=' * 60)
        print('Converter o email da lista \'Aprendendo Ingl\u00EAs\' para HTML')
        print('E baixar o arquivo MP3, caso exista.')
        print('Por Fernando Anselmo - Vers\u00E3o 1.0')
        print('Arquivo de Entrada: formato EML (salvar pelo Thunderbird)')
        print('Site: http://www.aprendendoingles.com.br/')
        print('=' * 60)
        self.nomeArq = input('Informe o nome do arquivo (ex. EFR_0001): ')
        self.caminho = input('Informe a pasta que se encontra o arquivo (ex. F:/): ')
        self.url = ''

    # Montagem do arquivo
    def montagem(self):
        entrada = open(self.caminho + self.nomeArq + '.eml', 'r+')
        saida = open(self.caminho + self.nomeArq + '.html', 'w')
        inicia = False
        mostra1 = True
        mostra2 = True
        print('Passo 1. Gerando arquivo...')
        for linha in entrada:
            if linha.strip().startswith('<!DOCTYPE'):
                inicia = True
            if '<div align="center">' in linha:
                mostra1 = False
            if linha.strip().startswith('<div id="fromDMARC"'):
                mostra2 = False
            if not mostra2 and linha.strip().startswith('</body>'):
                mostra2 = True
            if inicia and mostra1 and mostra2 and len(linha.strip()) > 0:
                if (".mp3" in linha):
                    self.url = linha
                saida.write(linha)
            if not mostra1 and linha.strip().startswith('</div>'):
                mostra1 = True
            if linha.strip().startswith('</html>'):
                break
        print('Passo 2. Arquivo gerado.')
        # Fechar o arquivo
        entrada.closed
        saida.closed

    # Baixar (se caso) o arquivo MP3
    def baixarArquivo(self):
        if (len(self.url) > 0):
            print('Passo 3. Baixando arquivo MP3...')
            self.url = self.url[self.url.index('http'):self.url.index('.mp3')+4]
            wget.download(self.url, self.caminho + self.nomeArq + '.mp3')
            print('Passo 4. Arquivo MP3 Baixado.')
        else:
            print('Passo 3. N\u00E3o cont\u00E9m arquivo MP3 para baixar.')

# Metodo principal
def main():
    ler = Leitura()
    ler.obterArquivo()
    ler.montagem()
    ler.baixarArquivo()

# Chamada inicial
if __name__ == '__main__':
    main()

# Final do Arquivo
Para executá-lo basta salvar o arquivo com o nome LendoArqs.py e na janela de comandos digitar: python LendoArqs.py e o programa pedirá as informações necessárias. Lembro que para Python 2 essas informações devem ser entre aspas simples.

Baixe aqui o resultado em HTML após a execução do programa.

Não pretendo aqui dar aula de Python, recomendo se deseja aprender, faça o download gratuito do livro "Thinking in Python". Este programa está dividido em 3 partes, a primeira solicita as informações necessárias para converter o arquivo, a segunda acha o trecho correto dos códigos HTML e salva um arquivo de mesmo nome com a extensão HTML e a última verifica a existência do arquivo MP3 e procede, caso exista, seu download.

ATENÇÃO: Este programa requer o módulo wget que pode ser obtido neste site. Basta descompactar o arquivo wget.py para a pasta de instalação do Python (ex. No Linux em /usr/lib).

Outra observação é que tudo poderia ser bem mais simples, mas resolvi deixar em formato de uma classe seguindo os conceitos da Orientação a Objetos de modo que possa aproveitá-lo em outras construções.

Obrigado e até a próxima
Fernando Anselmo