Jest baza danych umieszczona w jednym dokumencie Google Sheets. W tym arkuszu Google znajdują się następujące arkusze (1 pokój sprzedaż, 2 pokoje sprzedaż, 3 pokoje sprzedaż, 4 pokoje sprzedaż, 5 pokoi sprzedaż, Pokój sprzedaż, Domy sprzedaż, Nowe budownictwo sprzedaż, Ziemia sprzedaż, 1 pokój wynajem, 2 pokoje wynajem, 4 pokoje wynajem, 5 pokoi wynajem, Pokój wynajem, Domy wynajem, Ziemia wynajem)
W tych arkuszach są takie same kolumny (a - tekst, b-tytuł, c-url, d-data, e-miasto, f-dzielnica, g-deal, h-nieruchomość, i-cena, j-powierzchnia, k-kuchnia, l-piętro, m-liczba_pieter, n-pokój, o-autor, p-url_autora, q-id, r-typ_autora, s-ziemia, t-typ_obiektu, u-telefon, v-typ_ścian, w-remont, x-custom, y-zdjęcie, z-status)
Problem: z czasem, gdy obiektów nieruchomości w całym dokumencie stało się ponad 4 tysiące, arkusz zaczął zwalniać. I rozumiem, że im dalej, tym będzie gorzej.
Rozwiązanie: przenieść istniejące gotowe, działające rozwiązanie z Google Sheets do bazy danych strony WordPress.
Jak to działa teraz: w każdym arkuszu Google Sheets znajduje się kilka stałych linków do strony olx z listą ogłoszeń nieruchomości (na przykład https://www.olx.ua/uk/nedvizhimost/kvartiry/prodazha-kvartir/cherkassy/?currency=USD&search%5Bfilter_enum_apartments_object_type%5D%5B0%5D=secondary_market&search%5Bfilter_enum_number_of_rooms_string%5D%5B0%5D=odnokomnatnye&search%5Border%5D=created_at%3Adesc&search%5Bprivate_business%5D=business)
Codziennie 3 razy dziennie gotowy skrypt page_parser.js w appscript Google Sheets wysyła te linki do naszego gotowego parsera page_parser.php na stronie, który przetwarza ten link i otrzymujemy tablicę tekstu, oto przykład tablicy tekstu:
Array
(
[0] => Array
(
[id] => 895233733
[url] => https://www.olx.ua/d/uk/obyavlenie/1-kmnatno-kvartiri-dealniy-varant-dlya-nvestora-pd-orendu-IDYAjbL.html
[title] => 1-pokojowe mieszkanie - idealna opcja dla inwestora pod wynajem.
[location_date] => Czerkasy - 21 sierpnia 2025 r.
[price] => 38000.1194279799100100
[area] => .1566161680228224
)
[1] => Array
(
[id] => 892557014
[url] => https://www.olx.ua/d/uk/obyavlenie/vrodvushka-u-tsentr-msta-z-gazovim-avtonomnim-opalennyam-IDYp4QS.html
[title] => Eurodwuosobowe mieszkanie w centrum miasta z gazowym autonomicznym ogrzewaniem
[location_date] => Czerkasy - 21 sierpnia 2025 r.
[price] => 71500
[area] => 42
)
[2] => Array
(
[id] => 889724395
[url] => https://www.olx.ua/d/uk/obyavlenie/prodam-1k-kvartiru-zhk-svyatotrotskiy-bul-shevchenka-202-IDYdbXt.html
[title] => Sprzedam 1-pokojowe mieszkanie w kompleksie SVIATOTROICKI | bul. Szewczenki, 202 |
[location_date] => Czerkasy - 22 sierpnia 2025 r.
[price] => 58821
[area] => 62.31
)
i tak dalej.
)
Ta tablica tekstu jest wysyłana z powrotem do Google Sheets, gdzie czeka na nią i jest przetwarzana przez nasz skrypt page_parser.js w następujący sposób:
Id każdego ogłoszenia jest sprawdzane pod kątem obecności id w bazie danych arkusza. Jeśli znaleziono dopasowanie po id, cena w bazie danych arkusza jest aktualizowana na tę cenę, która znajduje się w tablicy tekstu. Jeśli nie znaleziono dopasowania po id - oznacza to, że na stronie olx pojawiło się nowe ogłoszenie, którego nie ma w naszej bazie danych i należy je dodać do bazy danych.
Za tę akcję odpowiada inny gotowy skrypt single_property.js w appscript, który bierze link olx do konkretnego mieszkania (którego nie ma w bazie danych arkusza) i wysyła ten link do innego skryptu php na stronie single_property.php i parsuje dane dotyczące tego ogłoszenia, gdzie w rezultacie otrzymujemy następujący tekst jako przykład:
"https://www.olx.ua/d/uk/obyavlenie/prodam-smart-kvartiru-chehova-56-IDYK426.html
897558754
Osoba prywatna
Ruslan
https://www.olx.ua/uk/list/user/22BbN/
Opcja X: Sprzedam mieszkanie typu smart na Chehova 56
Lokalizacja: Czerkasy
Rodzaj obiektu: Rynek wtórny
Typ budynku: Kamienica
Pietro: 9
Liczba pięter: 9
Powierzchnia całkowita: 21 m²
Powierzchnia kuchni: 4 m²
Typ ścian: Cegła
Klasa mieszkania: Ekonomiczna
Liczba pokoi: 1 pokój
Wyposażenie: Tak
Sprzęt AGD: Lodówka, Mikrofalówka, Piekarnik, Płyta, Pralka
Multimedia: Szybki internet
Komfort: Klimatyzacja, Balkon, Loggia, Meble w kuchni, Prysznic, Garderoba
Komunikacja: Centralna kanalizacja, Elektryczność, Gaz, Centralny wodociąg
Infrastruktura (do 500 metrów): Przedszkole, Szkoła
Opis:
Mieszkanie jest w pełni umeblowane i wyposażone w sprzęt AGD: klimatyzacja, lodówka, mikrofalówka, bojler, pralka, elektryczny suszarka do rąk, internet, (wejdź i żyj) Balkon z przeszkleniem. Liczniki na wodę i gaz są zainstalowane. Okna i blok balkonowy są z PVC. Powierzchnia całkowita 21 m². 9 piętro. Bardzo dogodna lokalizacja (wszystkie niezbędne udogodnienia w pobliżu) Proszę, jeśli jesteś zainteresowany mieszkaniem, pisz na Viber (nie zawsze mogę odebrać telefon) 09*********59
Cena: 25 000 $
Zdjęcie: https://chempion-agency.com/gallery.php?gallery_id=gallery_68a97fa73e1f0"
single_property.js oczekuje tego tekstu od skryptu strony single_property.php, a ten otrzymany tekst jest wysyłany z powrotem do Google Sheets i przypisywany do odpowiedniego id w naszej bazie danych, a jeśli takiego id nie ma, to tworzy nowy wiersz w bazie danych, gdzie te dane są automatycznie przypisywane do kolumn arkusza.
Zadaniem skryptu page_parser.js jest również umieszczenie w kolumnie z-status, "aktywne" lub "nieaktywne". Logika jest zbudowana w ten sposób, że jeśli istnieje dopasowanie konkretnego id z tablicy tekstu i id w bazie danych arkusza, to status=aktywne, jeśli nie ma dopasowania z tablicy tekstu, to oznacza, że ogłoszenie na stronie olx już nie istnieje i jest nieaktywne, czyli status w bazie danych naszego arkusza zmieni się na status=nieaktywne.
Wymagania: szybkość, prostota i zwięzłość.
Rozmawiałem z gemini pro i powiedziała, że rozwiązanie z ACF nie będzie odpowiednie, ponieważ gdy będzie więcej niż 10 tysięcy ogłoszeń, strona z bazą danych również będzie się zawieszać. Zrzut ekranu 1
Jednym z rozwiązań będzie prawdopodobnie zrzut ekranu 2.
Dla wizualizacji stworzyliśmy wizualny makiet strony, jak to powinno wyglądać z filtrem i listą obiektów nieruchomości (zrzut ekranu 4) oraz landing page jednego ogłoszenia (zrzut ekranu 3).
Szczegóły dotyczące skryptów php i js prześlę, jeśli będzie to konieczne.
Jeśli masz swoje podejście i wizję, to również jest mile widziane.