ozon_api_helpers/total_month.py

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}")