This commit is contained in:
78
services/document_builder.py
Normal file
78
services/document_builder.py
Normal file
@@ -0,0 +1,78 @@
|
||||
"""
|
||||
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}")
|
||||
Reference in New Issue
Block a user