2011-04-15 21 views
7

Estoy trabajando en un problema desafiante: encontrar una solución para obtener datos después de un proceso de reserva. Básicamente, tengo una página con un formulario (SLIM FORM), que necesito completar automáticamente con información proveniente del formulario del proveedor (por ejemplo, easyjet.com o hotels.com, cualquier sitio de reservas, básicamente). Por ejemplo: https://secure.booking.com/hotel/es/royal.html?sid=1c2bab12a0c64a541728840f52cd6401;errorc_checkin_invalid=checkin;errorc_intro_error_message_invalid=intro_error_message;errorv_stage=1;errorv_checkin=2011-07-05;errorv_hotel_id=90228;errorv_installment_count=1;errorv_hostname=www.booking.com;errorv_nr_rooms_9022801_80638194_0=1;errorv_interval=1 la información en mi reserva es lo que necesito obtener.Recuperar información después de completar una reserva (cURL, iFrame ...?) En un sitio web externo

enter image description here

Hice algunas pruebas y aquí lo que descubrí, por ahora:

No es posible tener las dos en la misma página, porque con doblez, no hay comunicación con el exterior servidor, y con iframes, deja la página CUANTO ANTES cambia el src del iframe.

lo tanto, decidí que el proceso de reserva debe suceder en una página especial, en el dominio del proveedor de reserva (easyjet.com ...)

1) Estoy en lo cierto al considerar la realización de la reserva en el sitio real, o ¿hay alguna manera de incluir el sitio web externo en mi página y realizar todo el proceso de reserva en él (básicamente llenando formularios a la salida, fecha de llegada, etc. ...)?

Si no es posible, hice algunas pruebas con el enrollamiento y llegó a esta conclusión:

_ que tendrá que definir expresiones regulares equipada para cada proveedor, y estoy bajo la impresión de que algunos tienen mecanismos para identificar Curl y bloquearlo (Por ejemplo lufthansa.com) pero funciona bastante bien con los demás (booking.com)

tengo 2 preguntas: additionnal

2) ¿Hay mejores soluciones que cURL para analizar algo de HTML en una página (sobre todo porque no funciona si la URL no incluye sessionID)? Estaba pensando en usar algo como Selenium ...

3) ¿Cómo puedo activar mi análisis CURL en otra pestaña o ventana? (Estaba pensando en un sistema similar al marcadores que pueden desencadenar un cierto código JavaScript)

Gracias por sus respuestas y lo siento por la longitud :-)

actualización: En base a las respuestas que he recibido, aquí son frescos Pensamientos: para grandes proveedores (easyjet, hotels.com, etc.), usaré una API si está disponible. Para pequeños proveedores (por ejemplo, http://www.hotel-gare-clermont.com/en,1,6217.html), creo que la solución de proxy vale otra más, y no recibiré quejas sobre asuntos legales de "Hotel de la Gare", mientras agrego visibilidad a esos pequeños proveedores. ¿Qué piensas?

+3

Tenga en cuenta que debe intentar hablar con los proveedores: pueden ofrecer una interfaz API, pueden oponerse y bloquear la IP del servidor (aunque esto es negocio para ellos, por lo que es poco probable) –

Respuesta

7

1) Esto es posible, pero tiene el efecto secundario de ser ilegal en el límite. No puede simplemente escaparse de los formularios de los proveedores y reservar sus páginas en un iframe. Si los proveedores lo sorprendieron haciéndolo, es probable que lo demanden.

Lo que necesita es un acuerdo de asociación con los distintos proveedores. con este acuerdo, es probable que abran una API (interfaz de programación de aplicaciones) para que la utilice. Esto le permitiría consultar más directamente su sitio y hacer reservas de una manera limpia y aprobada.


2) cURL es una gran biblioteca, que hace el trabajo de buscar páginas web muy bien. Hay muchos ejemplos en Internet para buscar una página en una cadena. En términos de analizar esa cadena, en un mundo ideal podrías usar un analizador XML. Desafortunadamente, las páginas HTML están mal construidas, lo que las hace difíciles de analizar. La mayoría de los codificadores, cuando tienen que analizar fragmentos de HTML, tienden a usar expresiones regulares.

Para obtener la ID de sesión, su primera solicitud de cURL debe ser un formulario de inicio de sesión en example.com. Falsifique el envío de un formulario de inicio de sesión tratando de obtener http://example.com?username=bob&pass=secret. Puede verificar si hay un inicio de sesión válido buscando el texto "inicio de sesión exitoso" o similar en la respuesta del servidor. Puede obtener la ID de sesión (si se trata de una cookie) de los encabezados de respuesta. Las solicitudes posteriores de cURL deben enviar su cookie.


3) cURL funciona en el lado del servidor, por lo que no tiene absolutamente ningún conocimiento de las pestañas que están abiertas. Puede usar Javascript para consultar pestañas, pero apuesto a que la mayoría de los navegadores no le permitirán hacerlo por razones de seguridad.

+1

+1 para borderline illegal. esto también tiene implicaciones técnicas. dado que los datos no se generan para ser legibles por máquina, son libres de cambiar el formato de salida. por lo tanto, el uso de las interfaces que se pretende utilizar no solo es más legal sino que también es menos propenso a romperse en caso de que cambie el diseño. – Nicolas78

+0

Muy claro sobre la necesidad de acuerdos de asociación, gracias. – boisvert

+0

Esto no pretende "robar" ningún dato de los proveedores. Estoy trabajando para un gran GDS, el sitio web es una GUI para que las agencias de viajes realicen la reserva (pero no solo), es por eso que necesitan realizar la reserva en easyjet.com o hotels.com y esos datos requieren algún tratamiento estadístico . Pero ponerse en contacto con cada proveedor que permita reservar un vuelo u hotel es una misión prácticamente imposible.Pero estoy de acuerdo cuando una API está disponible, definitivamente es la mejor solución. ¿La solución proxy implica tales problemas legales? –

6

Enviar al usuario directamente al proveedor es una solución mucho más confiable, porque le da a su usuario el control del proceso. Pero, por supuesto, se pierde el control del proceso :)

Alternativamente, usted tiene que crear un proxy en su servidor que consulta el sitio en nombre de su usuario:

end-user   yourdomain  easyjet 
    |     |    | 
    |-----search----->|    | 
    |<--booking form--|    | 
    |---user's data-->|    | 
    |     |---forward-->| 
    |     |<--result----| 
    |<--pass to user--|    | 
    |     |    | 
    v     v    v 

Para el usuario final, la reserva ocurre con usted; a easyjet/lufthansa/quien sea, parece ser un cliente. El problema es que cada sitio web es diferente, y tendrá que trabajar mucho para adaptar su sistema a lo que todo (o la mayoría) del sitio requiere, y como ya ha notado, las aerolíneas no quieren que tome su costumbre. Es por eso que los sitios de muchos corredores (kelkoo, gocompare ...) comenzó haciendo lo que estaba planeando, pero terminó como publicidad glorificada.

+0

Gracias por esta respuesta muy clara (lo siento, no puedo votar por causa de la recompensa ;-)) PD: en gocompare.com, parece que puede realizar todas las reservas sin tener que ir al sitio del proveedor ... –

+0

no se dio cuenta de que gocompare era asi de bueno. Los probé para obtener un seguro, y todo lo que obtuve fue una gran cantidad de datos recopilados sobre mí y muy poca información precisa. Pero el transporte aéreo no es tan complicado. – boisvert

+0

¿Y los problemas legales? Establecer un proxy requiere alguna autorización o algo? –

0

El mejor método para utilizar la API de los proveedores. El próximo viene cURL o IFrame.

Puede usar JSON/AJAX, que admite solicitudes entre sitios y puede manipular la salida.

Cuestiones relacionadas