Consultar datos de una Pagina web

945 views
Skip to first unread message

GETIANG

unread,
May 13, 2016, 6:48:00 PM5/13/16
to Comunidad de Visual Foxpro en Español
Buenas tardes grupo

Quisiera saber si algunos de ustedes ha podido obtener información "especifica" de una pagina web

Lo que necesitamos es obtener el cambio del dolar de la pagina "dolartoday"

Gracias

Rh Yac

unread,
May 13, 2016, 6:57:18 PM5/13/16
to publice...@googlegroups.com
Con esto sacaba el clima de una pagina.

*-----------------------------------------------------------------------------
proc climax2
SET TALK OFF
SET SAFETY OFF
XPATMP = "C:\windows\TEMP"
climax=''

oClima=CREATEOBJECT("msxml2.xmlhttp")
oClima.OPEN("GET", pagw ,.F.)
oClima.SEND(.NULL.)

STRTOFILE(oClima.responseText, XPATMP + "\CLIMA.XML")

M.Respuesta = FILETOSTR(XPATMP + "\CLIMA.XML")

begind='"realTempC":"'
enddel='","snw"'
M.buscado   =  STREXTRACT(M.Respuesta, begind , enddel )
climax=climax+'Temp.: '+m.buscado+'º'


begind='<p class="wx-narrative">'
enddel='</p>'
M.buscado   =  STREXTRACT(M.Respuesta, begind , enddel )
climax=climax+'   '+m.buscado

climax=climax+'  Fuente: www.weather.com'


IF FILE(XPATMP + "\CLIMA.XML")
   M.INSTRU = "ERASE " + XPATMP + "\CLIMA.XML"
   &INSTRU
ENDIF
RELEASE oClima
**?climax
retu




________________________________
Rene Yacyna
Córdoba - Argentina.
03546 15455857

Irwin Rodriguez

unread,
May 13, 2016, 7:05:39 PM5/13/16
to publice...@googlegroups.com
GETIANG,

El ejemplo que señala René es muy bueno, yo lo hago igual para consultar datos del CNE.

Saludos...!
--
DISTRIBUIDORA IRSESU, C.A
J-29947174-7
Irwin Rodríguez
- Director
Analista Programador - Freelance
+584125210679

Barquisimeto - Venezuela
Desarrollos online dentro y fuera del país

GETIANG

unread,
May 13, 2016, 9:32:23 PM5/13/16
to Comunidad de Visual Foxpro en Español
Gracias a todos

Me comunique con el Personal de DolarToday y me dan una Página actualizada con los datos requeridos en formato .json

Lo único que necesito es LEER esta dirección y traer el cambio 


La cual se actualiza diariamente

He revisado la librería de Victor Espina, pero no logro dar con solo leer el archivo final .json

Gracias

Luis Maria Guayan

unread,
May 15, 2016, 3:10:21 PM5/15/16
to Comunidad Visual FoxPro en Español
Mira si este ejemplo te ayuda:

-- Conversor de divisas utilizando la API de Google --

 
Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español

El 13 de mayo de 2016, 19:48, GETIANG<getia...@gmail.com> escribió:

Angel Dario Rodriguez

unread,
May 15, 2016, 3:20:24 PM5/15/16
to publice...@googlegroups.com
Maestro Luis, tengo esta pagina:


Maestro Lus, lo que necesito es enviarle el Tax-ID del contribuyente para que me devuelva el nombre de dicho contribuyente y no he dado con la solucion. Puede usted echarle un vistazo?
Message has been deleted

Marco Plaza

unread,
May 15, 2016, 7:29:56 PM5/15/16
to Comunidad de Visual Foxpro en Español



Hola, para obtener un objeto como el que muestro arriba, descarga las funciones nfJson desde vfpx (  https://vfpx.codeplex.com/releases/view/620040 )

luego simplemente:




oDolar
=  nfjsonread( descargar( 'https://s3.amazonaws.com/dolartoday/data.json' ) )



*------------------------------------------
function descargar( url )
*------------------------------------------

Local loXMLHTTP As "MSXML2.XMLHTTP"
loXMLHTTP
= Createobject("MSXML2.XMLHTTP")

With loXMLHTTP
   
.Open("GET", url ,.F.)
   
.Send()
    cres = .ResponseText
    Return cres
Endwith

Kike. Sevilla

unread,
May 16, 2016, 5:43:20 AM5/16/16
to Comunidad de Visual Foxpro en Español
He tratado de realizar este programita, pero me ha dado este error:

"OLE Idispatch exception code 0 from msxml3.dll: acceso denegado."

¿Sabrías decirme el porqué?

Muchas gracias.

Kike.
Sevilla - España.

GETIANG

unread,
May 28, 2016, 1:07:16 PM5/28/16
to Comunidad de Visual Foxpro en Español
Gracias a todos - Gracias Marco, puse en practica tu sugerencia y me lanza este error, podrías por favor guiarme, gracias de antemano...!

Auto Generated Inline Image 1

Elides Paredes

unread,
May 28, 2016, 4:05:35 PM5/28/16
to Comunidad de Visual Foxpro en Español

Estimados amigos.

También tengo la misma necesidad del amigo GETIANG , en Venezuela el precio del dólar varía mucho, creo que a diario. Y el gobierno prohíbe publicar la información del precio del dolar en el 'mercado negro' aunque en realidad es el mercado común porque comprar de forma legal es toda una hazaña.

Por ese motivo quisiera agregar una  función que me permita desde Mercado Libre averiguar el verdadero valor. 
La página que sugiere el maestro Luis Ma. es de Google y ellos lógicamente se ven obligados a poner el precio oficial. Que no lo consiguen sino los que llamamos 'enchufados al gobierno' de manera que para nosotros, los Venezolanos la herramienta para buscar el precio es muy importante.

Muchas gracias.
Saludos
Elides Paredes
Barquisimeto Venezuela

Marco Plaza

unread,
May 28, 2016, 4:20:56 PM5/28/16
to Comunidad de Visual Foxpro en Español


el problema es que hoy es sábado, la página devuelve fecha con acento! ( Sábado ),
 y msxml no realiza correctamente la transformación de código de página, por lo que
responsetext trae caracteres inválidos.

Para solventar simplemente usa , donde dice responseText, strconv( .responseBody,1) y listo.

de igual forma, anexo el programa un poco extendido:

*-----------------------------
* obtener cotización del dólar en bolívares
* desde https://s3.amazonaws.com/dolartoday/data.json
* requiere nfjsonRead.prg
* descargar desde vfpx: https://vfpx.codeplex.com/releases/view/620040
*--------------------------------

#Define crlf Chr(13)+Chr(10)

Public oDolar,cJson  && puedes explorar oDolar en el depurador
cJson
= .Null.

Set Path To \proyectos\nfjson

Wait 'Obteniendo cotización...' Window Nowait
urlFuenteJson
= 'https://s3.amazonaws.com/dolartoday/data.json'

cJson
= descargar( m.urlFuenteJson )

Try
    oDolar
=  nfjsonread(  m.cJson )
    jsonOk
= .T.

Catch To oError

   
Messagebox(oError.Message,0)

    jsonOk
= .F.

Endtry

If !m.jsonOk
   
Return
Endif

With oDolar.usd

    cotizaci
ón = Concat( ;
       
'Cotización Dólar/Bs a ',oDolar.__timestamp.fecha,':',crlf,;
       
'Dolartoday:',.dolartoday,crlf,;
       
'Cencoex:',.cencoex,crlf,;
       
'Efectivo:',.efectivo_real,crlf,;
       
'Promedio:',.promedio,crlf,;
       
'Sicad2:',.sicad2,crlf,;
       
'Transferencias.:',.transferencia)

Endwith

Messagebox( m.cotización,0)



*------------------------------------------
Function descargar( url )
*------------------------------------------

Local oError
Local loXMLHTTP As "MSXML2.XMLHTTP"
loXMLHTTP
= Createobject("MSXML2.XMLHTTP")

With loXMLHTTP As msxml.XMLHTTP
   
Try
       
.Open("GET", m.url ,.F.)
       
.setRequestHeader('Accept','text/html')
       
.Send()
        cres
= STRCONV(.ResponseBody,1)
   
Catch To oError
       
Messagebox('Error obteniendo datos desde '+m.url,0)
        cres
= .Null.
   
Endtry

   
Return cres

Endwith

*----------------------------------------------------------------------------------------------------------------
Function Concat(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26)
*----------------------------------------------------------------------------------------------------------------
Local ss
ss
= ''
For x = 1 To Pcount()
    ss
= ss+Transform(Nvl( Evaluate(Transform('P'+Tran(x,'@B 99'))),'') )+' '
Endfor

Return ss

 

GETIANG

unread,
May 28, 2016, 4:42:17 PM5/28/16
to Comunidad de Visual Foxpro en Español
Gracias Marco

Funciona de Maravilla

Te lo agradezco mucho, un abrazo...!

Marco Plaza

unread,
May 28, 2016, 5:10:17 PM5/28/16
to Comunidad de Visual Foxpro en Español

Vale!

Elides Paredes

unread,
May 28, 2016, 5:56:04 PM5/28/16
to Comunidad de Visual Foxpro en Español
Amigo Marco..
Eres de los grandes..! eres el autor de la página? Codeplex...

Hice lo que dices, bajé el prg  nfjsonRead.prg, copié el código en un prg y cambié el path en ese código para donde está el PRG, sin embargo me dá éste error

Ver imagen anexa


Gracias
Elides Paredes
Barquisimeto Venezuela
 

Marco Plaza

unread,
May 28, 2016, 7:31:25 PM5/28/16
to Comunidad de Visual Foxpro en Español

verifica que puedas acceder a la URL:

Desde el propio editor de VFP, haz ctrl+click en la URL de dolartoday y se abrirá tu navegador mostrando la respuesta Json
( si tu navegador por defecto es IE , no lo verás en pantalla, debes incluir esta clave de registro:
http://wilsonvargas.azurewebsites.net/como-ver-un-archivo-json-desde-internet-explorer/ )

Me faltó mostrar la razón que da msxml.xmlhtt, pero aquí la incluyo ( deshaciendome también de un código feo para mostrar la cotización ):

*-----------------------------
* obtener cotización del dólar en bolívares
* desde https://s3.amazonaws.com/dolartoday/data.json
* requiere nfjsonRead.prg
* descargar desde vfpx: https://vfpx.codeplex.com/releases/view/620040
*--------------------------------

#Define crlf Chr(13)+Chr(10)

Public oDolar,cJson  && puedes explorar oDolar en el depurador
cJson
= .Null.

Set Path To \proyectos\nfjson

Wait 'Obteniendo cotización...' Window Nowait
urlFuenteJson
= 'https://s3.amazonaws.com/dolartoday/data.json'

cJson
= descargar( m.urlFuenteJson )


Wait Clear


Try
    oDolar
=  nfjsonread(  m.cJson )
    jsonOk
= .T.

Catch To oError

   
Messagebox(oError.Message,0)

    jsonOk
= .F.

Endtry

If !m.jsonOk
   
Return
Endif

With oDolar.
usd

TEXT TO cotizaci
ón TEXTMERGE noshow
 
Cotización del Dólar/Bs a <<oDolar.__timestamp.fecha>>
   
-Dolartoday: <<.dolartoday>>
   
-Cencoex:<<.cencoex>>
   
-Efectivo:<<.efectivo_real>>
   
-Promedio:<<.promedio>>
   
-Sicad2:<<.sicad2>>
   
-Transferencias.:<<.transferencia>>
ENDTEXT

Endwith

Messagebox( m.cotización,0)


*------------------------------------------
Function descargar( url )
*------------------------------------------

Local oError
Local loXMLHTTP As "MSXML2.XMLHTTP"
loXMLHTTP
= Createobject("MSXML2.XMLHTTP")

With loXMLHTTP As msxml.XMLHTTP
   
Try
       
.Open("GET", m.url ,.F.)
       
.setRequestHeader('Accept','text/html')
       
.Send()

        cres
= Strconv(.ResponseBody,1)
   
Catch To oError
        AERROR
(aa)
       
Messagebox('Error obteniendo datos desde '+m.url+':'+crlf+aa(1,3),0)

        cres
= .Null.
   
Endtry

   
Return cres

Endwith
Ingresar el código aquí...




Saludos

Elides Paredes

unread,
May 28, 2016, 10:50:02 PM5/28/16
to Comunidad de Visual Foxpro en Español
Estimado amigo.
La verdad a veces creo que puede sonar exagerado. pero el agradecimiento y las bendiciones que suelo enviarles a ustedes los que comparten sus conocimientos, son muy grandes, no puedo expresarlo de otra manera. Esto es algo invaluable para mi, porque sería imposible para mi hacerlo.

He logrado tener en mis aplicaciones,  cosas que solo ustedes los grandes pueden hacer, de otra manera sería imposible, de verdad les estoy eternamente agradecido. gracias por su  bondad al compartir ese trabajo.
Saludos desde 
Barquisimeto Venezuela
Elides Paredes.

Pd. Aún no he resuelto el problema con el computador de Mesa que tiene XP, y Explorer, incluso saqué de las aplicaciones de windows el I.E. pero al hacer click + ctrl abre la página con ese navedador y produce error. El programa sin embargo me corrió bien en el de mesa, con Windows 7, Ya entré a la página de wilson Vargas, pero no se que hacer con el archivo  IE-Json.reg . Pero estoy extremadamente cansado por tratar de resolver el problema . Dios te bendiga..!

Elides Paredes

unread,
May 29, 2016, 12:17:54 AM5/29/16
to Comunidad de Visual Foxpro en Español

Estimados amigos.
La respuesta enviada por el amigo Marco Plaza, me funciona perfectamente en el portátil con Windows 7 pero, me sigue dando el error con Windows XP, porque aunque le quité el internet Explorer cuando le hago click + cntrl accede a la página con internet explorer, ya hice muchas pruebas y no logro hacerlo funcionar.
Como hago para que acceda a la página con google crome? si es el problema, según lo entendí.. (ojo también cambié el archivo de registros de windows, tal como lo indica la referencia del mismo amigo Marco., 


"( si tu navegador por defecto es IE , no lo verás en pantalla, debes incluir esta clave de registro:
http://wilsonvargas.azurewebsites.net/como-ver-un-archivo-json-desde-internet-explorer/ )" entonces hice eso, fuí a la página, copie y guardé el archivo como IE-Json.reg y le dí doble click, eso lo incluyó, según leí en otra página en los registros de windows. pero.. nada que funciona en XP

Gracias por la ayuda, seguiré probando, pero si alquien me ayuda. pues..!!! Se lo agradezco..
Elides Paredes--

Marco Plaza

unread,
May 29, 2016, 12:53:57 PM5/29/16
to Comunidad de Visual Foxpro en Español


Hola Elides, Internet explorer no tiene nada que ver con el problema ( no mencionas cual mensaje estás recibiendo );
 sólo te indiqué que si usas IE para chequear el servicio web ( https://s3.amazonaws.com/dolartoday/data.json )
 no verás la respuesta como la muestra firefox o chorme a menos que modifiques la clave de registro.

De cualquier forma, parece que tienes un problema con el firewall, prueba desactivándolo, y abre otro hilo, pues éste está finalizado.

Saludos.!
Message has been deleted

Pedro Olivares

unread,
Feb 5, 2021, 4:46:44 PM2/5/21
to Comunidad de Visual Foxpro en Español
Caramba Sr.Plaza, escribo esto en Febrero del 2021 y todavía tiene vigencia.

Gracias.

Marco Plaza

unread,
Feb 5, 2021, 7:04:26 PM2/5/21
to Comunidad de Visual Foxpro en Español

Gracias.. que bueno que no han cambiado la API... !

 Elides.. espero que todavía no tengas ese XP 'rodando' pero si es así.. tal vez lo que pasaba es que no tenias 
soporte para TLS  ( aunque ahora ese servicio ya no es seguro.. no se necesita ).

Saludos.

PD:
revisando ese fuente.. mejor usar textmerge que concat() .. - debe ser que comenzamos mostrando dos valores y luego se fueron añadiendo más?- 

<code>


With oDolar.usd


TEXT TO cotización TEXTMERGE noshow
Cotización del Dólar/Bs a <<oDolar._timestamp.fecha>>

-Dolartoday: <<.dolartoday>>
-Cencoex:<<.cencoex>>
-Efectivo:<<.efectivo_real>>
-Promedio:<<.promedio>>
-Sicad2:<<.sicad2>>
-Transferencias.:<<.transferencia>>
ENDTEXT
Endwith

</code>
Reply all
Reply to author
Forward
0 new messages