* * *

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

daragor

  • New member
  • *
  • Posts: 11
    • 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.
http://www.webscom.net

Edson

  • Hero Member
  • *****
  • Posts: 800
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 1.6 - FPC 3.0.0 - x86_64-win64 on  Windows 7

lainz

  • Hero Member
  • *****
  • Posts: 2014
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: 651
    • 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.

daragor

  • New member
  • *
  • Posts: 11
    • 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.
http://www.webscom.net

daragor

  • New member
  • *
  • Posts: 11
    • 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.
http://www.webscom.net

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

  • New member
  • *
  • Posts: 11
    • 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.
http://www.webscom.net

 

Recent

Get Lazarus at SourceForge.net. Fast, secure and Free Open Source software downloads Open Hub project report for Lazarus