martes, 16 de julio de 2013

Vigilar precios de Amazon con bash

Aprovechando el despegue del comercio electrónico en España y el exitoso desembarco de Amazon, voy a compartir un pequeño script Bash para programar alertas de bajada de precio de un artículo. Sí, ya sé que existen servicios como camelcamelcamel que permiten hacer eso vía Web y mediante el uso de extensiones para el navegador. Lo uso desde hace años con satisfacción, pero también me gusta el DIY (hágalo usted mismo) y es un buen ejemplo de problema cotidiano en la era de Internet que podemos resolver, aprendiendo algo de paso, si usamos Linux o Mac OS X, ya que ambos cuentan con la potente shell de línea de comandos Bash.

Como artículo de ejemplo he elegido el lector de libros electrónicos Kindle, ya que a veces se hacen descuentos interesantes y es un producto altamente recomendable para lectores en general y techies en particular.

Mi intención ha sido dejar el script lo más sencillo posible, pero sin perjudicar la legibilidad para una fácil adaptación a otros artículos (cambiando las variables donde se guarda el URL y el precio) y garantizando cierta compatibilidad entre sistemas Linux y Mac OS X. Para lograr esto último, el script puede usar dos formas distintas de descargar la página web para posteriormente comprobar el precio. En Linux suele estar preinstalado Wget, mientras que en Mac OS X puede confiarse en la presencia de cURL. Se usan filtros estándares como grep y cut, presentes en ambos sistemas, para extraer el precio. Para avisar al usuario en caso de detectar una bajada, he optado por la forma más sencilla que involucre al escritorio gráfico: abrir la página del artículo con el navegador web predeterminado. Para ello se usará open en los Mac y xdg-open en los Linux. El resultado queda más o menos así:

#!/bin/bash

# vigila-kindle: comprueba si ha bajado el precio
#                del artículo y abre su página web

url_prod="http://www.amazon.es/gp/product/B007HCCOD0"
pre_prod=79

if [ -n "$(which curl)" ]; then
    httpcli="curl -A 'Mozilla/5.0'"
else
    httpcli="wget -U 'Mozilla/5.0' -O -"
fi

if [ -n "$(which xdg-open)" ]; then
    open="xdg-open"
else
    open="open"
fi

precio=$($httpcli $url_prod 2> /dev/null \
                  | grep priceLarge \
                  | grep -o '[0-9][0-9]*,[0-9][0-9]*' \
                  | cut -d, -f1)

if [ -n "$precio" ]; then
    if [ $precio -lt $pre_prod ]; then
        $open $url_prod
    fi
fi

Para usarlo satisfactoriamente solo tendremos que copiarlo a un archivo llamado vigila-kindle (o el nombre del artículo si lo adaptamos a otro) en un directorio de ejecutables para los usuarios (p. ej. /usr/local/bin en Linux), darle permisos de ejecución y configurarlo para que se ejecute en el inicio de sesión o programar una tarea que lo ejecute una vez al día. Ya solo quedará esperar a que se nos abra la página del artículo mostrando un precio más bajo (con un poco de tiempo y de suerte ;)