98 lines
2.9 KiB
Python
98 lines
2.9 KiB
Python
import requests
|
||
import time
|
||
import os
|
||
import csv
|
||
import pandas as pd
|
||
|
||
from ozon_data import headers
|
||
|
||
# URL для первого и второго запроса
|
||
url_list = "https://api-seller.ozon.ru/v2/supply-order/list"
|
||
url_get = "https://api-seller.ozon.ru/v2/supply-order/get"
|
||
url_bundle = "https://api-seller.ozon.ru/v1/supply-order/bundle"
|
||
|
||
|
||
order_state = [
|
||
|
||
"ORDER_STATE_DATA_FILLING",
|
||
]
|
||
|
||
try:
|
||
response_list = requests.post(
|
||
url_list,
|
||
headers=headers,
|
||
json={
|
||
"filter": {"states": order_state},
|
||
"paging": {"from_supply_order_id": 0, "limit": 100},
|
||
},
|
||
)
|
||
response_list.raise_for_status()
|
||
data_list = response_list.json()
|
||
|
||
# print("Результат первого запроса:")
|
||
# print(data_list)
|
||
|
||
order_ids = data_list.get("supply_order_id", [])
|
||
|
||
if not order_ids:
|
||
print(data_list)
|
||
raise ValueError(
|
||
"Не удалось получить supply_order_id из ответа первого запроса"
|
||
)
|
||
|
||
# Второй запрос
|
||
response_get = requests.post(
|
||
url_get, headers=headers, json={"order_ids": order_ids}
|
||
)
|
||
response_get.raise_for_status() # Проверка на ошибки
|
||
data_get = response_get.json()
|
||
|
||
# print("Результат второго запроса:")
|
||
print(data_get)
|
||
|
||
orders = data_get.get("orders", [])
|
||
result = []
|
||
for order in orders:
|
||
all_bundle_ids = [supply.get("bundle_id") for supply in order.get("supplies", [])]
|
||
|
||
b_response = requests.post(
|
||
url=url_bundle,
|
||
json={"bundle_ids": all_bundle_ids, "limit": 100},
|
||
headers=headers,
|
||
)
|
||
b_response.raise_for_status()
|
||
b_result = b_response.json()
|
||
|
||
for b in b_result.get('items'):
|
||
result.append({
|
||
"supply_order_number": order.get("supply_order_number"),
|
||
"creation_date": order.get("creation_date"),
|
||
**b,
|
||
})
|
||
time.sleep(0.3)
|
||
df = pd.DataFrame(result)
|
||
# print("Результат:", result)
|
||
output_dir = "result"
|
||
if not os.path.exists(output_dir):
|
||
os.makedirs(output_dir)
|
||
|
||
# Получаем имя текущего скрипта без расширения
|
||
script_name = os.path.splitext(os.path.basename(__file__))[0]
|
||
filename = '_'.join([script_name, *order_state])
|
||
csv_filename = os.path.join(
|
||
output_dir, f"{filename}_output.csv"
|
||
)
|
||
xls_filename = os.path.join(
|
||
output_dir, f"{filename}_output.xlsx"
|
||
)
|
||
|
||
df.to_csv(csv_filename, encoding="utf-8")
|
||
df.to_excel(xls_filename)
|
||
|
||
print(f"Данные успешно сохранены в {csv_filename}")
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"Ошибка при выполнении запроса: {e}")
|
||
except ValueError as e:
|
||
print(f"Ошибка обработки данных: {e}")
|