81 lines
2.4 KiB
Python
81 lines
2.4 KiB
Python
import requests
|
|
import time
|
|
import os
|
|
import ast
|
|
import pandas as pd
|
|
|
|
from ozon_data import headers
|
|
|
|
# URL для первого и второго запроса
|
|
url_list = "https://api-seller.ozon.ru/v4/product/info/stocks"
|
|
url_detail = "https://api-seller.ozon.ru/v4/product/info/attributes"
|
|
product_type = "INVISIBLE"
|
|
try:
|
|
response_list = requests.post(
|
|
url_list,
|
|
headers=headers,
|
|
json={
|
|
"filter": {
|
|
"visibility": product_type,
|
|
},
|
|
"limit": 100,
|
|
},
|
|
)
|
|
response_list.raise_for_status()
|
|
data_list = response_list.json()
|
|
df_list = pd.DataFrame(data_list["items"])
|
|
|
|
df_list['stocks'] = df_list['stocks'].apply(
|
|
lambda x: ast.literal_eval(x.replace("'", '"')) if isinstance(x, str) else x
|
|
)
|
|
stocks_df = pd.json_normalize(df_list['stocks'].str[0])
|
|
|
|
df_list = pd.concat([df_list, stocks_df], axis=1)
|
|
|
|
response_detail = requests.post(
|
|
url_detail,
|
|
headers=headers,
|
|
json={
|
|
"filter": {
|
|
"product_id": df_list["product_id"].to_list(),
|
|
},
|
|
"limit": 1000
|
|
},
|
|
)
|
|
response_detail.raise_for_status()
|
|
data_detail = response_detail.json()
|
|
|
|
df_detail = pd.DataFrame(data_detail["result"])
|
|
|
|
# Объединяем по id и product_id
|
|
df = pd.merge(
|
|
df_detail,
|
|
df_list,
|
|
left_on="id",
|
|
right_on="product_id",
|
|
how="inner" # или 'left', 'right', 'outer' в зависимости от задачи
|
|
)
|
|
|
|
|
|
# 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, product_type])
|
|
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}")
|
|
print(e)
|
|
except ValueError as e:
|
|
print(f"Ошибка обработки данных: {e}")
|