Приложение "Парсер ADS-API.RU"

Материал из CMS Sitebill Wiki
Перейти к навигации Перейти к поиску

Адреса парсинга записываются в отдельной строке в формате

label***url***target_user

label - метка задачи, которая используется при запуске парсинга
url - адрес забора данных
target_user - ID пользователя к которому будут прикреплены объекты

Общая информация

Уникальность объектов сверяется по паре значений uniq_id (значение из данных предоставляемых объектов из поля id) и user_id (целевой пользователь, назначенный в задаче парсинга) уникальному ID. Перемещая объект, полученный парсером, между пользователями, Вы разрываете текущую связь и можете получить дублирование одинаковых объектов на разных пользователях. Вы можете передавать загруженные объекты другому пользователю, но если не удалите значение уникального ID и признак загрузки из ADS-API.RU, то объект будет оставаться синхронизированным с выгрузкой.

По умолчанию парсер работает в режиме "загрузка" - он находит новые объекты в источнике и размещает их в базе. При нахождении объекта, который уже есть базе, парсер игнорирует его. Для того, что бы такие объекты сихронизировались с источником необходимо включить настройку "Обновлять объекты (apps.adsapiruparser.update_advs)".

Требования

Модель объекта должна иметь среди своих свойств следующие:

- feed_label - поле с системным именем feed_label. safe_string. Для хранения признака источника

- поле для хранения уникального ID с источника

- поле для хранения признака загруженности с ADS-API.RU. Это поле может иметь произвольный формат, но должно точно определять объект, как принадлежащий к загруженным. Например, это может быть поле типа checkbox отмеченное состояние которого будет служить признаком. Системное имя этого поля и его значение необходимо указать в настройках приложения.

Необходимые таблицы устанавливаются стандартной установкой приложения /admin/index.php?action=adsapiruparser&do=install

Задачи

Задачи служат для создания программ парсинга.

Задача имеет следующие своства:

Метка Активность Исключить из цикла

Настройки

Список источников (apps.adsapiruparser.sources) - список программ загрузки

Ограничение на количество фото (apps.adsapiruparser.imglimit) - число указывающее какое количество изображений забирать из фида для каждого объекта. Установка 0 или "пусто" указывает забирать все изображения

Не загружать без фото (apps.adsapiruparser.withphotoonly) - указывает следует ли забирать объекты, для которых в фиде отсутствует информация о фотографиях

Сохранять историю загруженных (apps.adsapiruparser.store_parsing_story) - при включенной настройке уникальные ID будут записываться в специальную таблицу. Вследствии этого, если вы удалите объект, то он не добавится обратно при следующем запуске парсера, если он еще будет находиться в фиде.

Устанавливать дату добавления из фида (apps.adsapiruparser.setfeeddate) - устанавливает поле Дата добавления не в текущее время, а в значение даты из данных фида.

Проверять на наличие похожих объектов (apps.adsapiruparser.filter_doubles) - подключает стандартную проверку объекта объявления на наличие похожих объектов

Системное имя поля в модели data обуславливающее признак загруженности из ADS-API.RU (apps.adsapiruparser.adsapi_loaded_field_name)

Значение поля в модели data обуславливающее признак загруженности из ADS-API.RU (apps.adsapiruparser.adsapi_loaded_field_value)

Автоочистка параллельно с парсингом (apps.adsapiruparser.autoclear) - включение этой настройки запускает стандартный уборщик устаревших объектов при каждом запуске парсинга

Количество дней, через которое объект будет считаться старым (apps.adsapiruparser.oldage) - числовое количество дней, про истечении которых от "Даты добавления" объект будет считаться старым и подлежащим уборке. Указание 0 или "пусто" отключает проверку на старость.

Обновлять объекты (apps.adsapiruparser.update_advs) - настройка указывает следует ли синхронизировать уже загруженные объекты с данными этих объектов в источнике. При включении этой опции, в объекте на сайте будут обновлены все данные, кроме активности и владельца объекта на сайте (значение поля user_id). Так же будут обновлены все данные, измененные после загрузки объекта. Поэтому, если вы модерируете и облагораживаете объекты пришедшие с источника, не используйте эту опцию. Данная опция идеально подходит для полной синхронизации базы с источником, когда все данные остаются в виде предоставляемом ADS-API.RU и Вы лишь распределяете объеты между агентами на сайте и управляете их активностью.

Настройка маппинга

Для указания каким способом и куда сохранять полученные из парсера данные служит раздел настроек приложения Маппер.

Количество комнат в квартире или доме - указываем системное имя поля в модели data для сохранения числового значения. Это значение для типов Квартира и Дом.

Этаж - системное имя поля для хранения значения.

Этажность - системное имя поля для хранения значения.

Координаты - указываем системное имя поля в модели data для сохранения значения. Поле должно иметь тип geodata

Уникальный ID - системное имя поля для хранения ID объекта в базе ads-api.ru. Это значение будет использоваться для проверки был ли загружен данный объект ранее или нет.

Цена аренды - системное имя поля для хранения значения цены для сдаваемых объектов.

Цена продажи - системное имя поля для хранения значения цены для продаваемых объектов.

Валюта цен - ID валюты на сайте, которое соответствует валюте цен из парсера. Так как парсер выдает все цены в рублях, то в этом поле должен быть указан ID рубля из Менеджера валют. Если на сайте цены не указываются посредством поля выбора валют, то это значение может быть пропущено.

Общая площадь (Квартиры\Дома), Общая площадь (Коммерческие объекты), Общая площадь (Гаражи) - системное имя поля для хранения значения общей площади для разных типов объектов. Если в модели объекта под хранение общей площади предназначено одно поле, например "Общая площадь (square_all)", то в каждом из этих полей указывается одно и то же системное имя.

Жилая площадь, Площадь кухни - системные имена полей под хранение соответствующих значений

Площадь участка (отдельного) - системное имя поля для хранения площади земельного участка. Это поле будет использовано для записи площади, когда парсер встретит объект типа Участок.

Площадь участка (при доме) - системное имя поля для хранения площади земельного участка. Это поле будет использовано для записи площади участка, когда парсер встретит объект любого другого типа кроме Участок, но этот объект, кроме своей основной площади, будет снабжен данными о площади участка. Например когда предлагается Дом с участком, коммерческие объекты, которые могут иметь в своем расположении участки.

Описание, Заголовок - системные имена полей под хранение соответствующих значений. Если поля для хранения какого-то значения у Вас не предусмотрено, Вы можете или добавить поле в модель, или не указывать соотв. настройку.

Полный адрес - системное имя поля для хранения строки с полным адресом объекта. Для справки, например.

Номер телефона, Имя контактного лица - системные имена полей под хранение имени и телефона владельца или продавца предоставляемых парсером.

Название источника - системное имя поля для хранения строки с названием источника.


Важно! Все упомянутые выше настройки устанавливают конкретное значение из данных парсера. Например из парсера приходит объект с признаком "комнатность" равным 5. При сохранении этого значения могут возникнуть следующие ситуации:

а) в наличии имеется поле под хранение комнатности, оно имеет вид текстового поля и системное имя room_count. Тогда мы просто указываем room_count в поле Количество комнат в квартире или доме

б) в наличии имеется поле под хранение комнатности, но оно имеет вид поля выбора вариантов select_box и варианты {1~~1}{2~~2}{3~~3} и системное имя room_count. В этом случае мы так же можем указать аналогично предыдущему, так как ключи у нас совпадают с величиной комнатности.

в) в наличии имеется поле под хранение комнатности, но оно имеет вид поля выбора вариантов select_box и варианты {1~~1комн}{2~~2комн}{3~~3комн} и системное имя room_count. В этом случае мы так же можем указать аналогично предыдущему, так как ключи у нас совпадают с величиной комнатности.

г) Комнатность учтена в названиях наших разделов. В этом случае мы не можем указать поле под хранение, так как его не существует. А для правильного размещения объекта в разделе мы будем вынуждены воспользоваться Adsapiruparser_Resolver

Распределение по типам и контракту

Все объекты из парсера приходят с признаками типа (Квартира, Комната, Дом, Коммерческая, Участок) и контракта (Продажа, Аренда и Посуточно (только Квартира, Комната, Дом)). Необходимо указать имена полей и значения, которые будут присвоены объекту в случае каждого свойства.

Для этого существует набор настроек маппера. Эти настройки построены в виде пар Тип объекта - Тип контракта. Так настройка "Дом/Продажа" устанавливает условия, которые будут применены к загружаемому объекту с типом "Дом" и контрактом "Продажа". Вы не обязаны указывать условия для всех типов-контрактов. Допустимо установить только интересующие Вас. Объекты, для которых не будет найдено условий просто не будут добавлены в базу.


Настройки этого типа указываются в виде пар имя-значение

СИСТЕМНОЕ_ИМЯ_ПОЛЯ=ПРИСВАИВАЕМОЕ_ЗНАЧЕНИЕ

Таких пар можно указать несколько, но каждую с новой строки.

Допустим Ваша структура разделов имеет вид (в скобках указан ID соотв. раздела)

Продажа (27)
-- Квартиры (33)
-- Дома (38)
Аренда (24)
-- Квартиры (53)
-- Дома (66)

В таком случае для "Дом/Продажа" Вам необходимо будет указать набор правил

topic_id=38

А если бы Вашу структура имела вид

Жилая
-- Квартиры (33)
-- Дома (38)

и контракт был бы вынесен в отдельное поле с именем optype вида {1~~Продажа}{2~~Аренда}, то правила приняли бы вид

topic_id=38
optype=1

Рассмотрим еще один пример. На сайте существует раздел для продажи земельных участков с ID=78. Так же у нас есть поле под хранение типа участка вида {1~~ИЖС}{2~~СНТ} и с сситемным именем lot_type. Тогда для раздела Поселений (ИЖС)/Продажа мы установим следующие правила

topic_id=78
lot_type=1

Некоторые типы, например Участки и Гаражи имеют очень детальное деление. Если Вас не интересует столь детальные данные, то Вы можете использовать пункты Любые участки и Любой гараж, которые включают в себя любой детальный подтип этого типа.

Материал дома

Группа настроек для получения материала домов. Настройка производится по принципу аналогичному установке типа недвижимости, за исключением того, что указать можно только одну пару.

Если материал дома хранится на сайте в поле выбора вариантов с системным именем walls_type и вариантами {1~~Кирпич}{2~~Панель}, то для получения данных о кирпичном материале дома из парсера укажите

walls_type=1

Если же поле walls_type имеет вид поля ввода и данные о материале дома вводятся вручную, то можно указать таким образом

walls_type=Кирп.

Adsapiruparser_Resolver

В процессе парсинга приложение ищет в папке шаблона по адресу /template/frontend/ШАБЛОН/apps/adsapiruparser/ специальный файл adsapiruparser_resolver.php

Этот файл предназначен для выполнения нестандартных либо невозможных для парсера действий. Например для превращения данных о комнатности объекта в конкретный раздел структуры, для разбора географических данных, для установки каких-то дополнительных свойств.

Код приложения поддерживает вызов таких предопределенных функций резольвера:

filterModel($model) - фильтратор модели. Функция получает на вход полную модель объекта и возвращает ее в отфильтрованном виде. Вы можете реализовать в ней исключение каких-то полей из базовой модели, изменение их свойств и правил примененных к полю.

validate($data, &$msg) - проверка объекта. Функция получает на вход инициированную данными модель объекта полученную в процессе парсинга и ссылку на переменную с текстом причины отклонения. Возвращает значение true или false как результат проверки. Вы можете реализовать в ней какие-то нестандартные проверки, которые не могут быть реализованы правилами или должны применяться только для объектов, загружаемых парсером.

setTypes($object, &$data) - установка типов, установить которые настройками маппинга невозможно. Функция получает на вход массив данных распарсенного объекта и ссылку на объект-модель в которую данные укладываются.

resolve($object, $data) - дополнительный маппинг. Функция получает на вход массив данных распарсенного объекта и ссылку на объект-модель в которую данные укладываются. В этой функции можно реализовать нестандартные варианты соотношения данных из парсера полям объекта, дополнительные операции типа форматирования, конвертирования, установить значения, установка которых маппером не поддерживается и прочие инициализационные действия.