8 puntos por baeba 2024-08-28 | 16 comentarios | Compartir por WhatsApp

Es una app de Android con la que puedes buscar vuelos nacionales y reservar en el sitio web de la aerolínea.

En lo personal viajo con frecuencia a la isla de Jeju,
así que mientras buscaba una forma cómoda, rápida y económica de encontrar boletos,
se me ocurrió la idea y la desarrollé.

[ Funciones principales ]

  • Comparación y búsqueda de vuelos
  • Posibilidad de reservar directamente en el sitio web de la aerolínea

[ Aspectos considerados ]

  • La hice ligera para que pudiera funcionar en smartphones de bajas prestaciones.
  • Si ya existe la app de la aerolínea, puede abrirse desde esa app.

[ Diferencias frente a otras apps ]

  • Sin comisiones.
  • El usuario puede reservar directamente el vuelo a través de esta app.
  • No solicita datos personales. No requiere inicio de sesión.

[ Tecnologías utilizadas ]

  • Android : WebView, java
  • Frontend : Vanilna JS, CSS, Webpack, Swagger API

Si tienen preguntas sobre el desarrollo, también con gusto las responderé.
Como la hice como hobby, todavía tiene muchas áreas por mejorar.
Agradeceré mucho cualquier comentario o retroalimentación.

16 comentarios

 
sonhy02 2024-09-04

¿Cómo analizaron la API del sitio de la aerolínea?

 
baeba 2024-09-05

Lo hice a lo bruto. -_-

Korean Air, Asiana, Jin Air, Jeju Air, T'way, Air Seoul, Air Busan, Eastar
Google Flights, Naver Vuelos, Webtour, Interpark Vuelos, etc.
Entré a los sitios web de las aerolíneas presentadas en Corea
y fui abriendo una por una la ventana del depurador y la captura de paquetes de red
para analizar cómo se comunicaban entre sí.

Mientras lo analizas, empiezas a ver el camino(?).

 
sonhy02 2024-09-05

Yo también quiero intentar analizarlo, pero al verlo siento que no se entiende muy bien T_T ¿podrías darme хотя sea algún tip..?

 
baeba 2024-09-05

Y además...
como los sistemas de pago de cada aerolínea son muy distintos entre sí,
si intentas hacer el pago dentro de una webview
se producen errores de todo tipo.
Para explicarlo fácilmente,
es como cuando en una PC, al hacer operaciones bancarias, te pide instalar un programa de seguridad;
también hay lugares donde el pago solo funciona si instalas una app de seguridad para Android.

Si una sola aerolínea tiene 5 módulos de pago,
con 8 aerolíneas hay que hacer unas 40 pruebas.
Es difícil que una persona haga eso por su cuenta.

Pregunté brevemente en otra comunidad
cómo hacen para reservar boletos de avión y...
buscan solo los precios en lugares como Naver, Interpark o Google Flights.
Y la reserva real
la hacen a través de la app de la aerolínea.

La intención inicial de la app que hice también era parecida a eso.
Buscar... y, sin abrir la app de la aerolínea, ir directamente a la
ventana de resultados de búsqueda del sitio web de la aerolínea para pagar de inmediato...

 
baeba 2024-09-05

Para darte un consejo...
existe el navegador para desarrolladores de Firefox.
Las herramientas de desarrollo de Chrome también están bien, pero
hay una ligera diferencia.

Normalmente se llama a la API y luego redirige a la siguiente página, así que...
no es fácil averiguar cómo se está llamando realmente la API.
Puedes hacerlo a la fuerza, deteniendo la web antes de que pase la redirección...

o bien...
puedes dejar abierto un programa de captura de paquetes de red
y, si monitoreas, podrás encontrar la API final.

Incluso si encuentras la API...
si la clave de autenticación, la información de cookies y la información de sesión relacionada no coinciden,
aunque llames esa API se producirá un error.

Como cada aerolínea tiene sus propias características,
de verdad se necesitan trucos -_-.

¡El lugar más difícil es Korean Air! Como usa Angular,
es muy difícil hacer ingeniería inversa.

Estuve a punto de dejarlo, pero...
me la pasé batallando como unos 2 años, jajaja. Como no soy muy listo... terminaron sufriendo mis manos y mis pies...

 
sonhy02 2024-09-08

Primero estoy intentando con Jin Air, pero ¿podría preguntarles cómo manejaron el x-csrf-token y el valor de la cookie...? Con las otras aerolíneas todavía no le agarro la mano, pero con Jin Air ya encontré cómo hay que enviar la solicitud; el problema son esos dos valores T_T

 
baeba 2024-09-09

Si en Chrome, Firefox o Edge presionas F12,
se abre la herramienta de desarrollo.
Ahí selecciona la pestaña Debugger... revisa la ventana de fuentes a la izquierda,
y si eliges la pestaña Storage, a la izquierda verás elementos como almacenamiento local, almacenamiento de sesión, almacenamiento en caché, IndexedDB y cookies.
Están ahí... revísalos...

Luego selecciona la pestaña Network... y cuando hagas clic en la página web, revisa cómo van y vienen los paquetes,
y cuando entiendas más o menos cómo funciona,

en la pestaña Debugger pon breakpoints
y en ese estado tienes que revisar uno por uno
cómo se comunica la página web con el servidor.

Jin Air es relativamente fácil^^;;; aunque hace poco rediseñaron la interfaz para que se vea mejor.
La lógica interna sigue siendo prácticamente la misma que antes (casi no ha cambiado en 2 años).

Cuando el token generado en el servidor pasa al cliente, revisa
en qué parte del almacenamiento interno del navegador web se guarda.

En mi caso, simplemente con la información del usuario y la fecha
solo navego hasta esa pantalla...
y luego hago scroll hasta la posición de esa hora y ahí termina.

Aquí también podrías hacer que pulse el precio y que inicie sesión,
pero esta parte depende demasiado de cada caso...

Así que lo dejé
para que el usuario pueda hacerlo libremente.

Para explicarlo más fácilmente,
el usuario no abre la app de la aerolínea,
sino que simplemente usa un navegador web muy común en su smartphone (Chrome, Samsung Internet, etc.)
para entrar al sitio web de la aerolínea, buscar,
iniciar sesión y pagar.

Pero si haces esto con WebView,
hay muchísimas limitaciones y no se puede implementar correctamente.
Cada aerolínea está implementada con lógicas rarísimas y muy distintas entre sí...
Incluso solo Jin Air probablemente tenga varios sistemas de pago.
Y habría que probar toda la integración de esto...

 
sonhy02 2024-09-05

Yo también vi esta publicación y quiero intentar hacerlo enfocándome en las aerolíneas de la ruta que tomo seguido; parece que yo también voy a batallar bastante jajaja
Gracias

 
kdhyo98 2024-08-30

¡Qué gran proyecto! Como no tengo Android T_T, estaré esperando una versión para iOS o una página web.

 
baeba 2024-09-02

Como era una web app... también podría haberla hecho como página web... ^^
Me daba flojera administrar un servidor -_-
Así que simplemente subí todos los archivos de la página web al teléfono.
Desde la perspectiva del usuario, como no se conecta a un servidor...
la velocidad de respuesta también es rápida...

Por eso...
había muchas restricciones y conflictos de seguridad relacionados,
así que sufrí bastante durante el desarrollo.
Sobre todo, los módulos de pago
son totalmente distintos según cada aerolínea, y me enteré justo antes del lanzamiento
de que cada una tenía sistemas de pago de todo tipo,
así que fue duro hacer las pruebas.

 
kandk 2024-08-30

Yo también, cuando compraba de vez en cuando, hacía un crawler para buscar el precio más bajo, así que creo que puede ser útil jajaja.
Tengo una duda. ¿Había muchas cosas que no aparecían en Skyscanner?

 
baeba 2024-08-30

Los sitios extranjeros de búsqueda de boletos de avión, como Skyscanner, permiten hacer búsquedas a nivel global.
Es decir, como están enfocados en encontrar el precio más bajo para viajar entre países... no eran muy buenos para uso nacional.

Para vuelos nacionales, la idea inicial de desarrollo fue simplemente hacer algo donde pudiera ver fácilmente de una sola vez la aerolínea, la fecha y la hora que yo quería.

Al principio quise hacer que buscara automáticamente (?) para una fecha específica y alineara la aerolínea, el horario y el precio,
para luego enviar una alerta... pero dejé esa función en pausa por ahora...
como en las apps de boletos de avión existentes, hice que se pudiera buscar, filtrar fácilmente y pasar de inmediato al sitio web de la aerolínea
para hacer la reservación.

 
bncgood 2024-08-28

Han creado un servicio excelente.

  1. ¿La información de precios de los vuelos nacionales la manejaron mediante screen scraping?
  2. Como inevitablemente surgirán problemas de velocidad, ¿usan caché?
 
baeba 2024-08-28

No usé screen scraping.
No uso caché.
Tomé la información que la aerolínea envía a la página web del usuario,
la fui parseando manualmente una por una internamente (-_-) para extraer solo lo necesario
y así generar la información de precios...

Pensé en hacerlo en el servidor, pero...
por el costo del servidor...
terminé procesándolo todo directamente en el WebView.

 
bncgood 2024-08-29

Vaya, qué genial. ¿No tienen planes para iOS?

 
baeba 2024-08-30

Compré una Mac mini para hacerlo para iOS. ^^