metrpro

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

Recommended Posts

Добрый день!

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

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

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

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

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

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

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

 

 

 

Share this post


Link to post
Share on other sites
7 часов назад, metrpro сказал:

Добрый день!

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

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

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

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

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

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

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

 

 

 

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

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

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

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

Share this post


Link to post
Share on other sites
15 часов назад, vihr сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites
В 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 у объектов из фидов и разные ли они для каждого фида?

Share this post


Link to post
Share on other sites
5 часов назад, rumantic сказал:

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

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

Share this post


Link to post
Share on other sites
В 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 у объектов из фидов и разные ли они для каждого фида?

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

Share this post


Link to post
Share on other sites
В 13.01.2020 в 10:26, metrpro сказал:

Добрый день!

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

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

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

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.