This commit is contained in:
@@ -74,19 +74,26 @@ class UniversalParser(BaseParser):
|
||||
if parsed.netloc != base_domain:
|
||||
continue
|
||||
|
||||
print("URL:", abs_url)
|
||||
|
||||
|
||||
if not check_url(abs_url) and wp.check_error_url(abs_url):
|
||||
try:
|
||||
article = Article(abs_url)
|
||||
article.download()
|
||||
article.parse()
|
||||
|
||||
|
||||
print("URL:", abs_url)
|
||||
|
||||
if len(article.text) > 200 and article.publish_date:
|
||||
time_text = article.publish_date.strftime("%Y/%m/%d %H:%M:%S")
|
||||
# Если дата публикации отсутствует - используем текущую
|
||||
if article.publish_date:
|
||||
time_text = article.publish_date.strftime("%Y/%m/%d %H:%M:%S")
|
||||
else:
|
||||
time_text = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
|
||||
print(f"Дата публикации отсутствует, используем текущую: {time_text}")
|
||||
|
||||
response_text = gpt_response_message(str(article.text), self.promt)
|
||||
# print(response_text)
|
||||
print(response_text)
|
||||
if response_text:
|
||||
update_bd_and_create_document(
|
||||
response_text=response_text,
|
||||
|
||||
@@ -9,6 +9,12 @@ from utils import logger
|
||||
import parser_bd as pbd
|
||||
|
||||
|
||||
# Обязательные поля для модели ParsedData
|
||||
REQUIRED_FIELDS = [
|
||||
'title', 'category', 'translation_text', 'short_text'
|
||||
]
|
||||
|
||||
|
||||
def update_bd_and_create_document(
|
||||
response_text: str,
|
||||
article_date: str,
|
||||
@@ -20,8 +26,6 @@ def update_bd_and_create_document(
|
||||
"""
|
||||
Обрабатывает ответ от GPT, сохраняет в БД и создаёт DOCX документ
|
||||
"""
|
||||
clean_response = ''
|
||||
|
||||
if not response_text:
|
||||
print(f"Пустой ответ от GPT для URL: {url}")
|
||||
logger.info(f"Пустой ответ от GPT для URL: {url}")
|
||||
@@ -31,7 +35,20 @@ def update_bd_and_create_document(
|
||||
clean_response = response_text.strip().replace('```json', '').replace('```', '').strip()
|
||||
data = json.loads(clean_response)
|
||||
|
||||
# Проверяем наличие обязательных полей от GPT
|
||||
missing_fields = [f for f in REQUIRED_FIELDS if not data.get(f)]
|
||||
if missing_fields:
|
||||
print(f"Ответ GPT не содержит обязательных полей: {missing_fields} для URL: {url}")
|
||||
logger.warning(f"Ответ GPT не содержит обязательных полей: {missing_fields} для URL: {url}")
|
||||
print(f"Полученные данные: {data}")
|
||||
return
|
||||
|
||||
# Нормализация типов: category может приходить как list, а ожидается str
|
||||
if isinstance(data.get('category'), list):
|
||||
data['category'] = ', '.join(data['category'])
|
||||
|
||||
if data['category']:
|
||||
# Добавляем системные поля
|
||||
data['article_date'] = article_date
|
||||
data['url'] = url
|
||||
data['parsed_at'] = parsed_at
|
||||
@@ -73,6 +90,11 @@ def update_bd_and_create_document(
|
||||
doc.save(doc_path)
|
||||
print(f"Сохранен документ: {doc_path}")
|
||||
|
||||
except json.JSONDecodeError as ex:
|
||||
print(f"Ошибка парсинга JSON от GPT для URL {url}: {ex}")
|
||||
print(f"Сырой ответ: {response_text[:500]}")
|
||||
logger.error(f"JSON decode error для {url}: {ex}")
|
||||
except Exception as ex:
|
||||
print(f"Ошибка при обработке ответа GPT: {ex}")
|
||||
logger.info(f"Ошибка при обработке ответа GPT: {ex}")
|
||||
print(f"Ошибка при обработке ответа GPT для URL {url}: {ex}")
|
||||
print(f"Сырой ответ: {response_text[:500]}")
|
||||
logger.error(f"Ошибка при обработке ответа GPT для {url}: {ex}")
|
||||
|
||||
Reference in New Issue
Block a user