Logo
You
Code

Script en bash para obtener la cotizacion del dolar Billete y Divisa del BNA

Autor YouCode - http://www.youcode.com.ar/el-baul/script-en-bash-para-obtener-la-cotizacion-del-dolar-billete-y-divisa-del-bna-513

Este script baja la cotización del dólar desde la pagina del BNA y la inserta en MySql, también crea un archivo JSON

Este script en  bash lo pueden ejecutar desde un cron, mi cron esta de esta forma:
0 10-15 * * 1-5 /mi_carpeta/./dolarbna.sh
Le digo que se ejecute de 10hs a 15hs (que es el horario bancario) y solo de lunes a viernes (1-5) 
 
#!/bin/bash
#Baja la cotizacion del dolar desde la pagina del BNA

ARCHIVO="dolarBNAFuente.txt"
DESTINO="/var/www/html/TU_SITIO/dolarBNA.json"

#Elimino el archivo, sino va llenandolo y es lo que no queremos
rm dolarBNAFuente.txt

#Bajo desde la pagina del BNA y el grep me trae la parte del html que me interesa,
#luego lo guardo en un archivo txt.

curl -s https://www.bna.com.ar/Personas | grep -A 2 'Dolar U.S.A' >> dolarBNAFuente.txt
if [ $? -ne 0 ];
then
    exit 0
fi

#con cat y todos los demas comandos, extraigo los valores de los diferentes dolares.
DOLARB_COMPRA=$(cat $ARCHIVO | head -2  | tail  -1 | sed  's/<//g' | sed 's/>//g' | sed 's/td//g' | sed 's/,/./g' |  sed 's/ //g' | rev| cut -b 3-|rev)
DOLARB_VENTA=$(cat $ARCHIVO | grep -A 2 'Dolar U.S.A' | head -3  | tail  -1 | sed  's/<//g' | sed 's/>//g' | sed 's/td//g' | sed 's/,/./g' |  sed 's/ //g' | rev| cut -b 3-|rev)
DOLARD_COMPRA=$(cat $ARCHIVO | grep -A 2 'Dolar U.S.A' | head -6  | tail  -1 | sed  's/<//g' | sed 's/>//g' | sed 's/td//g' | sed 's/,/./g' |  sed 's/ //g' | rev| cut -b 3-|rev)
DOLARD_VENTA=$(cat $ARCHIVO | grep -A 2 'Dolar U.S.A' | head -7  | tail  -1 | sed  's/<//g' | sed 's/>//g' | sed 's/td//g' | sed 's/,/./g' |  sed 's/ //g' | rev| cut -b 3-|rev)

#Preparo los datos de conexion a mi base de datos
DBHOST="localhost";
USER="USUARIO_db";
PASS='CLAVE_db';

#Preparo el INSERT, pero noten que si el registro ya existe, le digo que lo actualice

QUERY="insert into TU_BASE.cotizaciones values(1,$DOLARB_COMPRA,$DOLARB_VENTA,$DOLARD_COMPRA,$DOLARD_VENTA,CURDATE(),CURTIME(),NOW())
ON DUPLICATE KEY UPDATE dolar_billete_compra=$DOLARB_COMPRA,
dolar_billete_venta=$DOLARB_VENTA,
dolar_divisa_compra=$DOLARD_COMPRA,
dolar_divisa_venta=$DOLARD_VENTA,fecha_update=curdate(),hora_update=curtime(),fecha_hora=now();";

#Inserto en la base la cotizacion
(mysql -N -h "$DBHOST" -u "$USER" -p"$PASS" -e "$QUERY" 2> /dev/null)

#Creo el archivo JSON por si quiero tenerlo para levantarlo con PHP o lo que esten usando.
JSON_FMT='{"DOLARB_COMPRA":"%s","DOLARB_VENTA":"%s","DOLARD_COMPRA":"%s","DOLARD_VENTA":"%s"}'
printf "$JSON_FMT" "$DOLARB_COMPRA" "$DOLARB_VENTA" "$DOLARD_COMPRA" "$DOLARD_VENTA" > $DESTINO


Esta es la estructura de la tabla, el campo idregistro es la KEY pero NO es auto-increment !
CREATE TABLE cotizaciones (
  idregistro int NOT NULL DEFAULT 1,
  dolar_billete_compra double(10, 2) DEFAULT 0.00,
  dolar_billete_venta double(10, 2) DEFAULT 0.00,
  dolar_divisa_compra double(10, 2) DEFAULT 0.00,
  dolar_divisa_venta double(10, 2) DEFAULT 0.00,
  fecha_update date DEFAULT NULL,
  hora_update time DEFAULT NULL,
  fecha_hora datetime DEFAULT NULL,
  PRIMARY KEY (idregistro)
)
http://www.youcode.com.ar/el-baul/script-en-bash-para-obtener-la-cotizacion-del-dolar-billete-y-divisa-del-bna-513