增加斗鱼自定义CK筛选功能

This commit is contained in:
yml2213
2026-08-08 19:03:23 +08:00
parent 39ea0d2184
commit 65271124c0
4 changed files with 121 additions and 7 deletions
+30 -1
View File
@@ -29,6 +29,18 @@ def _fmt_dt(dt) -> str | None:
router = APIRouter(prefix="/api/cookies", tags=["Cookie管理"])
def _parse_account_names(raw_names: str) -> list[str]:
"""解析前端粘贴的 Excel 账号名,每行一个并去重。"""
names = []
seen = set()
for value in (raw_names or "").replace("\r\n", "\n").replace("\r", "\n").split("\n"):
name = value.strip()
if name and name not in seen:
names.append(name)
seen.add(name)
return names
# 斗鱼 Cookie 有效性检测接口(抓包参考:钱包中心鱼丸余额 + 用户等级详情)
CHECK_UA = (
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 "
@@ -129,6 +141,7 @@ def _visible_cookie_tasks_query(db: Session, current: User):
@router.get("")
def list_cookies(
search: str = Query(""),
account_names: str = Query(""),
page: int | None = Query(None, ge=1),
page_size: int = Query(20, ge=1, le=200),
include_cookie: bool = Query(True),
@@ -143,6 +156,13 @@ def list_cookies(
joinedload(LoginTask.account).joinedload(Account.assigned_user),
)
search_text = (search or "").strip()
selected_names = _parse_account_names(account_names)
if selected_names:
query = query.filter(
LoginTask.account_id.in_(
db.query(Account.id).filter(Account.username.in_(selected_names))
)
)
if search_text:
pattern = f"%{search_text}%"
if user_has_permission(current, "login:view_all"):
@@ -228,6 +248,7 @@ def cookies_summary(
@router.get("/export")
def export_cookies(
format: str = "csv",
account_names: str = Query(""),
db: Session = Depends(get_db),
current: User = Depends(require_permission("cookie:export")),
):
@@ -235,7 +256,15 @@ def export_cookies(
csv: 账号, Cookie, 时间
custom: 账号----密码----ck
"""
tasks = _visible_cookie_tasks_query(db, current).order_by(LoginTask.finished_at.desc()).all()
query = _visible_cookie_tasks_query(db, current)
selected_names = _parse_account_names(account_names)
if selected_names:
query = query.filter(
LoginTask.account_id.in_(
db.query(Account.id).filter(Account.username.in_(selected_names))
)
)
tasks = query.order_by(LoginTask.finished_at.desc()).all()
# 批量查账号,避免 N+1
account_ids = [t.account_id for t in tasks]