From 8c790b018c6bbe8b382f5611d0e6774d7400a9d0 Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 11 Apr 2026 12:12:28 +1000 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D1=8F?= =?UTF-8?q?=D1=8E=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=B2=D0=BE?= =?UTF-8?q?=20=D0=B2=D1=81=D0=B5=20=D0=B1=D0=B4,=20=D0=B7=D0=B0=D0=BA?= =?UTF-8?q?=D1=80=D1=8B=D1=82=D0=B8=D0=B5=20=D1=81=D0=BE=D0=B5=D0=B4=D0=B8?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 4 ++++ work_parser.py | 33 ++++++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/main.py b/main.py index acf9a7e..835cd57 100644 --- a/main.py +++ b/main.py @@ -459,6 +459,10 @@ class Parserall(BaseModel): url: HttpUrl promt: str +@app.post("/add_sources" , summary="Добавление парсинга любого источника") +async def add_sources_all_ist(sources: Parserall): + return wp.add_sources(sources.url, sources.promt) + @app.post("/parser_all" , summary="Запуск процеса парсинга любого источника") async def process_parser_all_ist(url: Parserall, background_tasks: BackgroundTasks): background_tasks.add_task(start_pars_all_istochnik(str(url.url), url.promt)) diff --git a/work_parser.py b/work_parser.py index 7ba1a57..3d43c3c 100644 --- a/work_parser.py +++ b/work_parser.py @@ -12,7 +12,7 @@ conn = psycopg2.connect( options="-c statement_timeout=30000" # таймаут запроса 30 сек ) conn.autocommit = True - +# работа с базой данных показывания задач work_parser def create_table(): with conn.cursor() as cur: cur.execute(""" @@ -40,7 +40,6 @@ def insert_task(status, source_url=None, source_id=None, priority=0): task_id = cur.fetchone()[0] return task_id - def get_tasks_offset(limit, offset): with conn.cursor(cursor_factory=RealDictCursor) as cur: cur.execute(""" @@ -77,7 +76,7 @@ def update_task(task_id, **fields): cur.execute(f"UPDATE work_parser SET {set_sql} WHERE id = %s;", values) return True - +# Создание и работа с таблицей по созданию и редактированию промтов def create_table_config_gpt(): with conn.cursor() as cur: cur.execute(""" @@ -114,14 +113,15 @@ def get_all_promt(): sources = [{"url": row["url"], "name": row["name"], "promt": row["promt"]} for row in rows] return {"sources": sources} +# Возвращает список всех значений поля name из таблицы config_gpt def get_all_categories_promt(): - """Возвращает список всех значений поля name из таблицы config_gpt""" with conn.cursor(cursor_factory=RealDictCursor) as cur: cur.execute("SELECT name FROM config_gpt") rows = cur.fetchall() return [row["name"] for row in rows] +# Создание, сохранение и работа с таблицей ошибочных ссылок (error_url) def create_table_error_url(): with conn.cursor() as cur: cur.execute(""" @@ -133,7 +133,6 @@ def create_table_error_url(): """) print("Таблица error_url создана или уже существует") - def add_error_url(source_url: str, error_sources_url: str): """Добавляет запись об ошибке URL""" with conn.cursor() as cur: @@ -144,7 +143,6 @@ def add_error_url(source_url: str, error_sources_url: str): """, (source_url, error_sources_url)) return cur.fetchone()[0] - def check_error_url(error_sources_url: str) -> bool: """Проверяет, есть ли запись в таблице error_url с таким URL""" with conn.cursor(cursor_factory=RealDictCursor) as cur: @@ -157,6 +155,26 @@ def check_error_url(error_sources_url: str) -> bool: return row is None +# Создание и работа с таблицей источников add_sources +def create_table_add_sourse(): + with conn.cursor() as cur: + cur.execute(""" + CREATE TABLE IF NOT EXISTS sourse ( + url TEXT PRIMARY KEY, + promt TEXT + ); + """) + print("Таблица sourse создана или уже существует") + +def add_sources(url: str, promt: str): + with conn.cursor() as cur: + cur.execute(""" + INSERT INTO config_gpt (url, promt) + VALUES (%s, %s) + ON CONFLICT (url) DO UPDATE SET + promt = EXCLUDED.promt + """, (url, promt)) + conn.commit() # Пример использования # if __name__ == "__main__": @@ -167,4 +185,5 @@ def check_error_url(error_sources_url: str) -> bool: # "promt": "Задача: Перевод на русский язык и тематическая фильтрация новостных статей из китайской прессы. \n Необходимо переводить текст статьи и определять, относится ли она к КНР по указанным темам: \n 1. Перевод\n Переведи предоставленный китайский текст на русский язык, сохранив оригинальный смысл, стиль и структуру.\n Текст:\n {content}\n -------------------------------------\n 2. Отбирай исключительно новости, прямо относящиеся к Китаю, его безопасности, соседним странам и территориям, влияющим на интересы Китая.\n Если не относится к Китаю — считаем, что статья НЕ подходит, и отдаем пустой JSON:\n {\"text\": \"\", \"pereskas\": \"\", \"title\": \"\", \"topics\": []}\n Если привязка есть — переходи к шагу 3. \n -------------------------------------\n 3. Тематическая классификация\n Определи, относится ли статья к одной или нескольким темам из списка:\n 1) Военные новости — конфликты, учения, мобилизация, закупки вооружений. \n 2) Пограничная деятельность — охрана границы, пограничные учения, строительство или модернизация пограничной инфраструктуры, техника для пограничников. \n 3) Пункты пропуска на границе с РФ — изменения режима работы, строительство, реконструкция, оборудование, логистика. \n 4) Пограничные реки — состояние рек, экология, инфраструктурные проекты, мониторинг. \n 5) Чрезвычайные ситуации — природные и техногенные происшествия, особенно затрагивающие пограничные реки и прилегающие земли. \n 6) Санитарно-эпидемиологическая обстановка — эпидемии, эпизоотии, эпифитотии, угрозы и меры предотвращения. \n 7) Индустриальные проекты (арктическое/антарктическое направление). \n 8) Индустриальные проекты в приграничных районах — заводы, производства, технопарки, новые технологии. \n 9) Инфраструктурные проекты в приграничных районах — дороги, мосты, транспорт, логистика. \n 10) Культура малочисленных народностей (нанайцы, монголы, уйгуры, нанайцы и хэчжэ) — политика, традиции, бытовая жизнь нанайцев, монголов, уйгуров, и хэчжэ (малочисленных народов).\n\n Отметь только те темы, которым статья действительно соответствует.\n\n -------------------------------------\n 4. Формат ответа \n Вернуть строго JSON без пояснений и дополнительных слов:\n {\n \"translation_text\": \"<перевод текста статьи на русский язык (дословный, точный и без сокращений ) >\",\n \"short_text\": \"<пересказ переведённого текста>\",\n \"title\": \"<краткая суть новости (1–2 предложения)>\",\n \"category\": \"<названий категорий, которым соответствует статья>\"\n }\n Если статья не относится ни к одной теме или не привязана к нужным регионам — вернуть:\n {\"translation_text\": \"\", \"short_text\": \"\", \"title\": \"\", \"category\": \"\"}" # }) # # print(get_promt("japan")) -# # create_table_error_url() \ No newline at end of file +# # create_table_error_url() + # create_table_add_sourse() \ No newline at end of file