Si sos de los que viven chequeando el precio del dólar como si fuera el marcador de un Superclásico, este script en PowerShell es para vos. Se conecta a la API de Bluelytics, una fuente confiable para obtener datos sobre el mercado cambiario argentino, y permite consultar distintas cotizaciones de manera simple y efectiva. Vamos a desmenuzarlo y ver qué onda.
¿Qué hace este script?
Básicamente, te da acceso a tres tipos de consultas:
- Cotización actual del dólar y el euro, tanto oficial como blue.
- Cotizaciones históricas para una fecha específica.
- Evolución del tipo de cambio a lo largo del tiempo.
Todo esto lo hace interactuando con la API de Bluelytics, mostrando los valores de compra, venta y promedio en pantalla.
Desglosando el script
1. Definición de URLs
El script arranca con tres URLs clave:
$apiUrlLatest
: Para obtener las cotizaciones más recientes.$apiUrlHistorical
: Para consultar valores de un día específico.$apiUrlEvolution
: Para analizar la evolución de la divisa.
2. Función Obtener-DatosDivisas
Esta función se encarga de hacer la petición HTTP a la API y devolver los datos. Si algo sale mal, muestra un mensaje de error en rojo, porque sabemos que nada da más bronca que querer ver el precio del dólar y que falle la conexión.
3. Menú de opciones
Mostrar-Menu
es la función que presenta un menú en la terminal con siete opciones:
- Dólar Oficial
- Dólar Blue
- Euro Oficial
- Euro Blue
- Consulta por Fecha
- Evolución de la Divisa
- Salir
Bastante intuitivo y directo al grano.
4. Mostrar resultados
La función Mostrar-Resultados
toma los datos y los imprime con un poco de color (literalmente, usa ForegroundColor
para hacerlos más visibles). Es un detalle simple, pero mejora la experiencia de usuario.
5. Consulta por fecha
Consultar-PorFecha
permite ingresar una fecha y obtener la cotización correspondiente. útil si querés saber cuánto valía el dólar en una fecha clave (como cuando te diste cuenta que deberías haber comprado antes de que subiera).
6. Evolución de la divisa
Consultar-Evolucion
recopila datos históricos de la API y los muestra en formato de lista. Ideal para quienes les gusta ver tendencias.
7. Loop del menú
El script está dentro de un while ($true)
, lo que significa que se mantiene corriendo hasta que el usuario elija la opción de salir.
Comentarios y Mejoras
El script es bastante funcional y está bien estructurado, pero podría mejorarse con:
- Manejo de errores más detallado: Actualmente, solo devuelve un mensaje genérico. Estaría bueno capturar errores específicos, como un timeout o un problema en la API.
- Formato de salida mejorado: Si se guardara en un CSV o JSON, podría ser más útil para análisis posterior.
- Posibilidad de elegir más monedas: Aunque el script cubre las principales, podría extenderse a otras divisas.
- Opción de graficar la evolución: Con una herramienta como PowerShell +
Out-GridView
, podría hacer un gráfico rústico sin necesidad de salir de la terminal.
El Codigo
# Definición de las URLs de la API de Bluelytics para obtener datos de divisas
$apiUrlLatest = "https://api.bluelytics.com.ar/v2/latest" # URL para obtener los últimos valores de las divisas
$apiUrlHistorical = "https://api.bluelytics.com.ar/v2/historical?day=" # URL para obtener valores históricos de las divisas, requiere la fecha como parámetro
$apiUrlEvolution = "https://api.bluelytics.com.ar/v2/evolution.json" # URL para obtener la evolución de las divisas
# Función para obtener datos de la API
function Obtener-DatosDivisas {
param ([string]$url) # Recibe la URL como parámetro
try {
$response = Invoke-RestMethod -Uri $url -Method Get # Intenta obtener los datos de la API
return $response # Devuelve la respuesta de la API
} catch {
Write-Host "Error al obtener los datos de la API. Verificá tu conexión a Internet." -ForegroundColor Red # Muestra un mensaje de error si falla la conexión
return $null # Devuelve null si hay un error
}
}
# Función para mostrar el menú de opciones
function Mostrar-Menu {
Clear-Host # Limpia la pantalla de la consola
Write-Host "Selecciona una opción para consultar el tipo de cambio:" -ForegroundColor Cyan # Muestra el título del menú
Write-Host "1. Dólar Oficial" # Opción para consultar el Dólar Oficial
Write-Host "2. Dólar Blue" # Opción para consultar el Dólar Blue
Write-Host "3. Euro Oficial" # Opción para consultar el Euro Oficial
Write-Host "4. Euro Blue" # Opción para consultar el Euro Blue
Write-Host "5. Consulta por Fecha" # Opción para consultar valores históricos por fecha
Write-Host "6. Evolución de la Divisa" # Opción para consultar la evolución de las divisas
Write-Host "7. Salir" # Opción para salir del programa
}
# Función para mostrar los resultados de la consulta
function Mostrar-Resultados($tipo, $datos) {
Write-Host "Tipo de cambio: $tipo" -ForegroundColor Yellow # Muestra el tipo de cambio consultado
Write-Host "Compra: $($datos.value_buy)" # Muestra el valor de compra
Write-Host "Venta: $($datos.value_sell)" # Muestra el valor de venta
Write-Host "Promedio: $($datos.value_avg)" # Muestra el valor promedio
Write-Host "---------------------------------------" # Línea separadora
}
# Función para consultar el tipo de cambio por fecha
function Consultar-PorFecha {
$fecha = Read-Host "Ingresa la fecha (YYYY-MM-DD)" # Pide al usuario que ingrese una fecha
$data = Obtener-DatosDivisas -url "$apiUrlHistorical$fecha" # Obtiene los datos de la API para la fecha especificada
if ($null -ne $data) { # Si no hay errores en la consulta
Mostrar-Resultados "Dólar Oficial ($fecha)" $data.oficial # Muestra los resultados para el Dólar Oficial
Mostrar-Resultados "Dólar Blue ($fecha)" $data.blue # Muestra los resultados para el Dólar Blue
}
}
# Función para consultar la evolución de las divisas
function Consultar-Evolucion {
$data = Obtener-DatosDivisas -url $apiUrlEvolution # Obtiene los datos de la API para la evolución de las divisas
if ($null -ne $data) { # Si no hay errores en la consulta
$resumen = @{} # Crea un hashtable para almacenar los resultados por fuente
foreach ($entry in $data) { # Itera sobre los datos de la API
if (-not $resumen.ContainsKey($entry.source)) { # Si la fuente no está en el hashtable
$resumen[$entry.source] = @() # Crea un nuevo array para esa fuente
}
$resumen[$entry.source] += "[$($entry.date)]: Compra $($entry.value_buy) / Venta $($entry.value_sell)" # Agrega los datos al array de la fuente
}
foreach ($key in $resumen.Keys) { # Itera sobre las fuentes en el hashtable
Write-Host "\n$key" # Muestra el nombre de la fuente
$resumen[$key] | ForEach-Object { Write-Host $_ } # Muestra los datos de cada fuente
}
}
}
# Bucle principal del programa
while ($true) { # El programa se ejecuta indefinidamente hasta que el usuario decide salir
Mostrar-Menu # Muestra el menú de opciones
$opcion = Read-Host "Elige una opción" # Pide al usuario que elija una opción
$data = Obtener-DatosDivisas -url $apiUrlLatest # Obtiene los últimos datos de las divisas
if ($null -eq $data) { continue } # Si hay un error en la consulta, vuelve al inicio del bucle
switch ($opcion) { # Evalúa la opción elegida por el usuario
"1" { Mostrar-Resultados "Dólar Oficial" $data.oficial } # Muestra los resultados para el Dólar Oficial
"2" { Mostrar-Resultados "Dólar Blue" $data.blue } # Muestra los resultados para el Dólar Blue
"3" { Mostrar-Resultados "Euro Oficial" $data.oficial_euro } # Muestra los resultados para el Euro Oficial
"4" { Mostrar-Resultados "Euro Blue" $data.blue_euro } # Muestra los resultados para el Euro Blue
"5" { Consultar-PorFecha } # Llama a la función para consultar por fecha
"6" { Consultar-Evolucion } # Llama a la función para consultar la evolución
"7" { Write-Host "Saliendo del programa..." -ForegroundColor Green; break } # Sale del programa
default { Write-Host "Opción inválida, intentá de nuevo." -ForegroundColor Red } # Muestra un mensaje de error si la opción es inválida
}
Write-Host "Presioná Enter para continuar..." # Pide al usuario que presione Enter para continuar
Read-Host # Espera a que el usuario presione Enter
}
Conclusión
Este script es un buen punto de partida para quienes quieren consultar el mercado cambiario sin depender de páginas web. Es ágil, liviano y bastante claro en su estructura. Con algunas mejoras, podría convertirse en una herramienta imprescindible para cualquier economista de café o ahorrista amateur.
Si te gusta meter mano en PowerShell y la economía te interesa, ¡probalo y ajustalo a tu gusto!