Є база данних розташована на одному документі гугл таблиці. В цій гугл таблиці є такі листи (1 кімн. продаж, 2 кімн. продаж, 3 кімн. продаж, 4 кімн. продаж, 5 кімн. продаж, Кімната продаж, Будинки продаж, Новобуд. продаж, Земля продаж, 1 кімн. оренда, 2 кімн. оренда, 4 кімн. оренда,5 кімн. оренда, Кімната оренда оренда, Будинки оренда, Земля оренда)
В цих листах однакові стовбчики (а - text, b-title,c-url,d-date,e-city,f-neigborhood,g-deal,h-property,i-price,j-area,k-kitchen,l-floor,m-number_of_floors,n-room,o-author,p-url_author,q-id,r-type_author,s-land,t-type_object,u-phone,v-type_walls,w-repair,x-custom,y-photo,z-status)
Проблема: з часом коли об'єктів нерухомості у всьому документі стало більше 4х тисяч то таблиця почала підторможувати. І я так розумію що чим далі тим буде гірше.
Рішення: перенести існуюче готове, робоче рішення із гугл таблиці на базу даних сайту wordpress.
Як це працює зараз: в кожному листі гугл таблиці є декілька фіксованих посилань на сайт olx список оголошень нерухомості (наприклад 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)
Щодня 3 рази на день готовий скрипт page_parser.js в appscript гугл таблиці відправляє ці посилання на наш готовий парсер page_parser.php на сайті, який обробляє це посилання і ми отримуємо масив тексту, ось приклад масиву тексту:
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-кімнатної квартири - ідеальний варіант для інвестора під оренду.
[location_date] => Черкаси - 21 серпня 2025 р.
[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] => Євродвушка у центрі міста з газовим автономним опаленням
[location_date] => Черкаси - 21 серпня 2025 р.
[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] => Продам 1к квартиру ЖК СВЯТОТРОЇЦЬКИЙ | бул. Шевченка, 202 |
[location_date] => Черкаси - 22 серпня 2025 р.
[price] => 58821
[area] => 62.31
)
і так далі.
)
Цей масив тексту відправляється назад до гугл таблиці де його очікує і обробляється через наш скрипт page_parser.js наступним чином:
Id кожного оголошення перевіряється на наявність із id в базі данних таблиці. Якщо знайдено співпадіння по id то оновлюється ціна в таблиці базі данних на ту ціну, яка є в масиві тексту. Якщо не знайдено співпадіння по id - то це значить, що на сайті олх зявилось нове оголошення, якого не має в нашій базі данних і його потрібно внести в базу данних.
За цю дію відповідає інший готовий скрипт single_property.js в appscript, який бере посилання olx на конкретну квартиру (якої не має в базі данних таблиці) і відправляє це посилання на інший php скрипт сайту single_property.php і парсить данні по цьому оголошенню, де в результаті ми отримуємо наступний текст для прикладу:
"https://www.olx.ua/d/uk/obyavlenie/prodam-smart-kvartiru-chehova-56-IDYK426.html
897558754
Приватна особа
Руслан
https://www.olx.ua/uk/list/user/22BbN/
Варіант X: Продам смарт-квартиру Чехова 56
Місцезнаходження: Черкаси
Вид об'єкта: Вторинний ринок
Тип будинку: Гостинка
Поверх: 9
Поверховість: 9
Загальна площа: 21 м²
Площа кухні: 4 м²
Тип стін: Цегляний
Клас житла: Економ
Кількість кімнат: 1 кімната
Меблювання: Так
Побутова техніка: Холодильник, Мікрохвильова піч, Духова шафа, Плита, Пральна машина
Мультимедіа: Швидкісний інтернет
Комфорт: Кондиціонер, Балкон, лоджія, Меблі на кухні, Душова кабіна, Гардероб
Комунікації: Центральна каналізація, Електрика, Газ, Центральний водопровід
Інфраструктура (до 500 метрів): Дитячий садок, Школа
Опис:
Квартира повністю мебльована та електрифікована: кондиціонер, холодильник, мікрохвильовка, бойлер, пральна маш., електрорушникосушка, інтернет,(заходь і живи) Балкон засклений. Лічильники на воду і газ встановлені. Вікна та балконний блок металопластикові. Загальна площа 21 м.кв. 9 поверх. Дуже зручне розташування(вся необхідна інфоаструктура поруч) Прохання, якщо Вас зацікавила квартира писати на вайбер(не завжди є змога відповісти на дзвінок) 09*********59
Ціна: 25 000 $
Фото: https://chempion-agency.com/gallery.php?gallery_id=gallery_68a97fa73e1f0"
single_property.js очікує цей текст від скрипту сайту single_property.php і цей отриманий текст відправляється назад до гугл таблиці і надсилається у відповідне id нашої бази данних, а якщо такого id не має то створює новий рядок в базі данних де розприділяються ці дані автоматично по стовбчикам таблиці.
Також задача скрипта page_parser.js поставити у стовбчику z-статус, "активно" або "неактивно". Логіка побудована таким чином, що якщо є співпадіння по конкретному id із масиву тексту і id в базі данних таблиці то статус=активно, якщо співпадінь із масиву тексту не має це значить що оголошення на сайті olx уже тако не має і воно не активне тобто статус в базі данних нашої таблиці зміниться на статус=неактивно.
Вимоги: швидкість, простота і лаконічність.
Поговорив із gemini pro і вона сказала, що рішення із ACF не підійде так як коли буде оголошень більше 10ти тисяч оголошень то сайт із базою данних також буде глючити. Скріншот 1
Одним із рішень буде напевно скріншот 2.
Для наглядності створили візуальний мокап сайту як це має виглядати з фільтром і списком обєктів нерухомості (скріншот 4) і лендингом одного оголошення (скріншот 3).
Деталі по скриптам php і js нідшлю якщо треба.
Якщо ви маєте свій підхід і бачення, це також вітається.