Skip to content

Commit 0469d0c

Browse files
committed
User.search
1 parent 5625ad0 commit 0469d0c

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

src/luogu/__init__.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,21 +71,27 @@ class Model:
7171
_session.headers["User-Agent"] = USER_AGENT
7272

7373
@classmethod
74-
def _get(cls, url: str) -> "dict[str]":
74+
def _get(
75+
cls, url: str, params: dict = None, check: bool = True
76+
) -> "dict[str]":
7577
r = cls._session.get(
7678
url,
79+
params=params,
7780
headers={"X-Luogu-Type": "content-only"},
7881
)
7982
r.raise_for_status()
8083
data = r.json()
81-
if data["code"] == 404:
82-
raise NotFoundHttpException(data["currentData"]["errorMessage"])
83-
elif data["code"] == 403:
84-
raise AccessDeniedHttpException(
85-
data["currentData"]["errorMessage"]
86-
)
87-
elif data["code"] >= 400:
88-
raise HttpException(data["currentData"]["errorMessage"])
84+
if check:
85+
if data["code"] == 404:
86+
raise NotFoundHttpException(
87+
data["currentData"]["errorMessage"]
88+
)
89+
elif data["code"] == 403:
90+
raise AccessDeniedHttpException(
91+
data["currentData"]["errorMessage"]
92+
)
93+
elif data["code"] >= 400:
94+
raise HttpException(data["currentData"]["errorMessage"])
8995
return data
9096

9197
@classmethod
@@ -230,6 +236,19 @@ def get_problem(p: dict) -> Problem:
230236
get_problem,
231237
)
232238

239+
@classmethod
240+
def search(cls, keyword: str) -> "list[User]":
241+
"""根据 UID 或用户名搜索用户
242+
243+
:param str keyword: 搜索关键字
244+
"""
245+
users = cls._get(
246+
"https://www.luogu.com.cn/api/user/search",
247+
{"keyword": keyword},
248+
False,
249+
)["users"]
250+
return LazyList(users, lambda u: User(u["uid"]))
251+
233252

234253
class Paste(Model):
235254
"""剪贴板

tests/__main__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def test_404(self):
1515

1616
def test_equal(self):
1717
u = luogu.User(1)
18-
self.assertEqual(u, luogu.User(1))
18+
self.assertEqual(u, luogu.User.search("kkksc03")[0])
1919
self.assertNotEqual(u, luogu.User(2))
2020
self.assertNotEqual(u, 1)
2121

0 commit comments

Comments
 (0)