Реалізація імпорту товарів з прайс-агрегаторів

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

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

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація імпорту товарів з прайс-агрегаторів
Середня
~3-5 робочих днів
Часті питання

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

Етапи розробки

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

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

Реалізація імпорту товарів з прайс-агрегаторів

Прайс-агрегатори — Яндекс.Маркет, Price.ru, E-Katalog, OZON, Wildberries та інші — накопичують дані про товари від множини магазинів та виробників. Для інтернет-магазину вони можуть бути джерелом обогащення каталогу: описи, характеристики, зображення та ціноові ориєнтири по ринку. Особливість роботи з агрегаторами — у кожного власний формат виконання та своя модель доступу.

Шар адаптерів агрегаторів

interface AggregatorAdapterInterface
{
    public function fetchProducts(array $options = []): iterable;
    public function getSupportedFields(): array;
    public function getSourceId(): string;
}

Реєстрація в сервіс-контейнер:

$this->app->tag([
    YandexMarketAdapter::class,
    EKatalogAdapter::class,
    OzonSellerAdapter::class,
], 'aggregator.adapters');

E-Katalog: Багаті технічні характеристики

E-Katalog — найбільш багатий дже технічних характеристик. Їх XML містить стандартизовані специфікації з одиницями:

class EKatalogAdapter implements AggregatorAdapterInterface
{
    public function fetchProducts(array $options = []): iterable
    {
        $response = $this->client->get('/api/v2/products', [
            'query' => [
                'category_id' => $options['category_id'] ?? null,
                'lang'        => 'uk',
                'fields'      => 'id,name,description,specs,images,brand,price_min,price_max',
                'page'        => $options['page'] ?? 1,
            ],
            'headers' => ['Authorization' => 'Bearer ' . $this->apiKey],
        ]);

        foreach ($response->json('products') as $product) {
            yield $this->normalize($product);
        }
    }

    private function normalize(array $raw): array
    {
        return [
            'external_id'  => 'ekatalog_' . $raw['id'],
            'name'         => $raw['name'],
            'description'  => $raw['description'],
            'brand'        => $raw['brand']['name'] ?? null,
            'images'       => array_column($raw['images'], 'url'),
            'price_market_min' => $raw['price_min'],
            'price_market_max' => $raw['price_max'],
        ];
    }
}

OZON Seller API

Якщо магазин торгує на OZON, можна тягти звідти контент:

class OzonSellerAdapter implements AggregatorAdapterInterface
{
    public function fetchProducts(array $options = []): iterable
    {
        // OZON API v3: отримання списку товарів продавця
        $response = Http::withToken($this->apiKey)
            ->post('https://api-seller.ozon.ru/v3/product/list', [
                'filter' => ['visibility' => 'ALL'],
                'limit'  => 1000,
            ]);

        // Отримуємо деталі батчами по 100
        foreach (array_chunk(array_column($response->json('result.items'), 'product_id'), 100) as $batch) {
            $details = Http::withToken($this->apiKey)
                ->post('https://api-seller.ozon.ru/v2/product/info/list', [
                    'product_id' => $batch,
                ])->json('result.items');

            foreach ($details as $detail) {
                yield $this->normalizeOzon($detail);
            }
        }
    }
}

Аналітика рыночних цін

Агрегатори дають можливість відстежувати конкурентне ціноутворення:

CREATE TABLE market_price_data (
    product_id      int REFERENCES products(id),
    source          varchar(50),      -- 'ekatalog' | 'yandex_market'
    price_min       numeric(12,2),
    price_max       numeric(12,2),
    price_avg       numeric(12,2),
    offers_count    int,
    collected_at    timestamptz DEFAULT now()
);

На основі цих даних можна автоматично встановлювати ціну як «рыночний мінімум - 5%» або «вище середнього на 2%» — динамічне ціноутворення на основі реальних даних.

Обогащення існуючих товарів

Основний кейс: у каталозі є товар з артикулом, але без характеристик та опису. Агрегатор знає цей товар за GTIN або назвою бренду+моделі:

class ProductEnrichmentService
{
    public function enrich(Product $product): bool
    {
        // Пошук за GTIN у агрегаторів
        foreach ($this->adapters as $adapter) {
            $data = $adapter->findByGtin($product->gtin);
            if (!$data) $data = $adapter->findByBrandModel($product->brand, $product->model);
            if (!$data) continue;

            $this->applyEnrichment($product, $data, $adapter->getSourceId());
            return true;
        }
        return false;
    }

    private function applyEnrichment(Product $product, array $data, string $source): void
    {
        // Обогащуємо тільки пусті поля — не перезаписуємо існуючі
        if (!$product->description && !empty($data['description'])) {
            $product->description = $data['description'];
        }
        $product->save();
    }
}

Тривалість реалізації

  • Один адаптер (YML від Яндекс.Маркету), обогащення пустих полів — 2 дні
  • Мультиагрегаторна структура + пріоритети + рыночні ціни — +2 дні
  • OZON/WB API, динамічне ціноутворення на основі ринку — +2–3 дні