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