Проект: Поставщики

Проверка данных

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

Переключите редактор сценария диггера в режим Проверка кликнув мышкой на соответствующую закладку:

Для того, что бы диггер начал проверять забираемые с сайта данные, в этом окне редактора необходимо разместить схему проверки.

Схема проверки представляет собой структуру JSON, описывающую требования к полям и данным в них.

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

  1. Официальный сайт JSON Schema - здесь есть все необходимое
  2. JSON Schema Validation - раздел этого сайта, посвещенный схеме проверки данных
  3. Примеры простые
  4. Примеры сложнее
  5. Онлайн валидатор - можно попробовать составить схему и посмотреть как она работает
  6. Статья на хабре - описание и валидация древовидных структур данных

И в качестве бонуса мы приводим пример схемы проверки с одного из рабочих диггеров :)

          {
    "$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"
                }
            }
       }
    }
}