Skip to content

Instantly share code, notes, and snippets.

@ShilGen
Forked from MikyPo/wb_advco_fullstats.py
Created January 19, 2025 01:36
Show Gist options
  • Save ShilGen/1e8bbe9974411eb6b39cf7eae06c31cc to your computer and use it in GitHub Desktop.
Save ShilGen/1e8bbe9974411eb6b39cf7eae06c31cc to your computer and use it in GitHub Desktop.
Получение статистики рек.кампаний через Wildberries API
# 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