Recent

Author Topic: Traer datos de un sitio web, con o sin uso de API  (Read 10406 times)

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Traer datos de un sitio web, con o sin uso de API
« on: April 19, 2017, 03:19:29 pm »
Hola muchachos, he buscado info pero me quede corto, no encuentro al menos con mis limitaciones del ingles. no logro dar con las palabras claves y quizas me puedan ayudar, de paso vamos ampliando este foro en español..

Me gustaria agregar a un sistema que tengo, la opcion de consultar un precio de un producto en algun sitioweb de referencia y mostrar el resultado.. sin tener que entrar a dicho sitio, nada de browser al menos visible.. Entiendo que para estas cosas existen las API de los sitios web que nos dan acceso a los sistemas, pero no conozco nada desde el lado de lazarus, componentes, codigos, etc. podrian guiarme un poco? lo ideal para mi seria consultar de forma trasparente y solo mostrar el/los precio/s sugerido/s (de la web consultada, mercadolibre, ebay lo que sea) de dicho producto.

muchas gracias!
« Last Edit: April 19, 2017, 03:30:11 pm by daragor »
Inculcando el software libre.
https://www.webscom.com.ar

Edson

  • Hero Member
  • *****
  • Posts: 1296
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #1 on: April 19, 2017, 07:28:04 pm »
... de consultar un precio de un producto en algun sitioweb de referencia y mostrar el resultado.. sin tener que entrar a dicho sitio, nada de browser al menos visible..

Pues para leer el precio, vas a tener que entrar al sitio, es decir realizar un acceso al servidor. Mis preguntas serían:
En los sitios que piensas consultar ¿tienen una URL fija y una posición fija, los elementos que contienen los precios que vas a consultar, o son cambiantes/aleatorias?

Si piensas usar MercadoLibre, debo decir que esas páginas cambian constantemente, y si quieres consultar allí, tendrías que implementar un robot de búsqueda con cierto nivel de inteligencia para ubicar los precios. Hay muchos parámetros que programar allí.

Lo ideal, sería que consultes a un sitio que maneje Web Services, y así se puede realizar la consulta de manera más sencilla.

Saludos.
Lazarus 2.2.6 - FPC 3.2.2 - x86_64-win64 on Windows 10

lainz

  • Hero Member
  • *****
  • Posts: 4449
    • https://lainz.github.io/
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #2 on: April 19, 2017, 07:54:04 pm »
Hola, mira yo aprendí a hacerlo con JavaScript con AngujarJS 1.x

Pero es lo mismo en lazarus, pero nunca lo hice en lazarus, tenes que entrar acá para mercado libre:
http://dev-test.mercadolibre.com/apps/rest-console/#response

Por ejemplo para argentina, tenes que tener un token que es tuyo como desarrollador tenes que tener cuenta en mercado libre. Lo mismo para cualquier API como la de youtube o cualquier api de google también tenes que estar registrado.

https://api.mercadolibre.com/sites/MLA/search?q=ipod (Si entras ahi directo vas a ver HTML, no es lo que buscas vos)

Haces GET con tu token y te devuelve JSON puro, sin HTML
Quote
{"site_id":"MLA","query":"ipod","paging":{"total":7837,"offset":0,"limit":50},"results":[{"id":"MLA614098984","site_id":"MLA","title":"Ipod Touch 16 Gb 6ta Generación - Gold","subtitle":null,"seller":{"id":195832229,"power_seller_status":"platinum","car_dealer":false,"real_estate_agency":false,"tags":[]},"price":6399,"currency_id":"ARS","available_quantity":2,"sold_quantity":67,"buying_mode":"buy_it_now","listing_type_id":"gold_special","stop_time":"2035-11-19T07:00:00.000Z","condition":"new","permalink":"http://articulo.mercadolibre.com.ar/MLA-614098984-ipod-touch-16-gb-6ta-generacion-gold-_JM","thumbnail":"http://mla-s1-p.mlstatic.com/463211-MLA20522750405_122015-I.jpg","accepts_mercadopago":true,"installments":null,"address":{"state_id":"AR-C","state_name":"Capital Federal","city_id":"TUxBQlJFQzkyMTVa","city_name":"Recoleta"},"shipping":{"free_shipping":true,"mode":"me2"},"seller_address":{"id":171876304,"comment":"","address_line":"","zip_code":"","country":{"id":"AR","name":"Argentina"},"state":{"id":"AR-C","name":"Capital Federal"},"city":{"id":"TUxBQlJFQzkyMTVa","name":"Recoleta"},"latitude":-34.5947723,"longitude":-58.3959783},"attributes":[],"original_price":null,"category_id":"MLA43718","official_store_id":477,"reviews":{}}, ...

El JSON lo lees en lazarus con el lector de JSON que mas te guste, hay varios pero hay uno que viene con lazarus / fpc.

EDIT! Me equivoque en algo, hay parte de la API que es publica, asi que podes acceder así nomas sin el token si no son datos privados.

Lo podes probar acá
https://resttesttest.com/

En donde dice Method dejas GET y en endpoint pones https://api.mercadolibre.com/sites/MLA/search?q=ipod, despues haces Ajax request y listo te devuelve el json, eso nomas para que veas, lo mismo tenes que hacer en lazarus
« Last Edit: April 19, 2017, 08:37:10 pm by lainz »

Ñuño_Martínez

  • Hero Member
  • *****
  • Posts: 1186
    • Burdjia
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #3 on: April 20, 2017, 10:25:03 am »
Usa los componentes JEDI o Synapse.  Mis favoritos son estos últimos, aunque por desgracia el proyecto parece estar bastante muerto, porque hace años que no actualizan ni dan señales de vida. :( ¡De hecho todavía tienen un encuesta activa acerca de Kylix!

En cualquier caso, con cualquiera de los dos puedes descargarte el documento HTML y luego usar algún parser de XML para buscar los datos que necesites.  Si el documento HTML está bien formateado (sigue a rajatabla HTML 4.1, XHTML 1.0 ó HTML 5) no deberías tener muchos problemas.  Si por el contrario no sigue correctamente esos formatos (algo que por desgracia hacen casi todas las webs que he visto) tendrás que trabajártelo mucho.
Are you interested in game programming? Join the Pascal Game Development community!
Also visit the Game Development Portal

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #4 on: April 20, 2017, 03:43:39 pm »
Muchachos! es impresionante la ayuda que me dan, ahora voy a hacerme un tiempo para ir probando y analizando una a una sus propuestas y claro que voy a pasar a contar la experiencia con los componentes mencionados y con alguna web específica que vaya a probar... la verdad no soy experto en desarrollo web pero algo de idea tengo como para sumergirme...  :-[
Inculcando el software libre.
https://www.webscom.com.ar

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #5 on: April 21, 2017, 12:30:57 am »
Voy muy bien con el tema json, para leer datos ... estoy usando las unidades del fpc (... fphttpclient, fpjson, jsonparser). sin instalar nada extra, salvo los .dll de OpenSSL necesarios que son: libeay32.dll y ssleay32.dll, pegados junto al .exe

La URL API de mercadolibre: https://api.mercadolibre.com/sites/MLA/search?q=smatwhatch#json

Y el resultado, en una pantalla de pruebas adjunto

Es simple... pero funciona, se puede trabajar con los datos.

Sigo haciendo pruebas, como por ejemplo usar 2 o más palabras en la busqueda, cosa que por ahora me da error! creo que voy a usar un stringreplace con el espacio x %20

« Last Edit: April 21, 2017, 03:33:38 am by daragor »
Inculcando el software libre.
https://www.webscom.com.ar

jmm72

  • Jr. Member
  • **
  • Posts: 79
  • Very experienced in being a beginner...
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #6 on: April 21, 2017, 11:11:00 pm »
Sigo haciendo pruebas, como por ejemplo usar 2 o más palabras en la busqueda, cosa que por ahora me da error! creo que voy a usar un stringreplace con el espacio x %20

Haz una búsqueda con dos palabras en la web para ver cómo genera la URL y saldrás de dudas. Probablemente necesitarás algo más que el espacio, seguro que escondida en alguna librería o paquete hay una funcion para codificar y decodificar el Percent Encoding. Yo hice una función así en 40 líneas, no es nada complicado: http://en.wikipedia.org/wiki/Percent-encoding
Lazarus 1.6.4 + FPC 3.0.2 64bits under Windows 7 64bits
Only as a hobby nowadays
Current proyect release: TBA

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #7 on: April 24, 2017, 09:04:23 pm »
Gracias jmm72 por la info. Ya esta solucionado con ese stringreplace para armar la cadena de busqueda.

Les dejo los archivos por si les interesa de manera q el tema quede "con resolución".
https://github.com/blogwebscom/MLConsulta
Inculcando el software libre.
https://www.webscom.com.ar

Ericktux

  • Sr. Member
  • ****
  • Posts: 345
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #8 on: January 09, 2023, 08:36:12 am »
Gracias jmm72 por la info. Ya esta solucionado con ese stringreplace para armar la cadena de busqueda.

Les dejo los archivos por si les interesa de manera q el tema quede "con resolución".
https://github.com/blogwebscom/MLConsulta

Hola amigo, puede volver a compartir el link porfavor, parece que se ha caído, saludos

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #9 on: January 09, 2023, 12:39:57 pm »
Hola Ericktux! claro busque los codigos y los volvi a subir a git. Lo que si me paso, xq es un proyecto que no lo volvi a usar nunca más, es que lo volvi a compilar en windows 10 y funciona! pero.. al cerrar me da un error de Access Violation en una direccion.. NO se porque..

Lo que hice es actualizar los dll de openssl (libeay32.dll y ssleay32.dll) para 64bits y como me daba un error en el compilador agregue a uses el "opensslsockets" .. tambien he notado un error en algunos precios en la lista, salen la mayoría bien pero algunos parece q no lo trabaja correctamente... en fin

Te dejo el código original que data del 2017 y te dejo los archivos nuevos con los que estuve haciendo pruebas, seria bueno dejarlos funcionando todo ok asi que cualquier novedad te pido que me informes, así actualizamos.

Salu2
Inculcando el software libre.
https://www.webscom.com.ar

Ericktux

  • Sr. Member
  • ****
  • Posts: 345
Re: Traer datos de un sitio web, con o sin uso de API
« Reply #10 on: January 09, 2023, 05:08:05 pm »
gracias amigo les daré un vistazo y le informo

 

TinyPortal © 2005-2018