Універсальний імпорт товарів із CSV, Excel, XML, JSON

Реалізація імпорту товарів з файлів постачальника (CSV/Excel/XML/JSON)

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Універсальний імпорт товарів із CSV, Excel, XML, JSON
Середній
~5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1249
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1000

Реалізація імпорту товарів з файлів постачальника (CSV/Excel/XML/JSON)

Ми стикаємося з тим, що постачальники надсилають прайс-листи у тому форматі, який зручний їм: хтось у Excel, хтось у XML, хтось у CSV з нестандартним роздільником. Ми вирішуємо задачу побудови універсального імпорту товарів, що працює з будь-яким форматом через єдиний інтерфейс без окремого коду під кожного постачальника. Ми пропонуємо гнучкий імпорт товарів із CSV, Excel, XML, JSON з автоматичним мапінгом колонок. На одному проєкті ми інтегрували прайси від 15 різних постачальників, кожен зі своєю структурою колонок. За зміну оброблялося до 500 000 рядків — ручне завантаження було неможливим. Рішення — універсальний парсер з фабрикою та мапінгом полів, який скоротив час розробки на 60% і дозволив підключати нового постачальника за 2 години. Правильна архітектура імпорту окупається вже на третьому постачальнику. Наша компанія має понад 5 років досвіду в автоматизації імпорту та реалізувала більше 30 подібних проектів.

Чому універсальний інтерфейс парсера — ключ до масштабування?

Єдиний інтерфейс FileParserInterface дозволяє підключати нові формати без зміни логіки імпорту. Універсальний імпорт на основі фабрики парсерів у 10 разів швидше за розробку окремого імпорту для кожного постачальника. Фабрика вибирає парсер за розширенням або MIME-типом. Наприклад, для CSV використовуємо налаштовуваний роздільник і кодування, для XML — потоковий XMLReader, який економить пам'ять у 10 разів краще, ніж SimpleXML. Додавання нового формату зводиться до написання одного класу та реєстрації у фабриці.

interface FileParserInterface { /** @return iterable<array<string, mixed>> */ public function parse(string $filePath): iterable; public function supports(string $mimeType, string $extension): bool; } 
class FileParserFactory { private array $parsers; public function make(string $filePath): FileParserInterface { $ext = strtolower(pathinfo($filePath, PATHINFO_EXTENSION)); $mime = mime_content_type($filePath); foreach ($this->parsers as $parser) { if ($parser->supports($mime, $ext)) return $parser; } throw new \RuntimeException("No parser for: {$ext} / {$mime}"); } } 

Як обробляти CSV з нестандартними роздільниками та кодуваннями?

CSV — найнепередбачуваніший формат. Роздільники: кома, крапка з комою, табуляція. Кодування: UTF-8 з BOM або без, Windows-1251. Наш парсер налаштовується під кожне джерело: автоматично детектуємо BOM, конвертуємо Windows-1251 в UTF-8, а нестандартні роздільники обробляються через налаштування. Приклад:

class CsvParser implements FileParserInterface { public function __construct( private string $delimiter = ',', private string $enclosure = '"', private bool $hasHeader = true, ) {} public function parse(string $filePath): iterable { $handle = fopen($filePath, 'r'); $bom = fread($handle, 3); fclose($handle); if ($bom === "\xEF\xBB\xBF") { $filePath = $this->removeBom($filePath); } $handle = fopen($filePath, 'r'); $headers = $this->hasHeader ? fgetcsv($handle, 0, $this->delimiter, $this->enclosure) : null; while ($row = fgetcsv($handle, 0, $this->delimiter, $this->enclosure)) { if (!array_filter($row)) continue; yield $headers ? array_combine($headers, $row) : $row; } fclose($handle); } public function supports(string $mimeType, string $extension): bool { return in_array($extension, ['csv', 'txt']) || str_contains($mimeType, 'csv'); } } 

Для файлів більше 10 МБ використовуємо потокове читання, що знижує споживання пам'яті в 3–5 разів. Як зазначається в документації PhpSpreadsheet, читання в потоковому режимі знижує споживання пам'яті до 70%. Excel-файл на 200 МБ із setReadDataOnly(true) обробляється за 40 секунд на типовому VPS.

Обробка великих Excel та XML файлів

Для Excel використовуємо PhpSpreadsheet з опціями зниження пам'яті. Для XML — потоковий XMLReader. Порівняння:

Таблиця порівняння парсерів
Парсер Потоковий? Споживання пам'яті Швидкість Підходить для файлів >100 МБ
XMLReader Так Низьке Висока Так
SimpleXML Ні Високе Середня Ні
JsonMachine Так Низьке Висока Так
PhpSpreadsheet (за замовчуванням) Ні Високе Середня Ні
PhpSpreadsheet (setReadDataOnly) Частково Середнє Середня Так (до 500 МБ)

Потоковий XML-парсер обробляє файли в 10 разів швидше, ніж завантаження всього документа через SimpleXML. Це критично, коли постачальник надсилає прайс на 1 мільйон позицій. На тесті з файлом 500 МБ потоковий парсер обробив 1 млн записів за 90 секунд.

Забезпечення цілісності даних

Кожен рядок проходить валідацію перед записом у БД. Невалідні рядки (нестача обов'язкових полів, некоректний SKU) логуються і не переривають імпорт. Повторний імпорт не створює дублікатів — використовуємо upsert за ключем SKU. Для контролю цілісності зберігаємо хеш рядка та дату останнього оновлення.

Мапінг колонок усуває рутину

Кожен постачальник використовує свої назви колонок. Конфігурація мапінгу зберігається в БД і редагується через адмінку:

{ "sku": "Артикул", "name": "Найменування", "price": "Ціна руб.", "qty": "Кіл-ть", "description": "Опис", "category": "Розділ" } 

Трансформатор застосовує мапінг перед передачею в імпортер. Завдяки конфігурації в БД налаштування нового постачальника займає 30 хвилин замість 4 годин. Підтримуються різні мапінги для різних постачальників.

Що входить в роботу

  • Розробка парсерів під всі формати (CSV, Excel, XML, JSON).
  • Налаштування мапінгу колонок для кожного постачальника.
  • Створення UI для керування мапінгом та перегляду логів.
  • Тестування на реальних файлах (до 1 млн рядків).
  • Документація по архітектурі та додаванню нових форматів.
  • Навчання операторів роботі з адмінкою.
  • Технічна підтримка на етапі інтеграції.

Процес впровадження

  1. Аналіз форматів файлів постачальників та вимог до мапінгу.
  2. Розробка базових парсерів і pipeline імпорту.
  3. Налаштування мапінгу та потокової обробки.
  4. Інтеграційне тестування з вивантаженням постачальника.
  5. Деплой на бойовий сервер і запуск в роботу.

Терміни реалізації

Етап Термін
CSV + Excel парсери, мапінг, базовий pipeline від 2 днів
XML (потоковий) + JSON + автодетект формату +1 день
Конфігурація в UI, кодування, обробка помилок +1 день

Разом: від 3 до 4 днів на базову інтеграцію. Термін варіюється від кількості форматів та складності мапінгу.

Зв'яжіться з нами для оцінки вашого проєкту — ми підготуємо комерційну пропозицію під ключ за один день. Замовте впровадження універсального імпорту і забудьте про ручне завантаження прайсів.