metrpro

Синхронизация нескольких входящих фидов через парсер

Recommended Posts

Добрый день!

Есть сайт, на котором объявления размещаются двумя способами:

  • вручную (частники и риэлторы)
  • пакетно (агентства недвижимости и девелоперы).

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

Конечно, разработчики sitebill предусмотрели опцию "Удалять после парсинга записи, которых нет в файле XML (apps.yandexrealty_parser.delete_old_records)". Однако, если произвести парсинг с этой включенной опцией, то будут удалены все объявления, добавленные ручками, и все объявления, ранее добавленные из других фидов (т.е. один фид просто выживет все другие). Проверка на то, что удалять отсутствующие в фиде объявления нужно только у пользователя, загружающего фид, системой в настоящее время не осуществляется. Также нет запрета на удаление тех объявлений, что были добавлены вручную.

Может, я чего-то не понимаю и есть в движке какая-то опция, которая снимет все проблемы, а я спокойно выставлю все фиды на автоматическую синхронизацию через cron и буду спать спокойно?

Прошу помощи! Спасибо за внимание!

PS: Я полтора года назад не подумав залил фид с выставленной опцией apps.yandexrealty_parser.delete_old_records - в результате были удалены около 20К объявлений (а я стал на несколько кирпичей богаче).

 

 

 

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


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, metrpro сказал:

Добрый день!

Есть сайт, на котором объявления размещаются двумя способами:

  • вручную (частники и риэлторы)
  • пакетно (агентства недвижимости и девелоперы).

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

Конечно, разработчики sitebill предусмотрели опцию "Удалять после парсинга записи, которых нет в файле XML (apps.yandexrealty_parser.delete_old_records)". Однако, если произвести парсинг с этой включенной опцией, то будут удалены все объявления, добавленные ручками, и все объявления, ранее добавленные из других фидов (т.е. один фид просто выживет все другие). Проверка на то, что удалять отсутствующие в фиде объявления нужно только у пользователя, загружающего фид, системой в настоящее время не осуществляется. Также нет запрета на удаление тех объявлений, что были добавлены вручную.

Может, я чего-то не понимаю и есть в движке какая-то опция, которая снимет все проблемы, а я спокойно выставлю все фиды на автоматическую синхронизацию через cron и буду спать спокойно?

Прошу помощи! Спасибо за внимание!

PS: Я полтора года назад не подумав залил фид с выставленной опцией apps.yandexrealty_parser.delete_old_records - в результате были удалены около 20К объявлений (а я стал на несколько кирпичей богаче).

 

 

 

Я изменял модуль, добавлял еще поле в дату import_feed_id

Пишем туда данные о источнике -фиде.

После отработки импорта деактивируем то что не апдейтнулось.

Через пару дней сносим эти объекты, чтобы не было проблем если неудачный импорт произошел.

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


Ссылка на сообщение
Поделиться на других сайтах
15 часов назад, vihr сказал:

Я изменял модуль, добавлял еще поле в дату import_feed_id

Пишем туда данные о источнике -фиде.

А логика действий какая? 

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


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

Тебе надо понять из какого конкретно источника данный объект чтобы понять стоит ли его удалять.

У меня чуть больше 1500источников - фидов

Можешь канечно упростить и сделать 

Update re_data set active=0 where active=0 and url>'' and date_edit<'два дня назад' 

Если у тя каждый день фиды апдейтятся

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


Ссылка на сообщение
Поделиться на других сайтах
В 13.01.2020 в 14:26, metrpro сказал:

Может, я чего-то не понимаю и есть в движке какая-то опция, которая снимет все проблемы, а я спокойно выставлю все фиды на автоматическую синхронизацию через cron и буду спать спокойно?

Удаление при каждом запуске парсера при включенной опции удалять старые выполняет такой запрос на получение кандидатов на удаление

$query = "SELECT id FROM " . DB_PREFIX . "_" . $this->table_name . " where xml_source_id=" . $xml_source_id;

Затем определяются ИД, которые есть в фиде - и они не удаляются.

А те что остались, удаляются.

Тут есть опция xml_source_id - т.е. при добавлении источников ему дается ИД. И удаление будет выполняться только для этого источника.

Все остальные, в том числе добавленные вручную не входят в это условие.

Проверьте, есть ли у вас xml_source_id у объектов из фидов и разные ли они для каждого фида?

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


Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, rumantic сказал:

Проверьте, есть ли у вас xml_source_id у объектов из фидов и разные ли они для каждого фида?

В какой таблице должно стоять это поле?

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


Ссылка на сообщение
Поделиться на других сайтах
В 15.01.2020 в 04:42, rumantic сказал:

Удаление при каждом запуске парсера при включенной опции удалять старые выполняет такой запрос на получение кандидатов на удаление


$query = "SELECT id FROM " . DB_PREFIX . "_" . $this->table_name . " where xml_source_id=" . $xml_source_id;

Затем определяются ИД, которые есть в фиде - и они не удаляются.

А те что остались, удаляются.

Тут есть опция xml_source_id - т.е. при добавлении источников ему дается ИД. И удаление будет выполняться только для этого источника.

Все остальные, в том числе добавленные вручную не входят в это условие.

Проверьте, есть ли у вас xml_source_id у объектов из фидов и разные ли они для каждого фида?

не лучше ли при загрузке фида проводить сравнение?

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


Ссылка на сообщение
Поделиться на других сайтах
В 13.01.2020 в 10:26, metrpro сказал:

Добрый день!

Есть сайт, на котором объявления размещаются двумя способами:

  • вручную (частники и риэлторы)
  • пакетно (агентства недвижимости и девелоперы).

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

Конечно, разработчики sitebill предусмотрели опцию "Удалять после парсинга записи, которых нет в файле XML (apps.yandexrealty_parser.delete_old_records)". Однако, если произвести парсинг с этой включенной опцией, то будут удалены все объявления, добавленные ручками, и все объявления, ранее добавленные из других фидов (т.е. один фид просто выживет все другие). Проверка на то, что удалять отсутствующие в фиде объявления нужно только у пользователя, загружающего фид, системой в настоящее время не осуществляется. Также нет запрета на удаление тех объявлений, что были добавлены вручную.

Может, я чего-то не понимаю и есть в движке какая-то опция, которая снимет все проблемы, а я спокойно выставлю все фиды на автоматическую синхронизацию через cron и буду спать спокойно?

Прошу помощи! Спасибо за внимание!

PS: Я полтора года назад не подумав залил фид с выставленной опцией apps.yandexrealty_parser.delete_old_records - в результате были удалены около 20К объявлений (а я стал на несколько кирпичей богаче).

 

могли бы описать более подробно всю механику и весь механизм импорта, сравнения, удаления и тд

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


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

Можно вызывать ФИД на определенного пользователя?
Например имеются на нашем сайте 10 юзеров.
Нам нужно вызвать яндекс ФИД c объявлениями, только например на юзера с "id=5"

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


Ссылка на сообщение
Поделиться на других сайтах
12 часа назад, ReatEstate сказал:

Можно вызывать ФИД на определенного пользователя?
Например имеются на нашем сайте 10 юзеров.
Нам нужно вызвать яндекс ФИД c объявлениями, только например на юзера с "id=5"

Да, смотрите раздел Персональные фиды

https://wiki.sitebill.ru/index.php?title=Приложение_"Выгрузка_Yandex.Realty"

 

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


Ссылка на сообщение
Поделиться на других сайтах
В 15.01.2020 в 02:42, Дмитрий Кондин сказал:

Удаление при каждом запуске парсера при включенной опции удалять старые выполняет такой запрос на получение кандидатов на удаление


$query = "SELECT id FROM " . DB_PREFIX . "_" . $this->table_name . " where xml_source_id=" . $xml_source_id;

Затем определяются ИД, которые есть в фиде - и они не удаляются.

А те что остались, удаляются.

Тут есть опция xml_source_id - т.е. при добавлении источников ему дается ИД. И удаление будет выполняться только для этого источника.

Все остальные, в том числе добавленные вручную не входят в это условие.

Проверьте, есть ли у вас xml_source_id у объектов из фидов и разные ли они для каждого фида?

Дошли руки )) Есть, разный для разных фидов

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


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.