[TIP] Formatea la salida JSON de CURL

Si estas acostumbrado a trabajar con JSON, backends y demás palobrotos seguro que habrás usado cURL para obtener paquetes JSON.

La salida que cURL da no viene formateada, simplemente la muestra tal y cómo el backend lo devuelve.

Si el paquete que esperas tiene un cierto tamaño, esto puede ser un poco lioso.

El módulo de Python json tiene una utilidad para formatear JSON, luego me he creado una función BASH que añado a mi .bashrc y que me ahorra fallos y dolores de cabeza.

function jcurl() { curl $@ | python -m json.tool; }

Para añadir esta función a tu .bashrc

 echo "function jcurl() { curl \$@ | python -m json.tool; }" >> ~/.bashrc

Twitter trends desde la shell

Twiter Trend desde Bash

Twiter Trend desde Bash

Se acabaron las vacaciones. El primer post de este año trata sobre un script que hice estas navidades.

La shell de GNU/Linux es muy potente. Hace tiempo vi una opción de la shell bash (por defecto en casi todas las distribuciones) que permite hacer conexiones TCP/IP de una forma sencilla y elegante.

Para demostrar su uso he decidido hacer un pequeño script bash que vaya mostrando el Top-Ten de las tendencias en Twitter. Una tendencia (trend) es una palabra que se usa masivamente en los tweets de todo el mundo. En fin de año, el hashtag #HappyNewYear fue un trend.

El script lo he desarrollado sobre la shell bash de Ubuntu. Por motivos de seguridad, la gente de Canonical deshabilita la opción de conexiones TCP/IP para bash, así que es necesario recompilar bash sin dicha restricción.

  1. Obtenemos el fuente:
    
    apt-get source bash
    cd bash-3.2/
    
    
  2. Editamos el archivo debian/rules y eliminamos la línea “--disable-net-redirections \
  3. Generamos el paquete:
            dkpg-buildpackage -rfakeroot
            

    Es posible que necesites instalar algunos paquetes necesarios para la generación. En mi caso fue sharutils.

  4. Instalamos nuestra “nueva” bash.
    sudo apt-get install ../bash-3.2*deb
    

Este es el código del script:


#!/bin/bash

GREEN='\e[0;32m'
BLUE='\e[0;34m'
RED='\e[0;31m'

NONE='\e[0m'

while [ 1 ]; do

exec 3<>/dev/tcp/search.twitter.com/80
echo -e "GET /trends/current.json\n\n" >&3
text=`cat <&3`

clear
echo -e $GREEN "Twitter current trends\n\n" $NONE
ind=1
while [ 1 ]; do
       textp=${text#*\"name\":\"}
       if [ "$textp" = "$text" ]; then
	       break
       else
           text="$textp"
       fi

       end=`expr index "$text" \"`
       trend=${text:0:(($end-1))}
       text=${text:$end}
       echo -e $ind. $BLUE $trend $NONE
       let ind++

done
sleep 10
echo -e $RED "\nupdating..." $NONE
done

Voy a explicar un poco el código (al pasar el salto)

Leer más de esta entrada