Kategorije
Tutorijali WordPress

Sinkronizacija kalendara zauzetosti (Booking.com, Airbnb, Expedia) s WordPress web stranicom

Na jednom projektu na kojem radim pojavio se sljedeći problem: WordPress tema koja je bila instalirana nije bila ažurirana više od 3 godine i prestala je sinkronizacija između web servisa za iznajmljivanje smještaja i web stranice. U međuvremenu je tema jako modificirana od strane programera.

Tako da se pojavila jako velika razlika u kodu između teme koja je bila aktivna na web stranici i one koju su autori teme ažurirali.

WordPress tema koja je bila aktivna na web stranici je bio klasični dizajna web stranice za iznajmljivanje apartmana. Jedna od glavnih funkcionalnosti koje je web stranica imala je bila mogućnost da se putem web stranice rezervira i plati smještaj u apartmanima.

To je vlasniku jako olakšavalo posao što se tiče komunikacije s gostima.

Funkcionalnost bez sinkronizacija s web servisima za iznajmljivanje smještaja nije imala smisla. Lako se mogla dogoditi situacija da gost rezervira smještaj na određeni datum, a s drugu strane drugi gost rezervira isti smještaj u isto vrijeme na primjerice Booking.com portalu.

Zato su autori teme tu funkcionalnost i originalno ugradili u temu. Sinkronizacija je radila u 2 smjera: s web stranice prema servisima za iznajmljivanje sadržaja (izvoz rezervacija) i od servisa prema web stranici (uvoz rezervacija).

U jednom trenutku sinkronizacija u smjeru uvoza rezervacija više nije radila i trebalo je otkriti uzrok.

Potencijalno je bilo nekoliko uzroka i pokušaja rješenja:

  1. prvo smo mislili da je u pitanju IP adresa, tj. da je previše puta pokrenuta skripta za uvoz podataka, međutim promjenom IP adrese i prebacivanjem web stranice na CloudFlare, problem je i dalje bio prisutan
  2. zatim je bila ideja da se “merga”, tj. spoje izmjene na temi koje su nastale u međuvremenu, međutim, to se pokazao kao nerješiva misija jer se radilo o stotinama datoteka
  3. Pokušalo se izvući iz nove teme samo dio koda koji je trebao za sinkronizaciju, međutim nije ni to nije toliko jednostavno
  4. jedna je solucija bila da se web stranica ponovo napravi s istim funkcionalnostima ali s najnovijom verzijom teme i da se migriraju dodatne funkcionalnosti
  5. jedina efikasna solucija je bila izrada skripte za import rezervacija s web servisa

Tema je imala mogućnost da izvozi rezervacije u .ics formatu (iCal format)

S druge strane, svaki od web servisa ima mogućnost izvoza rezervacija u .ics formatu.

Airbnb ima u svojoj dokumentaciji opisan način sinkronizacije kalendara s drugim kalendarima.

Također, i booking.com isto podržava povezivanje s drugim kalendarima

Expedia group isto omogućava sinkronizaciju s drugim servisima

Time smo dobili mogućnost da vezu do .ics datoteke unesemo u svaki od servisa, te da dohvatimo poveznicu do ispisa svih rezervacija sa pojedinog servisa.

Ako smo slijedili upute, za svaki od servisa mogli smo imati ovako podešene opcije. Odabrani apartman ima vezu prema ostalim web servisima i prema web stranici

Drugi važni korak je bila izrada skripte koja će se nalaziti na web stranici i pokretati u određeno vrijeme, dohvaćati rezervacije sa servisa i upisivati u web stranicu.

Male su razlike između servisa airbnb, expedia i booking.com i kod je vrlo sličan kod sva 3 sustava.

Osnovna ideja je bila slijedeća:

  • za svaku smještanju jedinicu dohvatiti tzv. ics feed (zauzeće kalendara u iCal / ics formatu) koristeći CURL
  • kod booking.com sam dodatno prilagodio da se odgovor odmah zapisuje u .ics datoteku
  • odgovor je u ics formatu, i da bi ga mogao obrađivati dalje sa PHP-om uključio sam iCalReader biblioteku
  • ona je omogućila da se dobiveni podaci formatiraju, i dalje sam ih samo oblikovao sa PHP-om te spremio u WordPressovu bazu podataka koristeći ugrađen WordPress funkcije
  • isti algoritam sam primjenio na sva 3 servisa

Skriptu sam objavio na gist.github.com

Dodatno treba uočiti da sam u skriptu dodao da se automatski uz unos rezervacija u dodatne informacije (meta polja) sve veže u jedno polje koje se ovdje zove “_blocked_dates_meta”

Za kraj je ostalo samo podesiti cron job da se svakih sat vremena pokrene sinkronizacija.

I to je ukratko bilo rješenje za izradu funkcionalnosti sinkronizacije kalendara između servisa za rezervacije i WordPressa.

Skriptu možete prilagoditi sebi… Ako trebate pomoć oko implementacije, možete me kontaktirati.

Odgovori

Vaša adresa e-pošte neće biti objavljena. Obavezna polja su označena sa *