This commit is contained in:
@@ -62,9 +62,9 @@ def setup_routes(app: FastAPI) -> None:
|
|||||||
background_tasks.add_task(start_pars_all_istochnik, str(url.url), url.promt)
|
background_tasks.add_task(start_pars_all_istochnik, str(url.url), url.promt)
|
||||||
return {"message": "Процесс парсинга любого источника запущен"}
|
return {"message": "Процесс парсинга любого источника запущен"}
|
||||||
|
|
||||||
@app.get("/get_tasks_offset", summary="Метод получения задач парсинга")
|
# @app.get("/get_tasks_offset", summary="Метод получения задач парсинга")
|
||||||
async def get_tasks_offset(limit: int = Query(10, gt=0), offset: int = Query(0, ge=0)):
|
# async def get_tasks_offset(limit: int = Query(10, gt=0), offset: int = Query(0, ge=0)):
|
||||||
return wp.get_tasks_offset(limit, offset)
|
# return wp.get_tasks_offset(limit, offset)
|
||||||
|
|
||||||
# ==================== Настройки ====================
|
# ==================== Настройки ====================
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class UniversalParser(BaseParser):
|
|||||||
"""
|
"""
|
||||||
print(f"Начало парсинга: {self.url} с промтом: {self.promt}")
|
print(f"Начало парсинга: {self.url} с промтом: {self.promt}")
|
||||||
self.start_task(self.url)
|
self.start_task(self.url)
|
||||||
|
num = 0
|
||||||
try:
|
try:
|
||||||
response = requests.get(self.url)
|
response = requests.get(self.url)
|
||||||
# print(response.text)
|
# print(response.text)
|
||||||
@@ -85,6 +85,7 @@ class UniversalParser(BaseParser):
|
|||||||
print("URL:", abs_url)
|
print("URL:", abs_url)
|
||||||
|
|
||||||
if len(article.text) > 200 and article.publish_date:
|
if len(article.text) > 200 and article.publish_date:
|
||||||
|
num += 1
|
||||||
# Если дата публикации отсутствует - используем текущую
|
# Если дата публикации отсутствует - используем текущую
|
||||||
if 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")
|
||||||
@@ -109,7 +110,8 @@ class UniversalParser(BaseParser):
|
|||||||
print(f"Ошибка при обработке статьи {abs_url}: {e}")
|
print(f"Ошибка при обработке статьи {abs_url}: {e}")
|
||||||
logger.info(f"Ошибка при обработке статьи {abs_url}: {e}")
|
logger.info(f"Ошибка при обработке статьи {abs_url}: {e}")
|
||||||
continue
|
continue
|
||||||
|
if num:
|
||||||
|
wp.update_source_status(url)
|
||||||
self.complete_task()
|
self.complete_task()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -324,42 +324,75 @@ def create_table_add_sourse():
|
|||||||
cur.execute("""
|
cur.execute("""
|
||||||
CREATE TABLE IF NOT EXISTS sourse (
|
CREATE TABLE IF NOT EXISTS sourse (
|
||||||
url TEXT PRIMARY KEY,
|
url TEXT PRIMARY KEY,
|
||||||
promt TEXT
|
promt TEXT,
|
||||||
|
status BOOLEAN DEFAULT FALSE
|
||||||
);
|
);
|
||||||
""")
|
""")
|
||||||
print("Таблица sourse создана или уже существует")
|
print("Таблица sourse создана или уже существует")
|
||||||
finally:
|
finally:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def add_sources(url: str, promt: str):
|
|
||||||
|
def add_sources(url: str, promt: str, status: bool = False):
|
||||||
conn = get_connection()
|
conn = get_connection()
|
||||||
try:
|
try:
|
||||||
with conn.cursor() as cur:
|
with conn.cursor() as cur:
|
||||||
cur.execute("""
|
cur.execute("""
|
||||||
INSERT INTO sourse (url, promt)
|
INSERT INTO sourse (url, promt, status)
|
||||||
VALUES (%s, %s)
|
VALUES (%s, %s, %s)
|
||||||
ON CONFLICT (url) DO UPDATE SET
|
ON CONFLICT (url) DO UPDATE SET
|
||||||
promt = EXCLUDED.promt
|
promt = EXCLUDED.promt,
|
||||||
""", (url, promt))
|
status = EXCLUDED.status
|
||||||
|
""", (url, promt, status))
|
||||||
conn.commit()
|
conn.commit()
|
||||||
finally:
|
finally:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def get_all_sources(category: str):
|
def get_all_sources(category: str):
|
||||||
"""Возвращает все записи из таблицы sourse"""
|
"""Возвращает все записи из таблицы sourse. Сначала показываются записи со status=false"""
|
||||||
conn = get_connection()
|
conn = get_connection()
|
||||||
try:
|
try:
|
||||||
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
||||||
if category == "all":
|
if category == "all":
|
||||||
cur.execute("SELECT * FROM sourse")
|
cur.execute("""
|
||||||
|
SELECT * FROM sourse
|
||||||
|
ORDER BY status ASC, url ASC
|
||||||
|
""")
|
||||||
else:
|
else:
|
||||||
cur.execute("SELECT * FROM sourse WHERE promt = %s", (category,))
|
cur.execute("""
|
||||||
|
SELECT * FROM sourse
|
||||||
|
WHERE promt = %s
|
||||||
|
ORDER BY status ASC, url ASC
|
||||||
|
""", (category,))
|
||||||
rows = cur.fetchall()
|
rows = cur.fetchall()
|
||||||
sources = [{"url": row["url"], "promt": row["promt"]} for row in rows]
|
sources = [{"url": row["url"], "promt": row["promt"], "status": row["status"]} for row in rows]
|
||||||
return {"sources": sources}
|
return {"sources": sources}
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка при получении источников: {e}")
|
||||||
|
return {"error": str(e), "sources": []}
|
||||||
finally:
|
finally:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def update_source_status(url: str, status: bool = True):
|
||||||
|
"""Обновляет статус источника по URL"""
|
||||||
|
conn = get_connection()
|
||||||
|
try:
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute("""
|
||||||
|
UPDATE sourse SET status = %s WHERE url = %s
|
||||||
|
""", (status, url))
|
||||||
|
updated = cur.rowcount
|
||||||
|
conn.commit()
|
||||||
|
return {"message": f"Статус обновлён для {url}", "updated_rows": updated}
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка при обновлении статуса: {e}")
|
||||||
|
return {"error": str(e), "updated_rows": 0}
|
||||||
|
finally:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def delete_sources(url: str):
|
def delete_sources(url: str):
|
||||||
"""Удаляет источник по URL из таблицы sourse"""
|
"""Удаляет источник по URL из таблицы sourse"""
|
||||||
conn = get_connection()
|
conn = get_connection()
|
||||||
|
|||||||
Reference in New Issue
Block a user