Загрузка данных
import pandas as pd
import requests
import json
from datetime import datetime
# --- Конфигурация API ---
TOKEN = 'ВАШ_X_AUTH_TOKEN'
API_URL = 'https://userapi.mts-link.ru/v3/events' # Проверьте точный URL в документации создания мероприятий
HEADERS = {
'x-auth-token': TOKEN,
'Content-Type': 'application/json'
}
# --- Настройки мероприятий ---
COMMON_SETTINGS = {
"access": "1",
"type": "webinar",
"isRecordable": True
}
# Специфические настройки по "Коду проекта" (Колонка B)
# Ключи - это значения из колонки "Код проекта" (в таблице стоит число 8)
SPECIFIC_SETTINGS = {
8: {
"description": "Проект: Финансовая грамотность",
# Здесь можно добавить специфичные теги, настройки чата и т.д.
}
}
def create_event(row):
event_name = row.get('Название мероприятия')
# Защита от пустых строк
if pd.isna(event_name):
return None
# 1. Обработка даты и времени
try:
# Извлекаем дату и время, переводим в строки
date_obj = pd.to_datetime(row['дата'], dayfirst=True)
date_str = date_obj.strftime('%Y-%m-%d')
time_str = str(row['время'])
# Склеиваем дату и время
dt = pd.to_datetime(f"{date_str} {time_str}")
# Проверка: если дата в прошлом, пропускаем (как в вашей формуле Excel)
if dt < datetime.now():
print(f"[ПРОПУСК] '{event_name}' - мероприятие в прошлом ({dt.strftime('%d.%m.%Y')})")
return "Пропущено (в прошлом)"
# Форматируем в ISO 8601 (добавляем +03:00 для Московского времени)
starts_at_iso = dt.strftime('%Y-%m-%dT%H:%M:%S+03:00')
except Exception as e:
print(f"[ОШИБКА ДАТЫ] Не удалось обработать дату для '{event_name}': {e}")
return "Ошибка даты"
# 2. Формирование настроек (Payload)
payload = COMMON_SETTINGS.copy()
project_code = row.get('Код проекта')
if project_code in SPECIFIC_SETTINGS:
payload.update(SPECIFIC_SETTINGS[project_code])
payload['name'] = event_name
payload['startsAt'] = starts_at_iso
# Если API поддерживает лимит участников, можно передать его
max_participants = row.get('МАХ кол Участник')
if not pd.isna(max_participants):
payload['estimatedAttendees'] = int(max_participants) # Название параметра нужно уточнить в документации
# 3. Отправка запроса
try:
response = requests.post(API_URL, headers=HEADERS, data=json.dumps(payload))
if response.status_code in (200, 201):
result = response.json()
# Название ключа ID зависит от ответа API (может быть id, eventId, eventSessionId)
event_id = result.get('id') or result.get('eventId')
print(f"[УСПЕХ] Создано: '{event_name[:30]}...' -> ID: {event_id}")
return event_id
else:
print(f"[ОШИБКА API] '{event_name[:30]}...': {response.status_code} - {response.text}")
return f"Ошибка API: {response.status_code}"
except Exception as e:
print(f"[СБОЙ СЕТИ] '{event_name[:30]}...': {e}")
return "Сбой сети"
def main():
# 1. Читаем таблицу
file_name = 'расписание_03022026.xlsx'
try:
# skiprows=1 нужно, если заголовки находятся не на первой строке (судя по фото, заголовки на 2-й строке Excel)
# На фото 1-я строка пустая/содержит фильтры, а заголовки ("Код проекта", "Название мероприятия") на 2-й строке
df = pd.read_excel(file_name, header=1)
print(f"Загружено строк: {len(df)}")
except Exception as e:
print(f"Ошибка загрузки файла: {e}")
return
# 2. Создаем мероприятия
results = []
for index, row in df.iterrows():
result = create_event(row)
results.append(result)
# 3. Записываем результаты обратно в новый файл
df['MTS_Result_ID'] = results
output_filename = 'расписание_создано.xlsx'
df.to_excel(output_filename, index=False)
print(f"\nГотово! Результаты сохранены в файл: {output_filename}")
if __name__ == '__main__':
main()