63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
import requests
|
|
|
|
|
|
def load_all_products(client_id: str, api_key: str):
|
|
headers = {
|
|
"Client-Id": client_id,
|
|
"Api-Key": api_key
|
|
}
|
|
|
|
list_url = "https://api-seller.ozon.ru/v3/product/list"
|
|
details_url = "https://api-seller.ozon.ru/v4/product/info/attributes"
|
|
result, last_id = [], ""
|
|
|
|
while True:
|
|
response = requests.post(list_url, headers=headers, json={
|
|
"filter": {"visibility": "ALL"},
|
|
"last_id": last_id,
|
|
"limit": 100
|
|
})
|
|
|
|
response.raise_for_status()
|
|
data = response.json()
|
|
|
|
product_ids = [item["product_id"] for item in data["result"]["items"]]
|
|
if not product_ids:
|
|
break
|
|
|
|
details_response = requests.post(details_url, headers=headers, json={
|
|
"filter": {"product_id": product_ids, "visibility": "ALL"},
|
|
"limit": 100,
|
|
"sort_dir": "ASC"
|
|
})
|
|
|
|
details_response.raise_for_status()
|
|
details_data = details_response.json()
|
|
|
|
for product in details_data["result"]:
|
|
attributes_by_id = {
|
|
attribute["id"]: attribute
|
|
for attribute in product["attributes"]
|
|
}
|
|
|
|
brands = attributes_by_id.get(5076)
|
|
colors = attributes_by_id.get(10096)
|
|
compositions = attributes_by_id.get(6733)
|
|
|
|
result.append({
|
|
"name": product.get("name"),
|
|
"article": str(product["sku"]),
|
|
"barcodes": product["barcodes"],
|
|
"brand": ", ".join(brand["value"] for brand in brands['values']) if brands else None,
|
|
"color": ", ".join(color["value"] for color in colors['values']) if colors else None,
|
|
"composition": ", ".join(color["value"] for color in compositions['values']) if compositions else None,
|
|
"imageUrl": product.get("primary_image")
|
|
})
|
|
|
|
if not data["result"].get("last_id"):
|
|
break
|
|
|
|
last_id = data["result"]["last_id"]
|
|
|
|
return result
|