-
-
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 |
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.
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.
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
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.
Listo amigo, aquí está el Gist para Colombia: https://gist.github.com/Irwin1985/633e06f84820616d94f49eeaccba3d2b#file-consulta_dolar_colombia-prg

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