Приложение "Yandex.Realty Parser"

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

Приложение для реализации импорта объявлений на сайт из фидов составленных по формату Яндекс.Недвижимость

Требования

Приложение требует дополнения модели полем url (тип safe_string) для хранения признака идентичности, если не используется настройка apps.yandexrealty_parser.use_internalids, предписывающая сличать объекты по внешнему ID

Сличение объектов

Объекты в фиде и объекты на сайте проходят сличение для того, что бы определить какие объекты являются аналогичными в фиде и в сайте и подлежат обновлению, а какие являются новыми и требуют вставки. Сличение может проводиться либо по полю модели объекта data с именем url, в котором хранится урл объявления из xml-фида, либо по идентификатору объекта в БД, который может соответствовать аналогичному в xml-фиде.

Переключение между этими двумя режимами выполняется настройкой Использовать internal-id в качестве ID (apps.yandexrealty_parser.use_internalids). При ее включении объекты будут добавляться в сайт с идентификаторами равными идентификаторам объектов в xml-фиде.


Парсинг географии

При парсинге разбираются следующие параметры расположения - страна, регион, район области, город, район города, улица, номер дома.

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

В связанном режиме загрузки могут учитываться стандартные связи в модели объявления или, при включенной настройке apps.realty_off_system_ajax, пользовательские связи. Основными выступают связи указанные в модели объявления. Если в модели объявления у Вас указана зависимость улицы от города, а в модели улицы будет указана ее зависимость от района, то при парсинге будет учитываться именно первый вариант, но не второй.

При связанном режиме НЕ БУДУТ ДОБАВЛЯТЬСЯ те географические уровни, для которых не удалось определить родительский объект, если он требуется. Например, если в выгрузке пропущено указание региона, а указаны только страна и город, но в модели объявления указаны связи вида Страна - Регион - Город, то для загружаемого объявления будет указана только страна, так как определить и добавить город не будет возможности из-за отсуствия промежуточного звена Регион.

По умолчанию используется режим несвязанного добавления географии.

Несвязанный режим

Используется при выключенной настройке apps.yandexrealty_parser.connected_geo

География парсится по уровням. Каждый уровень раскладывается в соотв. таблицу географический сущностей и в соотв. поле в модели объекта без учета связок с другими уровнями. Поиск подходящего существующего объекта географии производится по текстовому названию. Если поиск не даст результата и вставка данного уровня не запрещена, то будет добавлено новая единица в таблице данного уровня.

Определяются названия страны, региона, города, района города, улицы и номер дома. Определенные значения размещаются в поля модели объекта: country_id, region_id, city_id, district_id, street_id, number. Изменить поля-приемщики данных нельзя.

Стандартный связанный режим

Используется при включенной настройке apps.yandexrealty_parser.connected_geo и выключенной apps.realty.off_system_ajax

География парсится по уровням. Каждый уровень раскладывается в соотв. таблицу географический сущностей и в соотв. поле в модели объекта с учетом связок с другими уровнями обусловленными настройками:

Ajax - обновление региона (apps.realty.ajax_region_refresh)
Ajax - обновление города (apps.realty.ajax_city_refresh)
Ajax - обновление района (apps.realty.ajax_district_refresh)
Ajax - обновление метро (apps.realty.ajax_metro_refresh)
Ajax - обновление улицы (apps.realty.ajax_street_refresh)
link_metro_to_district
link_street_to_city

Поиск подходящего существующего объекта географии производится по текстовому названию с учетом привязки к родительскому уровню. Если поиск не даст результата и вставка данного уровня не запрещена, то будет добавлено новая единица в таблице данного уровня с соотвествующей привязкой к родительскому уровню.

Например, если на парсинг пришел объект с названием региона "Тверская область" и названием города "Тверь", то в списке существующих городов будет выполнен поиск региона с именем "Тверская область", а потом поиск города с именем "Тверь", который имеет привязку к найденому ранее региону. Если город не будет найден, но вставка его не запрещена, то такой город будет добавлен в список городов и присвоен данным объекта. Если же не будет найден такой регион, и возможности вставки его не будет, то ни регион, ни город не будут добавлены, а в объекте поля, отвечающие за регион и город не будут проинициализированы.

Определяются названия страны, региона, города, района города, улицы и номер дома. Определенные значения размещаются в поля модели объекта: country_id, region_id, city_id, district_id, street_id, number. Изменить поля-приемщики данных нельзя.

Так как формат ЯН допускает "пропадание" частей географической цепочки для городов Москва и СПБ, то разобрать географию таких объектов для сайте, где указана зависимость города от региона не удастся. Для исправления этой ситуации служат две настройки данного приложения:

ID региона для города Москва (apps.yandexrealty_parser.moscow_region_id)
ID региона для города СПБ (apps.yandexrealty_parser.spb_region_id)

Данные две настройки позволяют указать в числовом виде идентификатор региона в котором следует искать названия городов для г. Москва и для г. СПБ, так как определить регион из данных XML невозможно. Установка этих значений создает ситуацию, имитирующую случай, что регион удалось определить и цепочка не разорвана. Сам регион, идентификатор которого будет указан в этих настройках, должен быть создан администратором и надлежащим способом связан с соответствующим объектов верхнего уровня.

Пользовательский связанный режим

Используется при включенных настройках apps.yandexrealty_parser.connected_geo и apps.realty.off_system_ajax

География парсится по уровням. Каждый уровень раскладывается в соотв. таблицу географический сущностей и в соотв. поле в модели объекта с учетом связок с другими уровнями обусловленными параметрами элементов модели объекта linked и depended. Парсер, на основании указанных Вами параметров элементов модели linked и depended, выстроит цепочки зависимостей элементов друг от друга и будет соблюдать их иерархию при вставке.

Для этого режима Вам необходимо указать или изменить настройки описывающие имена полей-приемщиков в модели объекта

Системное имя поля модели для хранения названия страны (apps.yandexrealty_parser.country_field)
Указывает поле-приемщик для имени страны из тега <country> XML-фида

Системное имя поля модели для хранения названия региона (apps.yandexrealty_parser.region_field)
Указывает поле-приемщик для имени региона из тега <region> XML-фида

Системное имя поля модели для хранения названия района области (apps.yandexrealty_parser.district_field)
Указывает поле-приемщик для имени района области из тега <district> XML-фида

Системное имя поля модели для хранения названия города (apps.yandexrealty_parser.locality_field)
Указывает поле-приемщик для имени города из тега <locality-name> XML-фида

Системное имя поля модели для хранения названия района города (apps.yandexrealty_parser.sublocality_field)
Указывает поле-приемщик для имени района района города из тега <sub-locality-name> XML-фида

Системное имя поля модели для хранения названия метро (apps.yandexrealty_parser.metro_field)
Указывает поле-приемщик для имени метро из тега <metro> XML-фида

Системное имя поля модели для хранения названия улицы (apps.yandexrealty_parser.street_field)
Указывает поле-приемщик для имени улицы из тега <address> XML-фида

Поиск подходящего существующего объекта географии производится по текстовому названию с учетом привязки к родительскому уровню. Если поиск не даст результата и вставка данного уровня не запрещена, то будет добавлено новая единица в таблице данного уровня с соответствующей привязкой к родительскому уровню.

Невозможность определить или вставить очередной уровень с зависимостью от его задекларированных родителей приведет к обрыву вставки всех нижеследующих уровней.

Определяются названия страны, региона, района области, города, района города, улицы и номер дома.

Так как формат ЯН допускает "пропадание" частей географической цепочки для городов Москва и СПБ, то разобрать географию таких объектов для сайте, где указана зависимость города от региона не удастся. Для исправления этой ситуации служат две настройки данного приложения:

Привязка начала цепочки для города СПБ (apps.yandexrealty_parser.spb_link)
Привязка начала цепочки для города Москва (apps.yandexrealty_parser.moscow_link)

Данные две настройки позволяют указать в виде "системное_имя_поля=числовой_идентификатор" точку отсчета для вставки географии. Например мы имеем город с именем "СПБ" и его ID=12 в нашей базе городов. Этот город расположен в регионе "Северная Россия", который расположен в стране "Россия". А сами города указываются в нашей модели объекта в поле с именем city_id. Так как для Санкт-Петербурга в выгрузке регион не будет передан совсем, мы не сможем вставить эти данные на сайт из-за разрыва в цепочке. Для этого мы можем указать в настройке apps.yandexrealty_parser.spb_link значение "city_id=12". Это будет означать, что если парсер найдет в данных XML значение <locality-name>Санкт-Петербург</locality-name>, он извлечет из БД всю иерархию уровней выше city_id для объекта географии размещенного под ID=12 и начнет анализ географии из xml уже с этой точки - определит район города, улицу, метро и вставит, при возможности, все это уже относительно объекта географии с city_id=12.

Настройки