добавил атостарт всех сайтов
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-05-16 12:41:54 +10:00
parent 656c8d9d9a
commit 770445feaa
4 changed files with 55 additions and 2 deletions

28
main.py
View File

@@ -4,6 +4,7 @@ Parser API - Точка входа приложения
from contextlib import asynccontextmanager
from fastapi import FastAPI
import uvicorn
from work_parser import get_true_sources
from config import (
APP_TITLE,
@@ -16,10 +17,11 @@ from config import (
SCHEDULED_PARSER_2_MINUTE
)
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from parsers import scheduled_parser_1, scheduled_parser_2
from parsers import scheduled_parser_1, scheduled_parser_2, scheduled_parser_universal
from api import setup_routes
# Инициализация планировщика
scheduler = AsyncIOScheduler()
@@ -30,12 +32,36 @@ async def lifespan(app: FastAPI):
# Startup
scheduler.add_job(scheduled_parser_1, "cron", hour=SCHEDULED_PARSER_1_HOUR, minute=SCHEDULED_PARSER_1_MINUTE)
scheduler.add_job(scheduled_parser_2, "cron", hour=SCHEDULED_PARSER_2_HOUR, minute=SCHEDULED_PARSER_2_MINUTE)
# Получаем все источники и распределяем их равномерно по 24 часам
sources = get_true_sources().items()
num_sources = len(sources)
if num_sources > 0:
total_minutes_per_day = 24 * 60
minutes_per_source = total_minutes_per_day / num_sources
for idx, (url, promt) in enumerate(sources):
total_minutes = int(idx * minutes_per_source)
scheduled_hour = total_minutes // 60
scheduled_minute = total_minutes % 60
# Для универсального парсера нужно передавать url и promt как аргументы
scheduler.add_job(
scheduled_parser_universal,
"cron",
hour=scheduled_hour,
minute=scheduled_minute,
args=[url, promt]
)
scheduler.start()
yield
# Shutdown
scheduler.shutdown()
# Создание приложения FastAPI
app = FastAPI(
title=APP_TITLE,

View File

@@ -15,5 +15,6 @@ __all__ = [
'start_pars_two_istochnik',
'scheduled_parser_2',
'UniversalParser',
'start_pars_all_istochnik'
'start_pars_all_istochnik',
'scheduled_parser_universal'
]

View File

@@ -122,3 +122,10 @@ def start_pars_all_istochnik(url: str, promt: str) -> None:
"""
parser = UniversalParser(url, promt)
parser.parse()
def scheduled_parser_universal(url: str, promt: str) -> None:
"""
Функция для автоматического запуска универсального парсера по расписанию
"""
start_pars_all_istochnik(url, promt)

View File

@@ -409,6 +409,25 @@ def get_all_sources(category: str):
return {"error": str(e), "sources": []}
def get_true_sources():
"""Возвращает все записи из таблицы sourse. Сначала показываются записи со status=true"""
conn = get_connection()
try:
with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute("""
SELECT * FROM sourse
WHERE status = true
""")
rows = cur.fetchall()
sources = {}
for row in rows:
sources.update({row["url"]: row["promt"]})
return sources
except Exception as e:
print(f"Ошибка при получении источников: {e}")
return {"error": str(e), "sources": []}
def update_source_status(url: str, status: bool = True):
"""Обновляет статус источника по URL"""
conn = get_connection()