Интеграция с Ozon, Wildberries - извлечение статистики

Введение

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

Общая схема работы сбора данных с маркетплейсов

Таблицы базы данных:       

  • outer_rawData -  просто JSON данные по отчетам, полученным от внешнего источника (просто забрали данные и положили в эту промежуточную таблицу).
  • ozon_...    таблицы с данными по отчетам Ozon, для каждого отчета - одна таблица.
  • wb_...    таблицы с данными по отчетам WB. На каждый отчет WB - своя таблица с таким префиксом. 

API исходящие методы                                 

  • ozon_...    запросы отчетов Озон и сохранение в промежуточной таблице outer_rawData,
  • wb_....    запросы отчетов WB и сохранение в промежуточной таблице outer_rawData.

Ежедневно в /syssp                                

  • в 2 ночи - Вызов методов АПИ wb и ozon для получения последних отчетов - вызов процедуры mrkt_sendRequests
  • в 3 ночи - Обновление данных по таблицам(из JSON в норм данные) - вызов процедуры mrkt_updateTables (преобразует новые данные из таблицы  outer_rawData в бизнес таблицы).

Получение данных с WB 

Документация WB API - https://openapi.wildberries.ru/analytics/api/ru/

Для работы с АПИ нужно получить Ключ авторизации.

Пример получения отчета с Sales: 

Исходящий метод wb_sales (тип GET).

Процедура Request (отчет получаем данные за 3 дня): 

CREATE PROCEDURE [dbo].[api_wb_sales_request]
	@parameters ExtendedDictionaryParameter READONLY, 
	@username nvarchar(32)  
AS
BEGIN
	-- SELECT 1 
	select '' Msg, 1 Result, 'https://statistics-api.wildberries.ru/api/v1/supplier/sales?dateFrom='+ convert(nvarchar(10), dateadd(day, -3, getdate()), 120)  Url  -- 2024-04-01

	-- SELECT 2 PARAMETERS
	select 'Authorization' name, dbo.as_setting('wb.apiKey', '') value, 'header' [type]      
END

Процедура Response: 

CREATE PROCEDURE [dbo].[api_wb_sales_response]
	@response nvarchar(max),
	@parameters ExtendedDictionaryParameter READONLY,	
	@username nvarchar(32)
AS
BEGIN
	-- SELECT 1
	select '' Msg, 1 Result, @response Response
	
    if(isjson(@response)=1)begin 
    	insert into outer_rawdata (code, created, sourceCode, itemID, value)
        select 'sales', getdate(), 'wb', itemID, value
        from(
    		 SELECT value, JSON_VALUE(value,'$.date') date, JSON_VALUE(value,'$.srid') itemID  
 			FROM OPENJSON(@response)
        ) t1 
        where itemID not in (select itemID from outer_rawdata)
    end 
END

Здесь мы извлекаем данные из внешнего источника и сохраняем новые данные в таблице outer_rawdata (уникальным полем здесь является srid).

Получение данных с Ozon 

Документация по API OZON - https://docs.ozon.ru/api/seller/

На входе для интеграции нам нужны Client-Id и ApiKey. 

Реализуем исходящий метод API ozon_transactions. 

Процедура Request: 

CREATE PROCEDURE [dbo].[api_ozon_transactions_request]
	@parameters ExtendedDictionaryParameter READONLY, 
	@username nvarchar(32)  -- текущий пользователь.
AS
BEGIN
	-- SELECT 1  
	select '' Msg, 1 Result, 'https://api-seller.ozon.ru/v3/finance/transaction/list' Url 

	-- SELECT 2 PARAMETERS 
    select 'Client-Id' name, dbo.as_setting('ozon.clientID', '') value, 'header' [type] 
    union
    select 'Api-Key' name, dbo.as_setting('ozon.apiKey', '') value, 'header' [type] 
    union
    select '' name, '{
    "filter": {
        "date": {
            "from": "'+convert(nvarchar(10),dateadd(day,- 3, getdate()), 120)+'T00:00:00.000Z",
            "to": "'+convert(nvarchar(10), getdate(), 120)+'T00:00:00.000Z"
        },
        "operation_type": [],
        "posting_number": "",
        "transaction_type": "all"
    },
    "page": 1,
    "page_size": 1000
}' value, 'json' [type] 
END

Процедура Response: 

CREATE PROCEDURE [dbo].[api_ozon_transactions_response]
	@response nvarchar(max),
	@parameters ExtendedDictionaryParameter READONLY, 
	@username nvarchar(32)
AS
BEGIN
	-- SELECT 1
	select '' Msg, 1 Result, @response Response	 
	if(isjson(@response)=1)begin 
    	declare @resultOperations nvarchar(max) = JSON_QUERY(@response, '$.result.operations')
		
        insert into outer_rawdata (code, created, sourceCode, itemID, value)
        select 'transactions', getdate(), 'ozon', itemID, value
        from(
    		 SELECT value, JSON_VALUE(value,'$.operation_date') date, JSON_VALUE(value,'$.operation_id') itemID  
 			FROM OPENJSON(@resultOperations)
        ) t1 
        where itemID not in (select itemID from outer_rawdata)        
    end 
END

Получаем данные и сохраняем данные в промежуточной таблице outer_rawdata.  Здесь идентификатором выступает operation_id. Сохраняем только данные с новыми operation_id. 

Процедура адаптации данных из JSON в таблицы статистики

Далее наша задача - перевести данные JSON в удобный для обрабтки формат - формат таблиц с отдельными полям. 

Пример для WB (для первых 3 полей). 

CREATE   PROCEDURE [dbo].[mrkt_updateTables]
AS
BEGIN
	-- WB Sales
	insert into wb_sales (date, lastChangeDate, srid)	
	select 
    	try_convert(datetime, JSON_VALUE(r1.value, '$.date'))  date, 
	  	try_convert(datetime, JSON_VALUE(r1.value, '$.lastChangeDate')) lastChangeDate, 	
		JSON_VALUE(r1.value, '$.srid') srid
    from outer_rawdata r1 where sourceCode ='wb' and code = 'sales'
    and itemID not in (select srid from wb_sales)   
  
END

Ежедневная обработка данных

В /syssp прописываем вызов процедур в 2 и 3 ночи. 

CREATE PROCEDURE [dbo].[falcon_nt_sync_hour]
AS
BEGIN	
    if(DATEPART(HOUR, GETDATE())=2) begin        
        exec dbo.mrkt_sendRequests
	end
    if(DATEPART(HOUR, GETDATE())=3) begin        
        exec dbo.mrkt_updateTables
	end
END

Процедура mrkt_sendRequest выглядит следующим образом (вызывает 2 метода АПИ): 

CREATE PROCEDURE [dbo].[mrkt_sendRequests]
AS
BEGIN
	 select 'apirequest' type, 'wb_sales' code
     union 
	 select 'apirequest' type, 'ozon_transactions' code
END

Заключение

Таким образом мы ежедневно получаем данные из Wildberries и Ozon по 2 отчетам.

Аналогично можно получать и другую информацию с внешних источников. 

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

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK