diff --git a/.env b/.env index d9977c2..49c40bb 100644 --- a/.env +++ b/.env @@ -98,9 +98,9 @@ DESC_PREFIX = "https://reg.konvent.ru/zk2025/events/actions/" # VOLK mode API links # add category ID (volk24_larp for ex.) VOLK_API_VERSION = "1.0" -VOLK_CATEGORY_LIST = "https://base-dev.volk-nn.ru/api/categories?event=volk24&form=volk24_event" -VOLK_CATEGORY_DESC_PREFIX = "https://base-dev.volk-nn.ru/api/category?event=volk24&form=volk24_event&category=" -VOLK_EVENT_LIST_PREFIX = "https://base-dev.volk-nn.ru/api/applications?event=volk24&form=volk24_event&apps_on_page=200&page=0&category=" +VOLK_CATEGORY_LIST = "https://base.volk-nn.ru/api/categories?event=volk26&form=volk26_event" +VOLK_CATEGORY_DESC_PREFIX = "https://base.volk-nn.ru/api/category?event=volk26&form=volk26_event&category=" +VOLK_EVENT_LIST_PREFIX = "https://base.volk-nn.ru/api/applications?event=volk26&form=volk26_event&apps_on_page=200&page=0&category=" # Event status IS_EVENT = true diff --git a/volk_load.py b/volk_load.py index 1cd8a59..bcdb547 100644 --- a/volk_load.py +++ b/volk_load.py @@ -292,55 +292,66 @@ def load_events_by_category(category_id): log_message("Проверка структуры базы данных") ensure_database_structure() - # Получаем максимальный number и id_event для всей таблицы, чтобы продолжить нумерацию - # Значения должны быть уникальными во всей таблице, а не только для категории + # Получаем максимальный number для всей таблицы, чтобы продолжить нумерацию cursor.execute( - "SELECT MAX(number) as max_number, MAX(id_event) as max_id_event FROM events" + "SELECT MAX(number) as max_number FROM events" ) result = cursor.fetchone() max_number = result['max_number'] or 0 - max_id_event = result['max_id_event'] or 0 - # Используем максимальное значение из обоих полей для начала нумерации - start_number = max(max_number, max_id_event) + 1 + start_number = max_number + 1 # Обработка событий current_number = start_number for item in events_data: + # Проверка обязательного поля id + if 'id' not in item or item['id'] is None: + log_message(f"Пропущено событие без id: {item}", "WARNING") + continue + # Проверка обязательного поля title if 'title' not in item or not item['title']: - log_message(f"Пропущено событие без title: {item}", "WARNING") + log_message(f"Пропущено событие без title (id: {item.get('id', 'N/A')}): {item}", "WARNING") continue # Подготовка значений с маппингом полей + # Преобразуем id в число, если это необходимо + try: + id_event = int(item['id']) # Уникальный идентификатор события из JSON + except (ValueError, TypeError): + log_message(f"Пропущено событие с некорректным id (не число): {item.get('id', 'N/A')}", "WARNING") + continue name = item.get('title', '') about = item.get('announce', '') or '' authors = item.get('authors', '') or '' about_social_picture = item.get('image', '') or '' unit_name = category_id - # Проверка существующей записи по name (title) + # Проверка существующей записи по id_event (уникальный идентификатор) cursor.execute( - "SELECT id, name, authors, about, about_social_picture FROM events WHERE name = %s", - (name,) + "SELECT id, id_event, name, authors, about, about_social_picture FROM events WHERE id_event = %s", + (id_event,) ) existing = cursor.fetchone() if not existing: # Вставка новой записи - # Используем одинаковое значение для id_event и number + # Используем id из JSON для id_event, а для number используем автоинкремент cursor.execute( """INSERT INTO events (id_event, number, unit_name, name, about, about_social_picture, authors) VALUES (%s, %s, %s, %s, %s, %s, %s)""", - (current_number, current_number, unit_name, name, about, about_social_picture, authors) + (id_event, current_number, unit_name, name, about, about_social_picture, authors) ) inserted_count += 1 - log_message(f"Добавление: Событие '{name}', номер: {current_number}, категория: {category_id}") + log_message(f"Добавление: Событие '{name}', id_event: {id_event}, номер: {current_number}, категория: {category_id}") current_number += 1 else: # Обновление существующей записи needs_update = False update_fields = [] + if existing['name'] != name: + needs_update = True + update_fields.append('name') if existing['authors'] != authors: needs_update = True update_fields.append('authors') @@ -353,14 +364,14 @@ def load_events_by_category(category_id): if needs_update: cursor.execute( - """UPDATE events SET authors = %s, about = %s, about_social_picture = %s - WHERE name = %s""", - (authors, about, about_social_picture, name) + """UPDATE events SET name = %s, authors = %s, about = %s, about_social_picture = %s + WHERE id_event = %s""", + (name, authors, about, about_social_picture, id_event) ) updated_count += 1 - log_message(f"Обновление: Событие '{name}', обновлены поля: {', '.join(update_fields)}") + log_message(f"Обновление: Событие id_event={id_event} '{name}', обновлены поля: {', '.join(update_fields)}") else: - log_message(f"Событие '{name}' без изменений") + log_message(f"Событие id_event={id_event} '{name}' без изменений") connection.commit()