Обновление справочников со внешнего источника с возможностью внесения самостоятельных правок

в 7:45, , рубрики: краудсорсинг, росяма, синхронизация, метки: ,

Есть такой сайт — РосЯма. Когда-то давно о нём даже писали на хабре. Я его поддерживаю и хочу поделиться решением одной маленькой проблемки, с которой столкнулся в процессе. Возможно, кому-то это будет интересно.

Ну так вот. На РосЯме есть два справочника, которые обновляются из внешних источников. Это справочник подразделений ГИБДД и справочник региональных Прокуратур. Они заполняются данными из официальных сайтов ГИБДД и Генпрокуратуры. Однако данные на этих сайтах иногда оказываются ошибочными (например индекс Нижегородского ГИБДД), а иногда обновляются недостаточно оперативно. И пользователи сообщают нам об этом, поскольку хотят пользоваться актуальными данными.

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

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

Поэтому было решено сделать умную систему гибкой синхронизации.

Были созданы копии справочников ГИБДД и Прокуратур. В этих справочниках хранится информация, приехавшая при прошлой синхронизации. При текущей синхронизации, полученная информация сравнивается с копией справочника, выявляются изменённые данные, и уже только эти данные и обновляются в боевом справочнике. В результате, получив информацию от пользователя о неверных данных в справочнике, можно сразу же внести корректировки на РосЯме, а так же написать письмо в ГИБДД, с тем, чтобы они у себя подправили. После чего я спокойно отдыхаю, потому что знаю, что когда ГИБДД подправит данные по моему сообщению — РосЯма их подгрузит автоматически и ничего при этом не сломается.

Если кому интересно — код реализации выложен на гитхабе: github.com/RosYama/RosYama.2/blob/master/protected/controllers/SpravController.php функции actionFill_gibdd_reference() и actionFill_prosecutor_reference()

P.S. А ещё у нас вчера появилась такая же ключница, как и на хабре, вот )))

Автор: fezeev

Поделиться

* - обязательные к заполнению поля