-
-
Save ShilGen/1e8bbe9974411eb6b39cf7eae06c31cc to your computer and use it in GitHub Desktop.
Получение статистики рек.кампаний через Wildberries API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Developed by MikyPo | |
# More code for DA here: https://dzen.ru/mikypo | |
# Библиотеки | |
import requests | |
import json | |
import time | |
import pandas as pd | |
import datetime | |
import locale | |
# Читаем token | |
with open('src/adv_token_wb.txt', 'r') as f: | |
wb_token = f.read() | |
# Переключаем локаль на русскую. Так на всякий случай | |
locale.setlocale(locale.LC_ALL, 'ru_RU.utf8') | |
# Функция получения данных через API | |
def adv_wb_info(list_campaign, d_start, d_end): | |
request_data = pd.DataFrame() | |
for index, row in list_campaign.iterrows(): | |
id_campaign = row['advertId'] | |
current_date = datetime.datetime.strptime(d_start, '%Y-%m-%d') | |
while True: | |
apiUrl = 'https://advert-api.wb.ru/adv/v2/fullstats' | |
param = { | |
"id": int(id_campaign), | |
"interval": { | |
"begin": current_date.strftime('%Y-%m-%d'), | |
"end": d_end | |
} | |
} | |
adverts_data = [param] | |
headers = { | |
'Authorization': wb_token, | |
'Content type': 'application/json', | |
} | |
adv_request = requests.post( | |
apiUrl, headers=headers, data=json.dumps(adverts_data)) | |
print("--ID кампании:", id_campaign) | |
print("Код ответа сервера:", adv_request.status_code) | |
# return adv_request.json() # Смотрим что в JSON-e | |
if adv_request.status_code == 200: | |
data = adv_request.json() | |
if data and data[0].get('days'): | |
df_buf = pd.DataFrame(data[0]['days']) | |
df_buf['id_campaign'] = id_campaign | |
request_data = pd.concat([request_data, df_buf]) | |
print(f"{index} Кампания ID={id_campaign} записана в таблицу") | |
break | |
else: | |
print("Ошибка! Отсутствуют данные days в JSON") | |
break | |
elif adv_request.status_code == 400: | |
current_date += datetime.timedelta(days=1) | |
print(f"Ошибка 400. Сдвиг нач.даты +1 день. Заменена на {current_date.strftime('%d-%m-%Y')}") | |
continue # Переходим к следующей итерации цикла while | |
else: | |
print(f"Ошибка при выполнении запроса. Код статуса: {adv_request.status_code} Кампания ID={id_campaign}") | |
time.sleep(60) | |
return request_data | |
# Дату начала кампании можно получить из API-функции: https://advert-api.wildberries.ru/adv/v1/promotion/adverts | |
date_start = '2024-07-08' # Дата начала | |
date_end = '2024-07-14' # Дата конца | |
# Список ID рек.кампаний, можно получить из https://advert-api.wb.ru/adv/v1/promotion/count | |
data_from_account = { | |
'advertId': [18108640, 18102441] | |
} | |
df_from_account = pd.DataFrame(data_from_account) | |
# Получение данных | |
df = adv_wb_info(df_from_account, date_start, date_end) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment