Проект: Поставщики
Проверка данных
В большинстве случаев дополнительная проверка данных может не потребоваться. Ваш диггер работает, собирает данные, вы выгружаете их тем или иным способом и обрабатываете их на своей стороне. Вы можете, к примеру, забрать данные с сайта поставщика и импортировать их себе в магазин, при этом программное обеспечение вашего магазина само проверит импортируемые данные, отсеивая некорретные значения в полях. Но если подобного механизма проверки у вашего магазина нет, то вы можете поручить делать это Diggernaut еще на этапе сбора данных, чтобы проблемные записи не попадали в финальный дата-сет. Для этого сервис предлагает воспользоваться схемой проверки данных.
Переключите редактор сценария диггера в режим Проверка кликнув мышкой на соответствующую закладку:
Для того, что бы диггер начал проверять забираемые с сайта данные, в этом окне редактора необходимо разместить схему проверки.
Схема проверки представляет собой структуру JSON, описывающую требования к полям и данным в них.
Мы не планируем дублировать здесь официальную документацию по составлению схем проверки данных, но мы поделимся с вами полезными ссылками, где вы найдете исчерпывающую информацию и множество примеров как это делать.
- Официальный сайт JSON Schema - здесь есть все необходимое
- JSON Schema Validation - раздел этого сайта, посвещенный схеме проверки данных
- Примеры простые
- Примеры сложнее
- Онлайн валидатор - можно попробовать составить схему и посмотреть как она работает
- Статья на хабре - описание и валидация древовидных структур данных
И в качестве бонуса мы приводим пример схемы проверки с одного из рабочих диггеров :)
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Validator v1",
"description": "Supplier#1 validation schema",
"type": "object",
"required": ["offer"],
"properties": {
"offer": {
"type": "object",
"oneOf": [
{ "$ref": "#/definitions/Mattresses" },
{ "$ref": "#/definitions/Other" }
]
}
},
"definitions": {
"Mattresses": {
"type": "object",
"required": ["categoryId", "brand", "model", "original_url", "pictures", "hardness", "basis"],
"properties": {
"categoryId": {
"description": "ID категории для Матрасов (=1)",
"type": "string",
"pattern": "^1$"
},
"brand": {
"description": "Бренд",
"type": "string",
"minLength": 1
},
"model": {
"description": "Product name",
"type": "string",
"minLength": 1
},
"original_url": {
"description": "Original URL to product",
"type": "string"
},
"pictures": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"description": {
"description": "Product description",
"type": "string"
},
"sku": {
"type": "array",
"items": {
"type": "object",
"properties": {
"price": {
"type": "integer",
"minimum": 1
},
"old_price": {
"type": "integer",
"minimum": 0
}
}
},
"minItems": 1,
"uniqueItems": true,
"required": [ "price" ]
},
"sizepicture": {
"description": "Фото с размерами",
"type": "array"
},
"warranty": {
"description": "Гарантия",
"type": "string",
"pattern": "[\\d\\.]+"
},
"lifetime": {
"description": "Срок службы",
"type": "string",
"pattern": "\\d+"
},
"traits": {
"description": "Особенности",
"type": "array",
"items": {
"type": "object",
"properties": {
"trait": {
"type": "string"
}
}
}
},
"youtubes": {
"description": "Ссылка на youtube",
"type": "array",
"items": {
"type": "object",
"properties": {
"youtube": {
"type": "string"
}
}
}
},
"is_child": {
"description": "Детское",
"type": "string"
},
"hardness": {
"description": "Жесткость",
"enum": ["Жесткий", "Средний", "Мягкий", "Разная жесткость сторон", ""]
},
"hardness_side_1": {
"description": "Жесткость 1-й стороны",
"enum": ["Жесткий", "Средний", "Мягкий", "Разная жесткость сторон", ""]
},
"hardness_side_2": {
"description": "Жесткость 2-й стороны",
"enum": ["Жесткий", "Средний", "Мягкий", "Разная жесткость сторон", ""]
},
"load": {
"description": "Нагрузка на спальное место",
"type": "string"
},
"weight_diff": {
"description": "Допустимая разница в весе",
"type": "string"
},
"is_roll": {
"description": "В рулоне",
"type": "string"
},
"is_round": {
"description": "Круглый",
"type": "string"
},
"is_sezon": {
"description": "Зима-Лето",
"type": "string"
},
"is_sofa": {
"description": "Для дивана",
"type": "string"
},
"transform": {
"description": "Трансформация",
"type": "string"
},
"layers": {
"description": "Состав слоев",
"type": "array",
"items": {
"type": "object",
"properties": {
"layer": {
"description": "Layer",
"type": "string"
}
},
"required": [ "layer" ]
}
},
"basis": {
"description": "Основа",
"enum": ["Независимый пружинный блок", "Зависимый пружинный блок", "Беспружинный матрас", ""]
}
}
},
"Other": {
"type": "object",
"required": ["categoryId", "brand", "model", "original_url", "pictures"],
"properties": {
"categoryId": {
"description": "ID категории для Other (3|4|6|7|8|9|10|11|12)",
"type": "string",
"pattern": "^3|4|6|7|8|9|10|11|12$"
},
"brand": {
"description": "Бренд",
"type": "string",
"minLength": 1
},
"model": {
"description": "Product name",
"type": "string",
"minLength": 1
},
"original_url": {
"description": "Original URL to product",
"type": "string"
},
"pictures": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"description": {
"description": "Product description",
"type": "string"
},
"sku": {
"type": "array",
"items": {
"type": "object",
"properties": {
"price": {
"type": "integer",
"minimum": 1
},
"old_price": {
"type": "integer",
"minimum": 0
}
}
},
"minItems": 1,
"uniqueItems": true,
"required": [ "price" ]
},
"sizepicture": {
"description": "Фото с размерами",
"type": "array"
},
"warranty": {
"description": "Гарантия",
"type": "string",
"pattern": "[\\d\\.]+"
},
"lifetime": {
"description": "Срок службы",
"type": "string",
"pattern": "\\d+"
},
"traits": {
"description": "Особенности",
"type": "array",
"items": {
"type": "object",
"properties": {
"trait": {
"type": "string"
}
}
}
},
"youtubes": {
"description": "Ссылка на youtube",
"type": "array",
"items": {
"type": "object",
"properties": {
"youtube": {
"type": "string"
}
}
}
},
"is_child": {
"description": "Детское",
"type": "string"
}
}
}
}
}