Загрузка данных


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()