style: 统一 Ruff 代码格式
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
二维码由微信 OAuth 生成,用户用微信扫码确认;本脚本轮询授权结果,完成
|
||||
YYB OAuth 回调后将动态 cookies 合并到 mall-session.json,供后续纯 CK 流程使用。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
@@ -18,7 +19,12 @@ from http.cookiejar import CookieJar
|
||||
from pathlib import Path
|
||||
from urllib.error import HTTPError
|
||||
from urllib.parse import urlencode
|
||||
from urllib.request import HTTPRedirectHandler, HTTPCookieProcessor, Request, build_opener
|
||||
from urllib.request import (
|
||||
HTTPRedirectHandler,
|
||||
HTTPCookieProcessor,
|
||||
Request,
|
||||
build_opener,
|
||||
)
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
OPEN_APPID = "wxd44977328b36e647"
|
||||
@@ -58,7 +64,9 @@ class Client:
|
||||
self.jar = CookieJar()
|
||||
self.opener = build_opener(NoRedirect, HTTPCookieProcessor(self.jar))
|
||||
|
||||
def request(self, url: str, *, referer: str = "", headers: dict[str, str] | None = None) -> Response:
|
||||
def request(
|
||||
self, url: str, *, referer: str = "", headers: dict[str, str] | None = None
|
||||
) -> Response:
|
||||
request_headers = {"User-Agent": USER_AGENT, "Accept": "*/*"}
|
||||
if referer:
|
||||
request_headers["Referer"] = referer
|
||||
@@ -116,7 +124,9 @@ def write_session(path: Path, cookies: dict[str, str]) -> None:
|
||||
document["login_type"] = cookies.get("logintype", "WX")
|
||||
document["login_updated_at"] = int(time.time())
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
fd, temporary = tempfile.mkstemp(prefix=".mall-session-", suffix=".tmp", dir=path.parent)
|
||||
fd, temporary = tempfile.mkstemp(
|
||||
prefix=".mall-session-", suffix=".tmp", dir=path.parent
|
||||
)
|
||||
try:
|
||||
with os.fdopen(fd, "w", encoding="utf-8") as handle:
|
||||
json.dump(document, handle, ensure_ascii=False, indent=2)
|
||||
@@ -133,7 +143,9 @@ def write_session(path: Path, cookies: dict[str, str]) -> None:
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description="应用宝微信扫码登录(纯 Python)")
|
||||
parser.add_argument("--session", type=Path, default=ROOT / "config/mall-session.json")
|
||||
parser.add_argument(
|
||||
"--session", type=Path, default=ROOT / "config/mall-session.json"
|
||||
)
|
||||
parser.add_argument("--qr", type=Path, default=ROOT / "config/wechat-login.jpg")
|
||||
parser.add_argument("--timeout", type=float, default=300, help="二维码等待秒数")
|
||||
parser.add_argument("--interval", type=float, default=2, help="轮询间隔秒数")
|
||||
@@ -158,7 +170,9 @@ def main() -> int:
|
||||
if page.status != 200:
|
||||
raise RuntimeError(f"微信授权页请求失败: HTTP {page.status}")
|
||||
uuid = extract_uuid(page.text)
|
||||
image = client.request(f"https://open.weixin.qq.com/connect/qrcode/{uuid}", referer=authorization_url)
|
||||
image = client.request(
|
||||
f"https://open.weixin.qq.com/connect/qrcode/{uuid}", referer=authorization_url
|
||||
)
|
||||
if image.status != 200 or not image.body:
|
||||
raise RuntimeError(f"微信二维码请求失败: HTTP {image.status}")
|
||||
args.qr.parent.mkdir(parents=True, exist_ok=True)
|
||||
@@ -173,7 +187,9 @@ def main() -> int:
|
||||
poll_query = {"uuid": uuid}
|
||||
if last:
|
||||
poll_query["last"] = last
|
||||
poll = client.request(f"{POLL_QR}?{urlencode(poll_query)}", referer=authorization_url)
|
||||
poll = client.request(
|
||||
f"{POLL_QR}?{urlencode(poll_query)}", referer=authorization_url
|
||||
)
|
||||
errcode, code = parse_poll(poll.text)
|
||||
if errcode == 405 and code:
|
||||
break
|
||||
@@ -202,13 +218,16 @@ def main() -> int:
|
||||
login_type = cookies.get("logintype", "WX")
|
||||
if not openid or not access_token:
|
||||
raise RuntimeError("YYB OAuth 回调未写入 openid/accesstoken")
|
||||
info = client.request(USER_INFO, headers={
|
||||
"Ual-Access-Login-Type": login_type_header(login_type),
|
||||
"Ual-Access-Access-Token": access_token,
|
||||
"Ual-Access-Openid": openid,
|
||||
"Origin": "https://m.yyb.qq.com",
|
||||
"Referer": "https://m.yyb.qq.com/",
|
||||
})
|
||||
info = client.request(
|
||||
USER_INFO,
|
||||
headers={
|
||||
"Ual-Access-Login-Type": login_type_header(login_type),
|
||||
"Ual-Access-Access-Token": access_token,
|
||||
"Ual-Access-Openid": openid,
|
||||
"Origin": "https://m.yyb.qq.com",
|
||||
"Referer": "https://m.yyb.qq.com/",
|
||||
},
|
||||
)
|
||||
if info.status != 200:
|
||||
raise RuntimeError(f"YYB 登录态校验失败: HTTP {info.status}")
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user