добавил условия
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-04-29 23:32:49 +10:00
parent 8b07841687
commit 36b544ad7e
2 changed files with 37 additions and 8 deletions

View File

@@ -74,7 +74,7 @@ class UniversalParser(BaseParser):
if parsed.netloc != base_domain: if parsed.netloc != base_domain:
continue continue
print("URL:", abs_url)
if not check_url(abs_url) and wp.check_error_url(abs_url): if not check_url(abs_url) and wp.check_error_url(abs_url):
try: try:
@@ -82,11 +82,18 @@ class UniversalParser(BaseParser):
article.download() article.download()
article.parse() article.parse()
print("URL:", abs_url)
if len(article.text) > 200 and article.publish_date: if len(article.text) > 200 and article.publish_date:
# Если дата публикации отсутствует - используем текущую
if article.publish_date:
time_text = article.publish_date.strftime("%Y/%m/%d %H:%M:%S") 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) response_text = gpt_response_message(str(article.text), self.promt)
# print(response_text) print(response_text)
if response_text: if response_text:
update_bd_and_create_document( update_bd_and_create_document(
response_text=response_text, response_text=response_text,

View File

@@ -9,6 +9,12 @@ from utils import logger
import parser_bd as pbd import parser_bd as pbd
# Обязательные поля для модели ParsedData
REQUIRED_FIELDS = [
'title', 'category', 'translation_text', 'short_text'
]
def update_bd_and_create_document( def update_bd_and_create_document(
response_text: str, response_text: str,
article_date: str, article_date: str,
@@ -20,8 +26,6 @@ def update_bd_and_create_document(
""" """
Обрабатывает ответ от GPT, сохраняет в БД и создаёт DOCX документ Обрабатывает ответ от GPT, сохраняет в БД и создаёт DOCX документ
""" """
clean_response = ''
if not response_text: if not response_text:
print(f"Пустой ответ от GPT для URL: {url}") print(f"Пустой ответ от GPT для URL: {url}")
logger.info(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() clean_response = response_text.strip().replace('```json', '').replace('```', '').strip()
data = json.loads(clean_response) 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']: if data['category']:
# Добавляем системные поля
data['article_date'] = article_date data['article_date'] = article_date
data['url'] = url data['url'] = url
data['parsed_at'] = parsed_at data['parsed_at'] = parsed_at
@@ -73,6 +90,11 @@ def update_bd_and_create_document(
doc.save(doc_path) doc.save(doc_path)
print(f"Сохранен документ: {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: except Exception as ex:
print(f"Ошибка при обработке ответа GPT: {ex}") print(f"Ошибка при обработке ответа GPT для URL {url}: {ex}")
logger.info(f"Ошибка при обработке ответа GPT: {ex}") print(f"Сырой ответ: {response_text[:500]}")
logger.error(f"Ошибка при обработке ответа GPT для {url}: {ex}")