Есть база данных, расположенная на одном документе гугл таблицы. В этой гугл таблице есть такие листы (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 вышлю, если нужно.
Если у вас есть свой подход и видение, это также приветствуется.