9e0644095f
移除 Playwright 浏览器自动化,改用 passport/SSO HTTP 接口获取二维码与轮询登录;后端模块化拆分,前端替换为 Vue3 SPA。 Co-authored-by: Cursor <cursoragent@cursor.com>
60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
LOGIN_COOKIE_KEYS = frozenset({
|
|
"sessionid", "sessionid_ss", "sid_guard", "uid_tt", "uid_tt_ss",
|
|
"sso_uid_tt", "sso_uid_tt_ss", "passport_sso_user_id",
|
|
"sid_ucp_sso", "sid_guard_ee", "uid_tt_ee",
|
|
"passport_auth_status", "login_time", "multi_sids",
|
|
"is_login", "douyin_tt",
|
|
})
|
|
|
|
|
|
def match_login_cookies(cookie_names):
|
|
name_set = set(cookie_names)
|
|
return [k for k in LOGIN_COOKIE_KEYS if k in name_set]
|
|
|
|
|
|
def is_logged_in(cookies, cookie_names):
|
|
matched = match_login_cookies(cookie_names)
|
|
name_set = set(cookie_names)
|
|
if len(matched) >= 2:
|
|
return True
|
|
has_session = bool(name_set & {"sessionid", "sessionid_ss", "sid_guard", "sid_tt"})
|
|
has_uid = bool(name_set & {"uid_tt", "uid_tt_ss", "passport_sso_user_id"})
|
|
if has_session and has_uid:
|
|
return True
|
|
if has_session and len(cookies) >= 30:
|
|
return True
|
|
for c in cookies:
|
|
if c["name"] == "passport_auth_status":
|
|
val = str(c.get("value", "")).lower()
|
|
if val in ("1", "true", "yes", "2") and has_session:
|
|
return True
|
|
if c["name"] == "login_time" and c.get("value"):
|
|
return True
|
|
return False
|
|
|
|
|
|
def extract_nickname(cookies):
|
|
for c in cookies:
|
|
if c["name"] in ("passport_sso_user_name", "nickname", "user_name", "user_nickname"):
|
|
return c["value"]
|
|
for c in cookies:
|
|
if c["name"] == "uid_tt" and c.get("value"):
|
|
return f"用户{c['value'][:8]}"
|
|
return "用户"
|
|
|
|
|
|
def cookies_to_json(cookie_jar) -> list[dict]:
|
|
"""将 requests CookieJar 转为前端 JSON 列表"""
|
|
items = []
|
|
for c in cookie_jar:
|
|
items.append({
|
|
"name": c.name,
|
|
"value": c.value,
|
|
"domain": c.domain or ".douyin.com",
|
|
"path": c.path or "/",
|
|
"expires": c.expires,
|
|
"httpOnly": bool(getattr(c, "_rest", {}).get("HttpOnly") or False),
|
|
"secure": bool(c.secure),
|
|
})
|
|
return items
|