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