97 lines
3.3 KiB
Python
97 lines
3.3 KiB
Python
import os
|
|
import requests
|
|
import pandas as pd
|
|
from datetime import datetime
|
|
from dateutil.relativedelta import relativedelta
|
|
from ozon_data import headers
|
|
|
|
# URL API
|
|
url = "https://api-seller.ozon.ru/v2/posting/fbo/list"
|
|
|
|
# Параметры для месяца
|
|
year = 2025
|
|
# Укажите нужный месяц (1-12)
|
|
month = 1
|
|
|
|
# Определение первого и последнего дня месяца
|
|
first_day = datetime(year, month, 1) # Первый день месяца
|
|
last_day = first_day + relativedelta(
|
|
months=1, days=-1
|
|
) # Последний день текущего месяца
|
|
|
|
# Формируем строки дат в ISO формате
|
|
since = first_day.isoformat() + "Z" # Формат: 2025-01-01T00:00:00Z
|
|
to = last_day.isoformat() + "Z" # Формат: 2025-01-31T23:59:59.999Z
|
|
# Тело запроса
|
|
payload = {
|
|
"dir": "ASC",
|
|
"filter": {
|
|
"since": since,
|
|
# "status": "delivered",
|
|
"to": to,
|
|
}, # Укажите статус, если нужно
|
|
"limit": 1000,
|
|
"offset": 0,
|
|
"with": {"analytics_data": True, "financial_data": True},
|
|
}
|
|
print(payload)
|
|
try:
|
|
# Выполнение запроса
|
|
response = requests.post(url, headers=headers, json=payload)
|
|
response.raise_for_status()
|
|
data_raw = response.json()
|
|
# Составляем таблицу
|
|
data = []
|
|
for order in data_raw["result"]:
|
|
for product in order["products"]:
|
|
product_id = product["sku"]
|
|
financial = [
|
|
i
|
|
for i in order["financial_data"]["products"]
|
|
if i["product_id"] == product_id
|
|
]
|
|
financial = financial[0]
|
|
row = {
|
|
"order_id": order["order_id"],
|
|
"order_number": order["order_number"],
|
|
"status": order["status"],
|
|
"created_at": order["created_at"],
|
|
"product_sku": product["sku"],
|
|
"product_name": product["name"],
|
|
"offer_id": product["offer_id"],
|
|
"quantity": product["quantity"],
|
|
"price": financial["price"],
|
|
"commission_amount": financial["commission_amount"],
|
|
"payout": financial["payout"],
|
|
"warehouse": order["analytics_data"]["warehouse_name"],
|
|
}
|
|
data.append(row)
|
|
|
|
# Преобразуем в DataFrame
|
|
df = pd.DataFrame(data)
|
|
|
|
output_dir = "result"
|
|
if not os.path.exists(output_dir):
|
|
os.makedirs(output_dir)
|
|
|
|
# Получаем имя текущего скрипта без расширения
|
|
script_name = os.path.splitext(os.path.basename(__file__))[0]
|
|
|
|
# Указываем полный путь для файла
|
|
csv_filename = os.path.join(
|
|
output_dir, f"{'_'.join([script_name, str(month), str(year)])}_output.csv"
|
|
)
|
|
xls_filename = os.path.join(
|
|
output_dir, f"{'_'.join([script_name, str(month), str(year)])}_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 Exception as e:
|
|
print(f"Произошла ошибка: {e}")
|