All checks were successful
continuous-integration/drone/push Build is passing
79 lines
3.0 KiB
Python
79 lines
3.0 KiB
Python
"""
|
|
Document Builder - создание JSON и DOCX файлов
|
|
"""
|
|
import json
|
|
import os
|
|
from docx import Document
|
|
from config import DOCUMENTS_DIR
|
|
from utils import logger
|
|
import parser_bd as pbd
|
|
|
|
|
|
def update_bd_and_create_document(
|
|
response_text: str,
|
|
article_date: str,
|
|
url: str,
|
|
parsed_at: str,
|
|
original_text: str,
|
|
other: str
|
|
) -> None:
|
|
"""
|
|
Обрабатывает ответ от GPT, сохраняет в БД и создаёт DOCX документ
|
|
"""
|
|
clean_response = ''
|
|
|
|
if not response_text:
|
|
print(f"Пустой ответ от GPT для URL: {url}")
|
|
logger.info(f"Пустой ответ от GPT для URL: {url}")
|
|
return
|
|
|
|
try:
|
|
clean_response = response_text.strip().replace('```json', '').replace('```', '').strip()
|
|
data = json.loads(clean_response)
|
|
|
|
if data['category']:
|
|
data['article_date'] = article_date
|
|
data['url'] = url
|
|
data['parsed_at'] = parsed_at
|
|
data['original_text'] = original_text
|
|
data['status'] = False
|
|
data['viewed'] = False
|
|
data['other'] = other
|
|
|
|
# Сохранение в БД через pbd
|
|
parsed_data = pbd.ParsedData(**data)
|
|
pbd.save_parsed_data_to_db(parsed_data)
|
|
print("Данные успешно сохранены в БД")
|
|
|
|
# Создание DOCX документа
|
|
path_day = article_date.split()[0]
|
|
documents_path = os.path.join(DOCUMENTS_DIR, path_day)
|
|
if not os.path.exists(documents_path):
|
|
os.makedirs(documents_path)
|
|
print(f"Создана папка: {documents_path}")
|
|
|
|
doc = Document()
|
|
doc.add_heading('Ссылка на статью', level=1)
|
|
doc.add_paragraph(other)
|
|
doc.add_heading('Дата и время', level=1)
|
|
doc.add_paragraph(article_date)
|
|
doc.add_heading('Обнаруженные тематики текста', level=1)
|
|
doc.add_paragraph(data["category"])
|
|
doc.add_heading('Заголовок', level=1)
|
|
doc.add_paragraph(data["title"])
|
|
doc.add_heading('Краткий пересказ', level=1)
|
|
doc.add_paragraph(data["short_text"])
|
|
doc.add_heading('Переведенный текст статьи в газете', level=1)
|
|
doc.add_paragraph(data["translation_text"])
|
|
doc.add_heading('Оригинальный текст', level=1)
|
|
doc.add_paragraph(original_text)
|
|
|
|
doc_name = f"{data['title']}.docx"
|
|
doc_path = os.path.join(documents_path, doc_name)
|
|
doc.save(doc_path)
|
|
print(f"Сохранен документ: {doc_path}")
|
|
|
|
except Exception as ex:
|
|
print(f"Ошибка при обработке ответа GPT: {ex}")
|
|
logger.info(f"Ошибка при обработке ответа GPT: {ex}")
|