Skip to content

Instantly share code, notes, and snippets.

@Irwin1985
Last active October 13, 2022 16:49
Show Gist options
  • Select an option

  • Save Irwin1985/f2ac4801d177ba48aa537a7a49b072d7 to your computer and use it in GitHub Desktop.

Select an option

Save Irwin1985/f2ac4801d177ba48aa537a7a49b072d7 to your computer and use it in GitHub Desktop.
* =====================================================================================
* Consulta las tasas del dolar desde el sitio web:
* https://www.dolarsi.com/api/api.php?type=valoresprincipales
*
* Dependencias:
* VfpRestClient: https://github.com/Irwin1985/VFPRestClient
* JSONFox: https://github.com/Irwin1985/JSONFox
*
* NOTA:
* 1. Cambie las rutas de vfpRestClient y JSONFox por las correspondientes.
* 2. El objeto de nombre 'Argentina' tiene 2 propiedades adicionales, para
* manipularlos solo use las variables: loAfluencia y loObservaciones
* 3. La serialización de JSON a Objeto Fox no sustituye los valores string
* por los reales, por lo tanto todo es tratado como un string.
* ===================================================================================== *
Close Databases all
Local lcVfpRestClientDir, lcJsonFoxDir, loRest, loJson, i, loRow, loAfluencia, loObservaciones
lcVfpRestClientDir = "f:\desarrollo\github\vfprestclient\vfprestclient.prg"
lcJsonFoxDir = "f:\desarrollo\github\jsonfox\jsonfox.app"
Set Procedure To (lcVfpRestClientDir) Additive
loRest = Createobject("Rest")
loRest.AddRequest(loRest.Get, "https://www.dolarsi.com/api/api.php?type=valoresprincipales")
loRest.addHeader("Content-Type", "application/json")
loRest.Send()
If loRest.Status != 200
Messagebox(loRest.LastErrorText, 16, "Error")
Return
Endif
Do (lcJsonFoxDir)
Create Cursor cData ( ;
compra c (12), ;
venta c (12), ;
agencia c (12), ;
nombre c (25), ;
variacion c (12), ;
ventacero c (5) , ;
decimales c (12), ;
mejor_compra c (12), ;
mejor_venta c (12), ;
fecha c(8) , ;
recorrido c(5))
loJson = _Screen.json.parse(loRest.ResponseText)
For i = 1 To Alen(loJson._,1) // OJO: quitar el punto y el guión bajo '_' si se usa JSONFOX.app v9 o superior.
Append Blank in cData
loRow = loJson._[i] // OJO: quitar el punto y el guión bajo '_' si se usa JSONFOX.app v9 o superior.
If Type('loRow.casa.compra') = 'C'
replace compra with loRow.casa.compra
EndIf
If Type('loRow.casa.venta') = 'C'
replace venta with loRow.casa.venta
EndIf
If Type('loRow.casa.agencia') = 'C'
replace agencia with loRow.casa.agencia
EndIf
If Type('loRow.casa.nombre') = 'C'
replace nombre with loRow.casa.nombre
EndIf
If Type('loRow.casa.variacion') = 'C'
replace variacion with loRow.casa.variacion
EndIf
If Type('loRow.casa.ventacero') = 'C'
replace ventacero with loRow.casa.ventacero
EndIf
If Type('loRow.casa.decimales') = 'C'
replace decimales with loRow.casa.decimales
EndIf
If Type('loRow.casa.mejor_compra') = 'C'
replace mejor_compra with loRow.casa.mejor_compra
EndIf
If Type('loRow.casa.mejor_venta') = 'C'
replace mejor_venta with loRow.casa.mejor_venta
EndIf
If Type('loRow.casa.fecha') = 'C'
replace fecha with loRow.casa.fecha
EndIf
If Type('loRow.casa.recorrido') = 'C'
replace fecha with loRow.casa.recorrido
EndIf
If Type('loRow.casa.afluencia') = 'O'
loAfluencia = loRow.casa.afluencia
EndIf
If Type('loRow.casa.observaciones') = 'O'
loObservaciones = loRow.casa.observaciones
EndIf
Endfor
Store .null. to loRest, loJson, loRow, loAfluencia, loObservaciones
Release loRest, loJson, loRow, loAfluencia, loObservaciones
Select cData
Browse
@iamrdb63
Copy link

Hola Irwin... en la linea 52 me da error "LOJSON is not an object". Te ha pasado? Saludos

@Irwin1985
Copy link
Author

Irwin1985 commented Oct 12, 2022

Hola Roberto, estás usando JSONFox.app versión 9? de ser así entonces tienes que quitar el punto y el guión bajo en las líneas 52 y 54 porque esa versión ya no necesita del array especial con ese nombre "_" sino que el resultado es convertido directamente en array.

@agarciagaray
Copy link

Saludos Irwin.

Estuve haciendo unas pruebas con el código, me corrió bien, intente adaptarla a otra página que me devuelve un JSON similar al que tiene el código, modifique lógicamente la tabla a los campos que me devuelve sin embargo cuando se hace esta instrucción no parsea la respuesta, el código o la línea que no trabaja es esta: loJson = _Screen.json.parse(loRest.ResponseText) ¿qué puedo mirar?.

Esta es la respuesta de la consulta: [{"valor":"4466.73","unidad":"COP","vigenciadesde":"2022-09-03T00:00:00.000","vigenciahasta":"2022-09-06T00:00:00.000"}]

Alejandro García.

@Irwin1985
Copy link
Author

Hola Alejo querido, he copiado tu JSON de ejemplo y lo ejecuto contra mi JSONFox.app versión 9 y funciona sin problemas. Qué error te muestra y qué versión estás usando? para conocerla ejecuta ?_screen.json.version
image

@iamrdb63
Copy link

iamrdb63 commented Oct 12, 2022

Hola Roberto, estás usando JSONFox.app versión 9? de ser así entonces tienes que quitar el punto y el guión bajo en las líneas 52 y 54 porque esa versión ya no necesita del array especial con ese nombre "_" sino que el resultado es convertido directamente en array.

Hola, en efecto usé la última del repositorio, la 9.3 . Gracias funcionó perfecto
Saludos

@agarciagaray
Copy link

Irwin, gracias por la respuesta y ayuda en corregir un detalle en mi código, el cual es una adaptación a tu código para poder ser utilizada en Colombia con la TRM que el gobierno nacional publica en una página web para este fin.

Si gustas puedes hacer un gist para esta adaptación y que se beneficien otros compañeros de Colombia. Gracias como siempre por todo.

@Irwin1985
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment