IGOR

Приложение выгрузки объявлений в AFY.ru

Recommended Posts

По порядку. Хотел ответить сразу в письме, но оторвали и оно улеглось в черновиках))) Отвечаю тут.

1. Не установилось по do=install потому, что мы добавили обработчик установки позже, чем вышел последний апдейт. Тут никакие права не помогли бы.

 

2. По поводу rules=type:int,Min=0, Max=100; то их расставили по приниципу максимальной жесткости. Они не являются абсолютом и их можно изменять. Если конкретно по высоте потолков, то яндекс не регламентирует тип значения (т.е. по версии яндекса там может быть даже "семь метров" словами) и мы использовали максимально безопасный - целый.

 

3. По похожим полям и их дублированию. На данный момент это имеет место быть. Рассчитывать на наличие нужных полей, которые поставятся с яндекс-выгрузкой не приходится, так как не все ее ставят. Заставлять заводить все поля или все нужные поля, тоже не вариант - лдалеко не всем ядекс-циан-афи-совместимый набор полей нужен даже на 10%. И в тоже время их поля не покрывают всей вариантности встреченных мною полей.

Так что в данный момент некоторые дубли обрабатываются попарно, например ЯВыгрузка проверяет и room_count и rooms. Некоторые выгрузки работают только со "своими" полями.

Это будет решаться. Мы сделали главную ошибку, решив выпустить универсальный быстро настраиваемый модуль с прицелом "на чайника". В результате получили слишком много универсальности. От этого будем уходить. Как минимум к тщательным ассоциациям каждого поля выгрузки относительно полей объявления. Как максимум к индивидуальному модулю, который будет учитывать структуру data на домене, где запускается.

 

4. Насчет ориентации на АФИ. Личное впечатление. Приемщик объявлений, который выпустил путанную спецификацию "на все случаи жизни", не может cделать публичный валидатор, вряд ли годится на некий эталон-образец. Полей у них много, но заточены они опять таки именно под АФИ. Нет смысла ориентироваться на него. Но необходимый минимум для афи реализован и, если есть какие-то ценные поля, которые стоит добавить, то это учтется. Всегда можно расширить выгрузку афи, реализовав локальный компоновщик, которые обработает и не обрабатываемые в базовом, поля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Понял, уже самостоятельно разобрался...

 

2. попробовал в потолках указать 2,7 и получил ошибку "указывать только целое число..." по этому вообще rules для данной позиции убрал и заменил поле на select_box из набора встречающихся вариантов высот, типа 2,5; 2,7; 3,0; 3,2; 3,4; 4,0; 5,0; 6,0; 7,0; метров.

 

3. на мой взгляд, просто не надо было заводить второе поле, если уже одно есть... достаточно было имеющееся поле вставить в формирование xml-файла. Теперь вот думай, будут-ли глюки, если оставлю действующими поля под Яндекс-выгрузку а дублеры, изначально имевшиеся в CMS отключу?

 

4. У них "ручной" валидатор... :) Много полей как раз не под AFY заточены, они заточены под выгрузку с AFY на сторонние рекламные площадки, у которых свои тараканы. Поскольку часто получаю приветы от загрузчика о том, что объявление не может быть выгружено:

- на сайт А, потому, что не указано количество киловатт электричества,

- на сайт В, потому, что не указано есть-ли газ в соседнем нас.пункте

- на сайт С, потому, что не с той ноги встали ... :)

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2. Дальше еще необходимо будет ослабить проверку в самом экспорте.

if(isset($form_data_shared['ceiling_height']) && isset($data_item['ceiling_height']) && (int)$data_item['ceiling_height']!=0){$rs.='<ceiling-height>'.(int)$data_item['ceiling_height'].'</ceiling-height>'."\n";}

во второй строке убрать (int). Иначе получится, что условие значение на форме проходит, на выгрузке, в принципе, тоже проходит, но в сам xml вставляется не верным значением.

 

3. Приложения разрабатывались отдельно поэтому было нереально поймать дубли. Иначе бы их точно не было.

а дублеры, изначально имевшиеся в CMS отключу?

 

тут нужно смотреть по конкретным полям. абстрактно не скажу.

4. ок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

по п.3 поля-дублёры, проверил:

если отключить поля имевшиеся изначально в таблице data, то с сайта пропадут (в подробностях объявлений) параметры:

- количество комнат (полагаю, что и поиск к нему привязан)

- мебель

- материал стен

- плита (на усмотрение, поскольку для Яндекса есть параметр по газу)

если отключить расширенные (аналогичные) поля для XML Яндекс.недвижимость, то по видимому выгрузка станет не валидной.

Логично их объединить в выгрузке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На днях установил выгрузку для afy на новый сайт (скачал последние версии)... При установке права на файлы с ограничениями и их надо ручками менять, таблица для afy в базе по прежнему не прописывается и приходится прописывать её вручную, по команде /admin/index.php?action=afyexporter&do=install таблица не прописывается. Поправьте в конце-концов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На днях установил выгрузку для afy на новый сайт (скачал последние версии)... При установке права на файлы с ограничениями и их надо ручками менять, таблица для afy в базе по прежнему не прописывается и приходится прописывать её вручную, по команде /admin/index.php?action=afyexporter&do=install таблица не прописывается. Поправьте в конце-концов.

Обновил дистрибутив в ЛК.

После установки приложений лучше сразу заглядывать сначала в обновления, архивы в ЛК не всегда самые свежие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос по графе "тема объявления" отправляемой на АФУ .
сейчас она выглядит так:

<theme>
{topic_id}, {citi_id}
</theme>

 

А хочеться так:
<theme>
Если не пусто {room_count}, то публиковать {room_count}"-к/к" иначе не передавать инфу, {topic_id}"," {district_id}"," {street_id}"," Если не пусто {square_all}, то передавать {square_all}"/" иначе не передавать инфу, Если не пусто {square_live}, то передавать {square_live}"/", иначе не передавать инфу, Если не пусто {square_kitchen}, то передавать {square_kitchene}"/", иначе не передавать инфу, Если не пусто {floor}, то передавать "этажность -" {floor}"/" иначе не передавать инфу, Если не пусто {floor_count}, то передавать {floor_count}, иначе не передавать инфу,
</theme>

*в ковычках"" - тесктовая информаци, в фигурных скобках {} параметр из ЦРМ.

то есть сейчас при экспорте объявления темя выглядит так:

"Улучшенная, город Городищенск"

А будет более внятная тема для потребителя информации:

"2-к/к Новострой, район, улица, 69/36/8, этажность-3/10"

или в случае если это дом:

Дом, район, улица, 120/80/15, этажность-3

и если это участок

Участок ИЖС, район, улица.


P.S. И еще одна проблемка, только сейчас заметил, в базе данных нет ячейки для площади участка   :(  :wacko:  :blink: .
Это нужно исправлять в шаблонах и в ЦРМ-ке, так как на сайте о продаже недвижимости не может не быть этого параметра,
недвижимость по своей сути, по определению начинаеться с земли, земля и её площадь альма-мазер всех услуг связанных с недвижимостью.

После того, когда вкрутим параметр площадь участка, то нужно будет в конец тега Темы объявления записать так: Если не пусто {S_uchastka}, то публиковать {S_uchastka}"-сот." иначе не передавать инфу.

Как это прикрутить?

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дмитрий, спасибо за прикрученный атрибут площади участка в базе,

и за все остальные атрибуты, как раз на праздники будет время разобраться что со всем этим счастьем делать :) 

Реально спасибо, с их наличием гораздо легче. Выключить и удалить как оказываеться проще чем прописать. :).

 

Пока условий нельзя составлять. Только если код править.

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

Может выкроете Ваше драгоценное время на реализацию этой затеи, и выпустите в обновлениях?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

/apps/afyexporter/admin/admin.php

    protected function exTheme($d){    	$hasError=false;    	$logs=array();    	    	$ret='';    	$theme='';    	if(isset($d['optype']) && $d['optype']['value_string']!=''){    		$theme[]=$d['optype']['value_string'];    	}    	    	if($d['topic_id']['value_string']!=''){    		$theme[]=$d['topic_id']['value_string'];    	}    	    	if($d['city_id']['value_string']!=''){    		$theme[]='город '.$d['city_id']['value_string'];    	}        	$ret.='<theme>'.SiteBill::iconv(SITE_ENCODING, 'utf-8', self::symbolsClear(implode(', ',$theme))).'</theme>';    	return array('hasError'=>$hasError, 'xml'=>$ret, 'log'=>$logs);    }

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. /apps/afyexporter/site/site.php копируем в /template/frontend/ваш_шаблон/apps/afyexporter/site/local_site.php (если такого файла еще нет)

2. внутренности скопированного файла наполняем содержимым

<?phpdefined('SITEBILL_DOCUMENT_ROOT') or die('Restricted access');class local_afyexporter_site extends afyexporter_site {}

3. Между class local_afyexporter_site extends afyexporter_site { и }  в него копируем функцию protected function exTheme($d) (которую Дмитрий выше привел) из /apps/afyexporter/admin/admin.php полностью

 

4. В этой функции налаживаем все нужные условия для формирования подходящего заголовка. В аргументе функции $d содержится модель текущего выгружаемого объекта в таком же виде, как и в карточке + в $d['_user_data'] - модель пользователя-владельца текущей записи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. /apps/afyexporter/site/site.php копируем в /template/frontend/ваш_шаблон/apps/afyexporter/site/local_site.php (если такого файла еще нет)

2. внутренности скопированного файла наполняем содержимым

<?phpdefined('SITEBILL_DOCUMENT_ROOT') or die('Restricted access');class local_afyexporter_site extends afyexporter_site {}

3. Между class local_afyexporter_site extends afyexporter_site { и }  в него копируем функцию protected function exTheme($d) (которую Дмитрий выше привел) из /apps/afyexporter/admin/admin.php полностью

 

4. В этой функции налаживаем все нужные условия для формирования подходящего заголовка. В аргументе функции $d содержится модель текущего выгружаемого объекта в таком же виде, как и в карточке + в $d['_user_data'] - модель пользователя-владельца текущей записи.

1. /apps/afyexporter/site/site.php копируем в /template/frontend/ваш_шаблон/apps/afyexporter/site/local_site.php (если такого файла еще нет)

Такого файла нет. после ваш шаблон/ вообще ничего нет, 

/ваш_шаблон/apps/afyexporter/site/local_site.php

после того как я это все создал по вашей инструкции и залил нужный мне код:

protected function exTheme($d){    	$hasError=false;    	$logs=array();    	    	$ret='';    	$theme='';    	if(isset($d['optype']) && $d['optype']['value_string']!=''){    		$theme[]=$d['optype']['value_string'];    	}       	        if($d['topic_id']['value_string']!=''){            $theme[]=$d['topic_id']['value_string'];        }   	        if($d['district_id']['value_string']!=''){            $theme[]=$d['district_id']['value_string'];        }        if($d['street_id']['value_string']!=''){            $theme[]=$d['street_id']['value_string'];        }        if($d['room_count']['value_string']!=''){            $theme[]=$d['room_count']['value_string'].'-комн';        }        if($d['floor']['value_string']!=''){            $theme[]=$d['floor']['value_string'].'/'.$d['floor_count']['value_string'];        }               if($d['square_kitchen']['value_string']!=''){            $theme[]=$d['square_all']['value_string'].'/'.$d['square_live']['value_string'].'/'.$d['square_kitchen']['value_string'];        }        if($d['lot_area']['value_string']!=''){            $theme[]=$d['lot_area']['value_string'].'-соток';        }

ничего не изменилсь, сейчас код стоит здесь /apps/afyexporter/admin/admin.php и все работает, боюсь что при обновлениях все это может сломаться.

 

Так как сломалось вот это: 

 

 

/apps/mlsparser/admin/admin.php

строка 756

$number=(int)trim($number);

заменяем на

$number=trim($number);

$number=preg_replace('/^([^\d]+)/', '', $number);

В результате этого номера вида

"д. 12", "дом 5", "д.13а", "стр. 3 корпус 4"

будут приводиться к

"12", "5", "13а", "3 корпус 4"

 

после очередного обновления пришлось опять править.

 

Сейчас вопрос такой:

 

лог афай выдает следующее при добавлении участков.

 

 

10-05-2015 12:35:42 ERROR: Record ID 210 cant be exported. Total square not setted.

10-05-2015 12:35:42 ERROR: Record ID 211 cant be exported. Total square not setted.

 

У участков не бывает аттрибута площади square, только площадь участка lot_area, по крайней мере в моем user_data.

Как исправить, что бы участки выгружались на AFY?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

при обновлениях все это может сломаться.

 

Все, что находится в /ваш_шаблон/ не изменяется при обновлении приложений. В /apps/mlsparser/admin/admin.php изменяется, но тут на данный момент нет варианта как вынести в сторону.

 

 

 

Как исправить, что бы участки выгружались на AFY?

 

Вот  такие поля в настройках АФИ есть у вас http://www.awesomescreenshot.com/image/206352/224f7b9833f87d9612a2520d9c811ae6 ?

 

 

ничего не изменилсь, сейчас код стоит здесь /apps/afyexporter/admin/admin.php и все работает

 

 

Не вижу видимой ошибки по коду в сообщении. "Не отработать" может только в том случае, если оно не нашло локальный файл от афи в папке шаблона.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот  такие поля в настройках АФИ есть у вас http://www.awesomescreenshot.com/image/206352/224f7b9833f87d9612a2520d9c811ae6 ?

Помогло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Указал участки в сотках, цена стоит за все, опять выдает ту же ошибку: Record ID 149 cant be exported. Total square not setted.

И так везде, на всех участках. В итоге они не выгружаются в Afy. Что и где не правильно? 

 

Ссылка выше с решением к самому решению сейчас не ведет, насколько я понял.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну да, скрин потерялся. Но раздел настроек приложения вы уже должны знать))

 

Указали вы поле для участков "Системное имя общей площади для участков" которое содержит общую площадь для участка? Если нет, тогда общая площадь будет браться из полей по уразумению движка, а такие поля могу не существовать в вашей модели, либо иметь иной смысл.

 

Невыгружаемые записи - они точно участки? Не в смысле в Категории на сайте, а в ассоциациях устанавливаемых в таблице ассоциаций приложения. Так как выгрузчик не "понимает", что в разделе Участки у вас лежат именно участки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выгрузки мне настроили по запросу в службу поддержки, т.е. я не принимал в ней участие.

 

Где мне искать "Системное имя общей площади для участков" и что в нем прописывать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Админка - Настройки - Выгрузка AFY

Тут можно указать системные имена полей из вашей модели, которые соотвествуют данным по площади. Например для квартир у вас общая площадь в square_all, а для участков площадь участка в landarea, т.е. каждый тип имеет свое поле. Вот их и нужно было бы указать в настройках.

А если для всех объектов у вас общая площадь хранится в одном поле, тогда не надо было бы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня сейчас так: В установке ассоциаций - участки продажа.

 

В выгрузке в Afy ни одно поле отвечающее за какой либо признак не заполнено.

 

Всего полей шесть, можно ли узнать что конкретно и в каком поле прописывать?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

"Страна по умолчанию "

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

 

 

Поле:Значение отвечающие за признак продажи

Поле:Значение отвечающие за признак аренды

 

Поля для установки признака как определить тип сделки. В таблице ассоциаций практически каждый АФИ-тип представлен в двух ипостасях:

- Тип (Общее) - для моделей где Структура не отражает тип контракта и он указывается отдельным полем, напр. optype

- Тип (Продажа\Аренда) = для тех моделей у кого нет отдельного типа полд операцию, а Аренда єто или продажа можно определить то иерархии пунктов Структуры.

 

Если у вас тип контракта зашит в Структуру, то вам нужно использовать второй вариант установки ассоциаций и нет смысла указывать упомянутых два настроечных поля.

Если первый способ, то в этих полях нужно указать поле и значение элемента которое будет соответствовать определенному типу операции. У меня Тип операции - это поле optype типа селектбокс со значениями 1-Аренда и 2-Продажа. Тогда я указываю optype:2 и optype:1 соответственно.

 

 

"Регион по умолчанию, например, Московская область"

- аналогично стране, только для региона.

 

 

Код валюты по умолчанию, например, RUR/EUR

Для моновалютных сайтов. Можно указать дефолтную валюту и даже не заводить поле под Валюту в модели объявления.

 

 

Системное имя общей площади для квартир и комнат

Системное имя общей площади для нежилой

Системное имя общей площади для домов

Системное имя общей площади для участков

 

Группа настроек имеющий общий смысл - указать в каком поле модели искать значение общей площади. Изначально в модели существует поле Общая площадь (square_all). Оно ничего не означает - чистая условность. Там может быть и общая площадь квартиры, и общая площадь участка или дома. Но обычно модель дополняется. Например под участок заводится поле square_lot в котором держат площадь участка , а поле square_all гасят для этого типа недвижимости. Все это ведет к тому, что существуют разные и непредсказуемые названия полей и алгоритм нахождения нужного становится нереальным.

 

Для этого добавлены упомянутые настройки. Если вы четко знаете, что в square_all у вас лежит площадь квартир, в square_total - для коммерческой, в house_ploshad - площадь для дома и в square_lot - площадь участков, то просто пропишите эти поля каждое в своей настройке. Тогда выгрузчик не будет искать знакомые ему поля или что-то выдумывать, а возьмет значения из указанных в настройках.

Например дойдя до участка, он будет искать поле и значение square_lot , а не как описано в алгоритме искать lot_area, а когда не найдет его, то проверит square_all , а так как там тоже пусто - выдаст ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я пропишу поля, каждое в своей настройке. Если будет ошибка в выгрузке, то я вернусь к этому вопросу.

 

Прошу меня простить, но я понятия не имею зашит ли у меня тип контракта в Структуру.

 

И я вообще не знаю, что в square_all лежит ли у меня площадь квартир, в square_total - для коммерческой, в house_ploshad - площадь для дома и в square_lot - площадь участков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 но я понятия не имею зашит ли у меня тип контракта в Структуру.

 

Если разделы вашего сайта содержат в каком либо виде указание на тип контракта (аренда, продажа, сдам, посуточно... в любом виде) и у вас нет в модели поля Тип операции (optype) - то 99,9% что зашит)))

 

И я вообще не знаю, что в square_all лежит ли у меня площадь квартир

 

 

Открываете Админка - Приложения - Редактор форм. Разворачиваете модель data и смотрите поля. Обычно по названию поля (Обая площадь, Площадь участка...) можно примерно понять, что оно олицетворяет на форме и, аналогично, в данных. Перепровериться можно через форму добавления в админке меняя в форме Тип недвижимости, что бы учесть установленные права видимости.

 

И я не помню ссылку на ваш сайт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо службе поддержки, все настроили.

 

Теперь вопрос следующий.

 

В выгрузке Afy колонка, отвечающая за район <raion></raion> у меня уже занята списками микрорайонов, некоторые сайты не принимают эти списки. Они распознают только названия округов.

 

Какую колонку нужно добавить в таблицу data, чтобы не удалять списки микрорайонов и при этом появилась еще одна запись в выгрузке <raion></raion>, ну и при этом данные округов и микрорайонов не перемешались.

 

Вот так:

 

<country>Россия</country>

<oblast>Краснодарский край</oblast>
<raion>Центральный</raion>
<raion>ШМР</raion>
<city>Краснодар</city>
<street>Черниговская</street>
<house>1</house>

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добавлением колонки тут не обойдешься. Одна колонка - одно поле. Тут нужно ваять локальный выгрузчик, в котором переправлять функцию exLocation что бы она брала данные не из привычного поля, а и нужного. И вот тогда уже добавлять колонку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А можно ли сделать копию существующего поля Район и сделать его основным, и данные в выгрузку будут из него, а данные из оригинала пусть не добавляются в выгрузку вообще. Т.е. новое поле подменить на старое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас