Agentul de croaziere: căutare automatizată cu AI

Vasul de croazieră Carnival Mardi Gras acostat la chei, fotografie proprie

Al doilea agent nu se mai construiește de la zero. Am mutat mecanismul agentului de vacanțe ieftine de pe zboruri pe croaziere — și a durat o oră. Rezultatul: un scaner care citește 100 de oferte reale de pe un website de rezervare croaziere, cu toate datele lor de plecare și prețurile din acea zi, fără API, fără browser, fără nicio bibliotecă externă.

Pe scurt:

De unde a pornit

Aveam deja un agent care scanează zboruri ieftine — construit într-o singură seară, câteva săptămâni mai devreme. Ideea de a-l muta pe croaziere a pornit dintr-o întrebare simplă: dacă mecanismul funcționează pe un tip de piață, cât costă să-l mut pe alta? Răspunsul a fost surprinzător de mic — nu pentru că problema era ușoară, ci pentru că cea mai grea parte, găsirea unei surse de date care nu te blochează, o mai făcusem o dată.

Prima oră: căutarea unui API care nu există

Am pornit ca la orice sursă nouă de date: caut întâi un API oficial. Pentru croaziere, concluzia a fost clară — nu există niciun API public gratuit. Traveltek și Amadeus Enterprise Cruise au API-uri reale, dar amândouă sunt B2B, pe contract, fără niciun tier de sine stătător. Travelpayouts, care are zboruri și hoteluri, nu are deloc croaziere — verificat direct în documentația lor, nu presupus din denumire.

Am încercat apoi să citesc direct paginile marilor operatori. MSC Cruises e blindat cu Akamai — 403 la o cerere simplă, „Access Denied” chiar și într-un browser automatizat headless. Are API-uri interne, dar inaccesibile fără tehnici serioase de mascare, care nu meritau efortul pentru o singură sursă. Costa Cruises răspundea normal, dar API-urile găsite în pagină erau de cont și rezervare, nu de căutare.

A doua oră: metoda care găsește sursa bună

Regula pe care o folosesc la orice sursă nouă are trei pași, în ordine: (1) trimit o cerere simplă și văd cine nu mă blochează, (2) caut direct în HTML dacă prețurile sunt deja acolo, fără JavaScript, (3) abia dacă niciuna din primele două nu merge, aduc un browser automatizat. La croaziere, pasul doi a rezolvat totul: un website de rezervare croaziere, o agenție românească, servește paginile complet randate pe server — prețurile, navele, porturile, toate datele de plecare stau direct în textul HTML, fără JavaScript de așteptat.

Restul orei: scriere și primul scan

De aici, construcția a fost mecanică. Pagina de listă are 10 oferte pe ecran, iar paginarea merge simplu pe cale (/croaziere/2/, /croaziere/3/…). Fiecare bloc de ofertă conține un titlu structurat („Croaziera 2026 – Regiune (Port, Țară) – Linie – Navă – N nopți”) care se descompune cu un regex, și un container cu toate datele de plecare, fiecare cu prețul și linkul ei direct de cumpărare. Am scris totul cu urllib din biblioteca standard Python și expresii regulate — fără Playwright, fără nicio bibliotecă externă de instalat. Codul e mai scurt și scanul e mai rapid decât dacă aș fi pornit un browser doar ca să citesc text simplu.

Primul scan, în aceeași oră: 100 de oferte, 404 de date de plecare cu preț propriu. Cea mai ieftină ofertă din tot lotul: 61 €, MSC Virtuosa, o repoziționare de o noapte din Rio de Janeiro. Distribuția pe linii de croazieră: MSC 46, Carnival 31, Costa 15, restul împărțit între Royal Caribbean, Princess și Holland America.

Cifra Valoare
Oferte scanate 100
Date de plecare cu preț propriu 404
Cea mai ieftină ofertă 61 € (MSC Virtuosa, repoziționare 1 noapte)
Linia cu cele mai multe oferte MSC Cruises — 46 din 100
Timp de construcție o oră
Captură din raportul de croaziere, filtrat pe Carnival Cruise Line, cu prețuri și date de plecare reale

Raportul chiar filtrat pe Carnival Cruise Line: 31 din cele 100 de oferte, fiecare cu toate datele ei de plecare și prețul din acea zi.

Vasul de croazieră Carnival Mardi Gras acostat la chei, fotografie proprie

Poza e a mea, dintr-o croazieră proprie — nu are legătură cu oferta cea mai ieftină din raport, dar arată exact genul de navă pe care agentul le scanează pe toate: Carnival Mardi Gras, la chei.

A doua rundă: căutarea unei surse secundare

O săptămână mai târziu am revenit cu o întrebare firească: are sens o a doua sursă, ca să nu depind de una singură? Am testat vacationstogo.com, un agregator american mare. Rezultatul a confirmat regula de la MSC: e blindat cu F5 Bot Defense la nivel de tot site-ul, nu doar pe pagina de căutare. Un curl primea 200 OK pe orice combinație de parametri, dar HTML-ul întors era identic indiferent de ce cerusem — doar un token obfuscat din cookie-uri se schimba. Nici un browser automatizat, lăsat să aștepte rețeaua liniștită, n-a trecut de blocaj — pagina rămânea încărcătorul de JavaScript, nu rezultatele reale.

Concluzia a fost să nu insist. Website-ul folosit deja funcționează, acoperă principalele linii de croazieră din piață, iar costul de a forța o a doua sursă blindată nu se justifica față de câștigul. Regula generală care a ieșit de aici, bună pentru orice sursă nouă: dacă prima soluție funcționează curat, nu lupți cu una a doua doar ca să ai două.

Ce NU face acest agent

Unde se termină articolul acesta

Dacă vrei un agent asemănător pentru domeniul tău — un scaner care citește prețuri, disponibilitate sau oferte de pe orice site public și le pune într-un raport pe care îl citești în două minute — automatizările le construiesc eu, un flux simplu costă sub 400 € și e gata în 2–5 zile lucrătoare. Dacă vrei să construiești și tu asemenea lucruri, nu doar să le primești gata făcute: cursul de AI pentru firme formează exact omul care se ține de o oră pe zi pe procesele reale ale firmei. Scrie-mi cu ce ai vrea să automatizezi.

Întrebări frecvente

Există un API gratuit pentru croaziere?

Nu. Singurele API-uri reale de croaziere (Traveltek, Amadeus Enterprise Cruise) sunt B2B, pe contract, fără niciun nivel gratuit sau self-service. Travelpayouts, care are zboruri și hoteluri, nu are deloc croaziere.

De pe ce site citește agentul prețurile?

De pe un website de rezervare croaziere, o agenție românească ale cărei pagini sunt complet randate pe server — prețurile stau direct în textul HTML, ca la orice pagină publică obișnuită.

De ce nu scanează direct MSC sau Royal Caribbean?

Pentru că site-urile mari sunt blindate cu sisteme anti-bot serioase (Akamai la MSC, F5 la vacationstogo.com) — nici un browser automatizat nu trece de ele fără tehnici de mascare care nu se justifică pentru o singură sursă suplimentară.

Cât a durat, de fapt, construcția?

O oră, pentru că mecanismul exista deja de la agentul de zboruri — structura de scanare, salvarea rezultatelor, raportul HTML cu filtre. A rămas doar partea specifică croazierelor: găsirea sursei și parsarea paginilor ei.

Agentul rezervă croaziera pentru mine?

Nu. Fiecare preț din raport e un link către pagina reală a ofertei, unde se vede prețul final și se face rezervarea. Agentul doar adună și organizează informația publică.

Ce urmează pentru acest agent?

Un istoric de prețuri, ca să poată semnala o scădere neobișnuită, așa cum face deja agentul de zboruri, și o rulare automată săptămânală, în loc de scanare manuală.

Surse

#agenți AI
Costin Pietraru
Scris de

Costin Pietraru

Inginer cu 30+ ani în sisteme, fondator SimpluSPV. Livrează cursul de AI pentru firme și scrie despre automatizare aplicată — fără teorie, doar sisteme care lucrează.

Vezi profilul complet →

Vrei firma pregătită pentru AI, corect și legal?

4 ședințe aplicate, echipa pleacă cu sisteme reale și documentele de conformitate. Garanție bani înapoi după 2 ședințe.

Înscrie echipa la curs →