220 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package ozon
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"net/http"
 | 
						|
	"time"
 | 
						|
 | 
						|
	core "github.com/diphantxm/ozon-api-client"
 | 
						|
)
 | 
						|
 | 
						|
type Analytics struct {
 | 
						|
	client *core.Client
 | 
						|
}
 | 
						|
 | 
						|
type GetAnalyticsDataParams struct {
 | 
						|
	// Date from which the data will be in the report
 | 
						|
	DateFrom time.Time `json:"date_from"`
 | 
						|
 | 
						|
	// Date up to which the data will be in the report
 | 
						|
	DateTo time.Time `json:"date_to"`
 | 
						|
 | 
						|
	// Items Enum: "unknownDimension" "sku" "spu" "day" "week" "month" "year" "category1" "category2" "category3" "category4" "brand" "modelID"
 | 
						|
	// Data grouping available to all sellers:
 | 
						|
	//   - unknownDimension—unknown,
 | 
						|
	//   - sku—product identifier,
 | 
						|
	//   - spu—product identifier,
 | 
						|
	//   - day—day,
 | 
						|
	//   - week—week,
 | 
						|
	//   - month—month.
 | 
						|
	// Data grouping available to sellers with Premium subscription:
 | 
						|
	//   - year—year,
 | 
						|
	//   - category1—first level category,
 | 
						|
	//   - category2—second level category,
 | 
						|
	//   - category3—third level category,
 | 
						|
	//   - category4—fourth level category,
 | 
						|
	//   - brand—brand,
 | 
						|
	//   - modelID—model.
 | 
						|
	Dimension []GetAnalyticsDataDimension `json:"dimension"`
 | 
						|
 | 
						|
	// Filters
 | 
						|
	Filters []GetAnalyticsDataFilter `json:"filters"`
 | 
						|
 | 
						|
	// Number of items in the respones:
 | 
						|
	//   - maximum is 1000,
 | 
						|
	//   - minimum is 1.
 | 
						|
	Limit int64 `json:"limit"`
 | 
						|
 | 
						|
	// Specify up to 14 metrics. If there are more, you will get an error with the InvalidArgument code
 | 
						|
	// The list of metrics for which the report will be generated.
 | 
						|
	//
 | 
						|
	// Metrics available to all sellers:
 | 
						|
	//
 | 
						|
	// 	 - revenue—ordered amount,
 | 
						|
	//   - ordered_units—ordered products.
 | 
						|
	// Metrics available to sellers with Premium subscription:
 | 
						|
	//   - unknown_metric—unknown metric,
 | 
						|
	//   - hits_view_search—impressions in search and category,
 | 
						|
	//   - hits_view_pdp—impressions on the product description page,
 | 
						|
	//   - hits_view—total impressions,
 | 
						|
	//   - hits_tocart_search—added to cart from search or category,
 | 
						|
	//   - hits_tocart_pdp—added to cart from the product description page,
 | 
						|
	//   - hits_tocart—added to cart total,
 | 
						|
	//   - session_view_search—sessions with impressions in search or category,
 | 
						|
	//   - session_view_pdp—sessions with impressions on the product description page,
 | 
						|
	//   - session_view—sessions total,
 | 
						|
	//   - conv_tocart_search—conversion to cart from search or category,
 | 
						|
	//   - conv_tocart_pdp—conversion to cart from a product description page,
 | 
						|
	//   - conv_tocart—total conversion to cart,
 | 
						|
	//   - returns—returned products,
 | 
						|
	//   - cancellations—canceled products,
 | 
						|
	//   - delivered_units—delivered products,
 | 
						|
	//   - position_category—position in search and category.
 | 
						|
	Metrics []GetAnalyticsDataFilterMetric `json:"metrics"`
 | 
						|
 | 
						|
	// Number of elements that will be skipped in the response. For example, if `offset=10`, the response will start with the 11th element found
 | 
						|
	Offset int64 `json:"offset"`
 | 
						|
 | 
						|
	// Report sorting settings
 | 
						|
	Sort []GetAnalyticsDataSort `json:"sort"`
 | 
						|
}
 | 
						|
 | 
						|
type GetAnalyticsDataFilter struct {
 | 
						|
	// Sorting parameter. You can pass any attribute from the `dimension` and `metric` parameters except the `brand` attribute
 | 
						|
	Key string `json:"key"`
 | 
						|
 | 
						|
	// Comparison operation
 | 
						|
	Operation GetAnalyticsDataFilterOperation `json:"operation"`
 | 
						|
 | 
						|
	// Value for comparison
 | 
						|
	Value string `json:"value"`
 | 
						|
}
 | 
						|
 | 
						|
// Report sorting settings
 | 
						|
type GetAnalyticsDataSort struct {
 | 
						|
	// Metric by which the method result will be sorted
 | 
						|
	Key GetAnalyticsDataFilterMetric `json:"key"`
 | 
						|
 | 
						|
	// Sorting type
 | 
						|
	Order Order `json:"order"`
 | 
						|
}
 | 
						|
 | 
						|
type GetAnalyticsDataResponse struct {
 | 
						|
	core.CommonResponse
 | 
						|
 | 
						|
	// Method result
 | 
						|
	Result GetAnalyticsDataResult `json:"result"`
 | 
						|
 | 
						|
	// Report creation time
 | 
						|
	Timestamp string `json:"timestamp"`
 | 
						|
}
 | 
						|
 | 
						|
type GetAnalyticsDataResult struct {
 | 
						|
	// Data array
 | 
						|
	Data []GetAnalyticsDataResultData `json:"data"`
 | 
						|
 | 
						|
	// Total and average metrics values
 | 
						|
	Totals []float64 `json:"totals"`
 | 
						|
}
 | 
						|
 | 
						|
type GetAnalyticsDataResultData struct {
 | 
						|
	// Data grouping in the report
 | 
						|
	Dimensions []GetAnalyticsDataResultDimension `json:"dimensions"`
 | 
						|
 | 
						|
	// Metric values list
 | 
						|
	Metrics []float64 `json:"metrics"`
 | 
						|
}
 | 
						|
 | 
						|
type GetAnalyticsDataResultDimension struct {
 | 
						|
	// Identifier
 | 
						|
	Id string `json:"id"`
 | 
						|
 | 
						|
	// Name
 | 
						|
	Name string `json:"name"`
 | 
						|
}
 | 
						|
 | 
						|
// Specify the period and metrics that are required. The response will contain analytical data grouped by the `dimensions` parameter.
 | 
						|
//
 | 
						|
// There are restrictions for sellers without Premium subscription:
 | 
						|
//
 | 
						|
//   - data is available for the last 3 months,
 | 
						|
//   - some of the data grouping methods and metrics aren't available.
 | 
						|
//
 | 
						|
// There are no restrictions for sellers with Premium subscription
 | 
						|
func (c Analytics) GetAnalyticsData(ctx context.Context, params *GetAnalyticsDataParams) (*GetAnalyticsDataResponse, error) {
 | 
						|
	url := "/v1/analytics/data"
 | 
						|
 | 
						|
	resp := &GetAnalyticsDataResponse{}
 | 
						|
 | 
						|
	response, err := c.client.Request(ctx, http.MethodPost, url, params, resp, nil)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
						|
 | 
						|
	return resp, nil
 | 
						|
}
 | 
						|
 | 
						|
type GetStocksOnWarehousesParams struct {
 | 
						|
	// Number of values per page.
 | 
						|
	//
 | 
						|
	// Default is 100
 | 
						|
	Limit int64 `json:"limit" default:"100"`
 | 
						|
 | 
						|
	// Number of elements that will be skipped in the response. For example, if `offset=10`, the response will start with the 11th element found
 | 
						|
	Offset int64 `json:"offset"`
 | 
						|
 | 
						|
	// Warehouse type filter:
 | 
						|
	WarehouseType WarehouseType `json:"warehouse_type"`
 | 
						|
}
 | 
						|
 | 
						|
type GetStocksOnWarehousesResponse struct {
 | 
						|
	core.CommonResponse
 | 
						|
 | 
						|
	// Method result
 | 
						|
	Result GetStocksOnWarehousesResult `json:"result"`
 | 
						|
}
 | 
						|
 | 
						|
type GetStocksOnWarehousesResult struct {
 | 
						|
	// Information about products and stocks
 | 
						|
	Rows []GetStocksOnWarehousesResultRow `json:"rows"`
 | 
						|
}
 | 
						|
 | 
						|
type GetStocksOnWarehousesResultRow struct {
 | 
						|
	// Product identifier in the Ozon system, SKU
 | 
						|
	SKU int64 `json:"sku"`
 | 
						|
 | 
						|
	// Product identifier in the seller's system
 | 
						|
	ItemCode string `json:"item_code"`
 | 
						|
 | 
						|
	// Product name in the Ozon system
 | 
						|
	ItemName string `json:"item_name"`
 | 
						|
 | 
						|
	// Product amount available for sale on Ozon
 | 
						|
	FreeToSellAmount int64 `json:"free_to_sell_amount"`
 | 
						|
 | 
						|
	// Product amount specified for confirmed future supplies
 | 
						|
	PromisedAmount int64 `json:"promised_amount"`
 | 
						|
 | 
						|
	// Product amount reserved for purchase, returns, and transportation between warehouses
 | 
						|
	ReservedAmount int64 `json:"reserved_amount"`
 | 
						|
 | 
						|
	// Name of the warehouse where the products are stored
 | 
						|
	WarehouseName string `json:"warehouse_name"`
 | 
						|
}
 | 
						|
 | 
						|
// Report on stocks and products movement at Ozon warehouses
 | 
						|
func (c Analytics) GetStocksOnWarehouses(ctx context.Context, params *GetStocksOnWarehousesParams) (*GetStocksOnWarehousesResponse, error) {
 | 
						|
	url := "/v2/analytics/stock_on_warehouses"
 | 
						|
 | 
						|
	resp := &GetStocksOnWarehousesResponse{}
 | 
						|
 | 
						|
	response, err := c.client.Request(ctx, http.MethodPost, url, params, resp, nil)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
						|
 | 
						|
	return resp, nil
 | 
						|
}
 |