haciendo que nuestra pc hable con espeakc

espeak es un software sintetizador de voz con el podemos hacer cosas muy interesantes, para instalarlo en fedora tendremos que ejecutar:

yum install espeak

Una vez instalado podemos hacer cosas divertidas como contar botellas de cerveza:

echo {1..199}" bottles of beer on the wall, cold bottle of beer, take one down, pass it around, one less bottle of beer on the wall,, " | espeak -v english -s 140

Contar elefantes:

echo {1..199}" elefantes se balanceaban sobre la tela de una araña, como veían que rustían fueron a buscar a otro elefante,, " | espeak -v spanish -s 140

Nos lea una frase de la fortuna:

fortune | espeak -v english -s 140

Podemos hacer por ejemplo que espeak nos lea los logs:

tail -f -n1 /var/log/messages | espeak -v english -s 150

También jugando con awk, podemos por ejemplo filtrar el log de irssi, para que espeak interprete todas las lineas que alguien en el IRC escribe:

tail -n 1 -f #channel.log | awk -F '>' '/nick_a_interpretar>/{print $2 | "tee file"}' &
tail -f -n1 file | espeak -v spanish

basándose en estos ejemplos hay un gran numero de cosas que se pueden hacer. Enjoy!

obtener la temperatura de Buenos Aires desde la linea de comandos

Con este comando podemos obtener la temperatura de Buenos Aires desde la linea de comandos de cualquier *nix conectado a internet.

echo "Temperatura $(curl -s "http://www.google.com/ig/api?weather=Buenos%20Aires" | sed 's|.*<temp_c data="([^"]*)"/>.*|1|') grados en Buenos Aires

desarmando el comando de la salida de

curl -s "http://www.google.com/ig/api?weather=Buenos%20Aires"

Obtenemos el siguiente XML:

<xml_api_reply version="1">

<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">

<forecast_information>
<city data="Buenos Aires"/>
<postal_code data="Buenos Aires"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2010-02-12"/>
<current_date_time data="2010-02-12 20:00:00 +0000"/>
<unit_system data="US"/>
</forecast_information>

<current_conditions>
<condition data="Clear"/>
<temp_f data="88"/>
<temp_c data="31"/>
<humidity data="Humidity: 52%"/>
<icon data="/ig/images/weather/sunny.gif"/>
<wind_condition data="Wind: NE at 8 mph"/>
</current_conditions>

<forecast_conditions>
<day_of_week data="Fri"/>
<low data="64"/>
<high data="86"/>
<icon data="/ig/images/weather/sunny.gif"/>
<condition data="Clear"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Sat"/>
<low data="60"/>
<high data="87"/>
<icon data="/ig/images/weather/sunny.gif"/>
<condition data="Clear"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Sun"/>
<low data="57"/>
<high data="73"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="Chance of Rain"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Mon"/>
<low data="57"/>
<high data="73"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="Chance of Rain"/>
</forecast_conditions>
</weather>
</xml_api_reply>

Para este caso lo que buscamos es esta parte,

<temp_c data="31"/>

$ curl -s "http://www.google.com/ig/api?weather=Buenos%20Aires" | sed 's|.*<temp_c data="([^"]*)"/>.*|1|'
31

el sed nos sirve para limpiar de ahi solamente el 31, y finalmente el echo arma la frase mas linda.

 

$ echo "Temperatura $(curl -s "http://www.google.com/ig/api?weather=Buenos%20Aires" | sed 's|.*<temp_c data="([^"]*)"/>.*|1|') grados en Buenos Aires"
Temperatura 31 grados en Buenos Aires