From d622805d669f1134ac2b3b363b7dce3560084b58 Mon Sep 17 00:00:00 2001 From: gitadmin Date: Sun, 21 Dec 2025 12:23:39 +0300 Subject: [PATCH] =?UTF-8?q?[=D0=92=D0=9E=D0=9B=D0=9A]=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B9=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=B3=D0=BE=D1=80=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- volk_load.py | 47 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/volk_load.py b/volk_load.py index e62c99a..a63eb87 100644 --- a/volk_load.py +++ b/volk_load.py @@ -157,27 +157,51 @@ def load_categories(): log_message(f"Запрос описания для категории {category_id} из {desc_url}") with urlopen(desc_url) as response: - desc_response = json.loads(response.read().decode()) + # Явно указываем кодировку UTF-8 при декодировании + raw_data = response.read() + try: + decoded_data = raw_data.decode('utf-8') + except UnicodeDecodeError as e: + error_msg = f"Ошибка декодирования ответа для категории {category_id}: {e}. Попытка декодирования как latin-1." + log_message(error_msg, "WARNING") + decoded_data = raw_data.decode('latin-1') + + try: + desc_response = json.loads(decoded_data) + except json.JSONDecodeError as e: + error_msg = f"Ошибка парсинга JSON для категории {category_id}: {e}. Первые 500 символов ответа: {decoded_data[:500]}" + log_message(error_msg, "ERROR") + print(error_msg) + # Пропускаем эту категорию и продолжаем обработку + continue # Проверка версии API api_version = desc_response.get('api_version') if api_version != VOLK_API_VERSION: - error_msg = f"Несовпадение версии API при загрузке описания категории {category_id}: получена версия '{api_version}', ожидается '{VOLK_API_VERSION}'. Обработка остановлена." + error_msg = f"Несовпадение версии API при загрузке описания категории {category_id}: получена версия '{api_version}', ожидается '{VOLK_API_VERSION}'. Пропуск категории." log_message(error_msg, "ERROR") print(error_msg) - # Останавливаем обработку - break + # Пропускаем эту категорию и продолжаем обработку + continue # Проверка наличия блока data if 'data' not in desc_response: - error_msg = f"В JSON ответе для категории {category_id} отсутствует блок 'data'. Обработка остановлена." + error_msg = f"В JSON ответе для категории {category_id} отсутствует блок 'data'. Пропуск категории." log_message(error_msg, "ERROR") print(error_msg) - # Останавливаем обработку - break + # Пропускаем эту категорию и продолжаем обработку + continue desc_data = desc_response['data'] + # Проверка типа desc_data - должен быть словарём + if not isinstance(desc_data, dict): + error_msg = f"Блок 'data' для категории {category_id} не является словарём (тип: {type(desc_data)}). Пропуск категории." + log_message(error_msg, "ERROR") + print(error_msg) + # Пропускаем эту категорию и продолжаем обработку + continue + # Получаем description из блока data description = desc_data.get('description') # Если description пустое, None или отсутствует, обнуляем поле в БД @@ -198,11 +222,14 @@ def load_categories(): log_message(f"Описание для категории {category_id} обнулено (пустое или отсутствует)") except Exception as e: - error_msg = f"Ошибка при загрузке описания для категории {category_id}: {e}" + error_msg = f"Ошибка при загрузке описания для категории {category_id}: {type(e).__name__}: {e}" log_message(error_msg, "ERROR") print(error_msg) - # Останавливаем обработку при ошибке - break + import traceback + traceback_str = traceback.format_exc() + log_message(f"Трассировка ошибки для категории {category_id}:\n{traceback_str}", "ERROR") + # Пропускаем эту категорию и продолжаем обработку остальных + continue log_message(f"Завершение загрузки описаний. Обновлено описаний: {desc_updated_count}.")