Требуется написать скрипт, который анализирует xml выгрузку товарной номенклатуры на наличие изменений,
и изменения загружает в специализированное хранилище через REST-подобный интерфейс.
Язык реализации perl, среда исполнения Debian7 либо CentOS 6.6.
Раз в сутки на ftp://tempUser:tempPass@uploadFtp.local/asrt/ появляется xml файл daily.xml (~150MB) с описанием товаров-цен,
ftp внутренний (связь почти не пропадает) но неторопливый (файл грузится минуты 2).
Формат xml asrt.xsd (см вложение).
Нужен скрипт, который файл с ftp вытянет, сохранит локально (на ftp выгрузка перезатрётся на следующий день),
если файл битый или отсутствует отошлёт предупреждение в почту assortment_bug@mailserver.local,
если файл нормальный загрузит информацию по изменившимся с прошлого раза парам товар-ШК через rest-like сервис.
Сервис локальный (связь быстрая и почти не обрывается), но может на пару дней отключаться на регламентные работы,
в последнем случае изменения должны сохраняться и отправляться при следующем запуске скрипта.
Протокол сервиса:
в теле POST запроса на адрес
Storage.local:9000/q передаётся последовательность JSON объектов.
Content-Type тела запроса обязательно "application/json",
первый объект тип операции, для загрузки всегда
{"request":"upload","subject":" good"}
второй и последующие объекты описание одной пары Товар-ШК в формате
{"source_id":(код магазина(число)),
"code":"(внутренний код товара(строка))",
"barcode":"(ШК товара(строка))",
"title":"(название(строка))",
"price":(цена(число)),
"load_date":"(дата получения данных)",
"price_start":"(дата вступления цены в действие)"}
JSON обычный порядок параметров не важен, переносы/пробелы вне строк не важны.
авторизация отсутствует.
в одном запросе передавать не более 1000 объектов.
даты в формате "%Y-%m-%d %H:%M:%S", например "2016-11-09 16:37:32",
внутренний код товара формируется из исходных кода и характеристики по правилу:
если характеристика пустая строка, (внутренний код)=(исходный код),
иначе (внутренний код)=(исходный код)_(характеристика)
в HTTP ответе единственный JSON объект
{"status":"(ok или fail)",
"Description":"(описание ошибки, имеет смысл если статус fail)",
"received":(количество принятых объектов, не считая заголовочный)
Цена вопроса обсуждаема.
Для связи: nkopelyan@open-com.ru