Apple OSX e Ubuntu a dizer os twitts do Poupar Melhor

Para por o nosso computador a ler-nos os sites que queremos, vamos ter algum trabalho de linha de comandos. Como já tinha dito aqui, o Apple tem um sistema de discurso muito melhor que o meu Windows XP lá dos escritório, por isso decidi começar por aqui.

Procurei usar ferramentas livremente disponíveis na Internet para montar esta funcionalidade ou que já se encontrassem no sistema operativo. Tentei escolher de entre as que fossem mais versáteis na linha de comandos de forma a depois criar o evento que de tempos a tempos que  lesse o meu conteúdo. A diferença será na peça final que é a que produz o som. Por enquanto não vamos explorar já a hipótese de usar o Google Translate para este fim.

Os ingredientes são um conjunto de programas, quase todos do projeto GNU:

  1. cURL – vai buscar informação aos servidores da internet;
  2. sed – transforma o texto na linha de comandos;
  3. OSX say – converte o texto escrito em formato falado;
  4. espeak – converte o texto escrito em formato falado no Ubuntu.

A receita:

curl https://twitter.com/pouparmelhor | sed -n '/tweet-text/,/stream-item-footer/p' | sed 's/< [^>]*>//g' | sed "s|http[:]//[^ ]*||g" | sed "s|bit.*||g" | sed "s|&nbsp;||g" | sed 's/class="tco-ellipsis">//g' | sed 's/Pouparmelhor.com/Poupar Melhor/g' | sed 's/<[^>]*>//g;s/^[ \t]*//;/^$/d'| while read line ; do echo $line| say ; done

Esta experiência recolhe da página do Poupar Melhor no Twitter o conteúdo com o curl. Encontra no código HTML a informação que se encontra entre tweet-text e stream-item-footer com o sed e usa o mesmo utilitário para corrigir todo o conteúdo, removendo formatação HTML e afinando outros detalhes.

O resultado é a voz da Apple a contar-nos o que se passa no Poupar Melhor sem termos de olhar para lá.

Para repetir a proeza no Ubuntu basta substituir o comando say pelo comando speak e usar a instrução -vpt-pt para ele falar em português. Bem… Mais ou menos. A receita fica abaixo:

curl https://twitter.com/pouparmelhor | sed -n '/tweet-text/,/stream-item-footer/p' | sed 's/< [^>]*>//g' | sed "s|http[:]//[^ ]*||g" | sed "s|bit.*||g" | sed "s|&nbsp;||g" | sed 's/class="tco-ellipsis">//g' | sed 's/Pouparmelhor.com/Poupar Melhor/g' | sed 's/<[^>]*>//g;s/^[ \t]*//;/^$/d'| while read line ; do echo $line| espeak -vpt-pt ; done

A voz do espeak é muito robotizada, tal como a que podem ouvir no Excel a imitar um robot num Windows XP. Embora os utilizadores do Windows também possam usar os utilitários cURL e sed, parece-me que o acesso ao sintetizador de texto para voz está excluído das opções por defeito na linha de comandos.

Tags: ,

{ 9 comments to read ... please submit one more! }

  1. Anónimo Cobarde

    O comando para linux funciona mal. (Para além de não precisar do while)

    Um mais curto, mais simples e que funciona bem (pelo menos por enquanto…):

    curl https://twitter.com/pouparmelhor | awk 'BEGIN{FS=">"}/data-user-id="372692636"/{tweet=1} tweet==1 && / tweet-text/{sub("<a>:","Poupar Melhor:"); sub("</a><a>",""); sub("",""); print $2; tweet=0;}' | espeak -vpt-pt

  2. Anónimo Cobarde

    As tags html não estão a aparecer… Segunda tentativa! O comando seria o seguinte

    curl https://twitter.com/pouparmelhor | awk ‘BEGIN{FS=”>”}/data-user-id=”372692636″/{tweet=1} tweet==1 && / tweet-text/{sub(“:”,”Poupar Melhor:”); sub(““,””); sub(“”,””); print $2; tweet=0;}’

  3. Caro anónimo, Para evitar malfeitorias, não permitimos a publicação de comentários com URL até serem validados pelo autor do Post.

    Corri o comando abaixo no OSX e não ficou grande coisa :)

    curl https://twitter.com/pouparmelhor | awk ‘BEGIN{FS=”>”}/data-user-id=”372692636″/{tweet=1} tweet==1 && / tweet-text/{sub(“:”,”Poupar Melhor:”); sub(“”,””); sub(“”,””); print $2; tweet=0;}’ | say

    Ele lê o HTML, como no exemplo abaixo:
    No &smallerthen; a href=”httpPoupar Melhor://t.co/OdNkyQezYb” rel=”nofollow” dir=”ltr” data-expanded-url=”http://Pouparmelhor.com” class=”twitter-timeline-link” target=”_blank” title=”http://Pouparmelhor.com”

  4. Anónimo Cobarde

    Nao tenho osx para experimentar…. :-P

    No entanto copiou o script mal… A regexp do primeiro sub tem menores e maiores e uns “a” pelo meio ;-) Pode confirmar que copiou correctamente?

    O que explica que o facto de no resultado que postou ele tar a substitui os ‘:’ no “http : //” do primeiro link, por “Poupar Melhor:”

  5. O sistema de comentário não nos está a facilitar a vida. Está a interpretar os sinais de maior e menor.
    curl https://twitter.com/pouparmelhor | awk 'BEGIN{FS=">"}/data-user-id="372692636"/{tweet=1} tweet==1 && / tweet-text/{sub(":","Poupar Melhor:"); sub("</a><a>",""); sub("",""); print $2; tweet=0;}'

    Corri o comando como está no seu primeiro comentário, mas continua a deitar coisas deste tipo para fora:
    No

  6. Tem aqui o conteúdo correcto: http://pastie.org/8198129

  7. Excelente :)

    Vou rever o modelo de comentários e provavelmente remover a intrepretação de código HTML que me parece problemática e nos roubou bastante tempo. Obrigado

{ 2 Pingbacks/Trackbacks }

  1. O computador a falar, versão melhorada » Poupar Melhor
  1. O computador a falar, versão melhorada » Poupar Melhor