From 146e55bfa6b9ca229b27571d94c399edb825d72e Mon Sep 17 00:00:00 2001 From: gitadmin Date: Sat, 15 Nov 2025 21:37:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=80=D0=B5=D0=BF=D0=BE=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 3 ++- vk_load.py | 48 ++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/.env b/.env index 9b15d44..72f8760 100644 --- a/.env +++ b/.env @@ -100,7 +100,7 @@ DESC_PREFIX = "https://reg.konvent.ru/zk2025/events/actions/" 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=100&page=0&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=" # Event status IS_EVENT = true @@ -110,6 +110,7 @@ PROCESS_EVENT_UPDATES = false PUBLISH_SILENTLY = true USE_SUBSCRIPTION_BOT = false + # OpenRouter OR_KEY = "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" OR_MODEL_NAME = "qwen/qwen3-vl-235b-a22b-instruct" diff --git a/vk_load.py b/vk_load.py index f09072a..f33eedb 100644 --- a/vk_load.py +++ b/vk_load.py @@ -87,11 +87,30 @@ def get_vk_posts(): raise Exception(error_msg) def process_post(post): - """Извлекает необходимые данные из поста VK""" + """Извлекает необходимые данные из поста VK, включая обработку репостов""" post_id = post['id'] vk_post_url = f"https://vk.ru/wall{VK_GROUP_ID}_{post_id}" published_at = datetime.utcfromtimestamp(post['date']).strftime('%Y-%m-%d %H:%M:%S') + # Проверка, является ли пост репостом + is_repost = 'copy_history' in post and len(post.get('copy_history', [])) > 0 + + # Если это репост, используем данные из оригинального поста + if is_repost: + original_post = post['copy_history'][0] # Берем первый элемент (обычно он один) + # Используем данные из оригинального поста + source_post = original_post + # Сохраняем информацию о том, что это репост, в тексте + repost_prefix = f"[Репост] " + original_owner_id = original_post.get('owner_id', 0) + original_post_id = original_post.get('id', 0) + original_url = f"https://vk.ru/wall{original_owner_id}_{original_post_id}" + repost_info = f"\n\n[Оригинальный пост: {original_url}]" + else: + source_post = post + repost_prefix = "" + repost_info = "" + # Инициализация полей опроса is_poll = 0 poll_question = None @@ -102,8 +121,8 @@ def process_post(post): # Инициализация поля изображения image_url = None - # Обработка вложений - for attachment in post.get('attachments', []): + # Обработка вложений из оригинального поста (если это репост) или текущего поста + for attachment in source_post.get('attachments', []): if attachment['type'] == 'poll': is_poll = 1 poll = attachment['poll'] @@ -123,9 +142,17 @@ def process_post(post): max_size = max(sizes, key=lambda s: s.get('width', 0) * s.get('height', 0)) image_url = max_size['url'] + # Формируем текст поста: если это репост, добавляем префикс и информацию об оригинале + post_text = source_post.get('text', '') + if is_repost: + # Если у репоста есть свой текст, добавляем его перед текстом оригинала + if post.get('text', '').strip(): + post_text = f"{post['text']}\n\n---\n\n{post_text}" + post_text = repost_prefix + post_text + repost_info + return { 'vk_post_id': post_id, - 'text': post['text'], + 'text': post_text, 'image_url': image_url, 'vk_post_url': vk_post_url, 'published_at': published_at, @@ -133,7 +160,8 @@ def process_post(post): 'poll_question': poll_question, 'poll_options': poll_options, 'poll_multiple': poll_multiple, - 'poll_end_date': poll_end_date + 'poll_end_date': poll_end_date, + 'is_repost': is_repost } def save_to_database(posts): @@ -186,7 +214,15 @@ def save_to_database(posts): auto_publish_reason = 'Нет (найден тег ' + VK_NO_REPOST_TAG + ')' else: auto_publish_reason = 'Нет' - log_message(f"Добавлен новый пост: ID {post['vk_post_id']}, Дата: {post['published_at']}, Автопубликация: {auto_publish_reason}") + + # Добавляем информацию о репосте в лог + repost_info = "" + if post.get('is_repost', False): + repost_info = ", Репост: Да" + else: + repost_info = ", Репост: Нет" + + log_message(f"Добавлен новый пост: ID {post['vk_post_id']}, Дата: {post['published_at']}, Автопубликация: {auto_publish_reason}{repost_info}") except mysql.connector.Error as err: error_msg = f"Ошибка при вставке поста {post['vk_post_id']}: {err}" log_message(error_msg)