Skip to content

Commit fa8f4c7

Browse files
authored
Merge pull request #51 from TrueRou/develop
fix: invalid wechat cookies
2 parents 27c9093 + 678098d commit fa8f4c7

File tree

6 files changed

+31
-4
lines changed

6 files changed

+31
-4
lines changed

docs/examples.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# 例子
22

3+
::: danger
4+
1.4.0 版本说明:由于机台登录方式修改,导致 maimai.py 的 **ArcadeProvider** 暂时无法使用。我们正在积极研究新的登录方式,争取尽快恢复机台数据源的功能。
5+
:::
6+
37
所有的例子完全摘抄自 [maimai.py 单元测试](https://github.com/TrueRou/maimai.py/tree/main/tests),仅推荐有经验的开发者阅读。
48

59
如果你阅读下面的内容有困难,建议先阅读 [开始 章节](./get-started.md)

docs/get-started.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# 开始
22

3+
::: danger
4+
1.4.0 版本说明:由于机台登录方式修改,导致 maimai.py 的 **ArcadeProvider** 暂时无法使用。我们正在积极研究新的登录方式,争取尽快恢复机台数据源的功能。
5+
:::
6+
37
安装方式:
48

59
```bash

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ features:
2828
- title: 上传数据
2929
details: 支持将玩家成绩上传至数据源:目前支持上传分数至水鱼和落雪查分器。
3030
- title: 扩展查分
31-
details: 特别的,我们支持从机台数据源获取成绩:目前支持通过微信代理或玩家二维码来查询成绩
31+
details: 因国服1.53更新,该功能目前暂不可用
3232
---
3333

docs/providers/arcade.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# ArcadeProvider
22

3+
::: danger
4+
1.4.0 版本说明:由于机台登录方式修改,导致 maimai.py 的 **ArcadeProvider** 暂时无法使用。我们正在积极研究新的登录方式,争取尽快恢复机台数据源的功能。
5+
:::
6+
37
来自舞萌机台的接口,通过玩家二维码获取玩家加密 userId,进而获取分数等信息
48

59
实现:IPlayerProvider, IScoreProvider, IRegionProvider, IPlayerIdentifierProvider

maimai_py/providers/arcade.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ async def _deser_score(score: dict, songs: "MaimaiSongs") -> Optional[Score]:
5959

6060
@retry(stop=stop_after_attempt(3), retry=retry_if_exception_type(TitleServerNetworkError), reraise=True)
6161
async def get_player(self, identifier: PlayerIdentifier, client: "MaimaiClient") -> ArcadePlayer:
62+
raise NotImplementedError("ArcadeProvider does not support new 1.53+ login method.")
6263
maimai_icons = await client.items(PlayerIcon)
6364
maimai_trophies = await client.items(PlayerTrophy)
6465
maimai_nameplates = await client.items(PlayerNamePlate)
@@ -76,6 +77,7 @@ async def get_player(self, identifier: PlayerIdentifier, client: "MaimaiClient")
7677

7778
@retry(stop=stop_after_attempt(3), retry=retry_if_exception_type(TitleServerNetworkError), reraise=True)
7879
async def get_scores_all(self, identifier: PlayerIdentifier, client: "MaimaiClient") -> list[Score]:
80+
raise NotImplementedError("ArcadeProvider does not support new 1.53+ login method.")
7981
maimai_songs = await client.songs()
8082
if identifier.credentials and isinstance(identifier.credentials, str):
8183
resp_list = await arcade.get_user_scores(identifier.credentials.encode(), http_proxy=self._http_proxy)
@@ -85,6 +87,7 @@ async def get_scores_all(self, identifier: PlayerIdentifier, client: "MaimaiClie
8587

8688
@retry(stop=stop_after_attempt(3), retry=retry_if_exception_type(TitleServerNetworkError), reraise=True)
8789
async def get_regions(self, identifier: PlayerIdentifier, client: "MaimaiClient") -> list[PlayerRegion]:
90+
raise NotImplementedError("ArcadeProvider does not support new 1.53+ login method.")
8891
if identifier.credentials and isinstance(identifier.credentials, str):
8992
resp_dict = await arcade.get_user_region(identifier.credentials.encode(), http_proxy=self._http_proxy)
9093
return [
@@ -100,5 +103,6 @@ async def get_regions(self, identifier: PlayerIdentifier, client: "MaimaiClient"
100103

101104
@retry(stop=stop_after_attempt(3), retry=retry_if_exception_type((TimeoutException, NetworkError)), reraise=True)
102105
async def get_identifier(self, code: Union[str, dict[str, str]], client: "MaimaiClient") -> PlayerIdentifier:
106+
raise NotImplementedError("ArcadeProvider does not support new 1.53+ login method.")
103107
resp_bytes: bytes = await arcade.get_uid_encrypted(str(code), http_proxy=self._http_proxy)
104108
return PlayerIdentifier(credentials=resp_bytes.decode())

maimai_py/providers/wechat.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,17 +120,28 @@ async def get_player(self, identifier: PlayerIdentifier, client: "MaimaiClient")
120120

121121
@retry(stop=stop_after_attempt(3), retry=retry_if_exception_type(RequestError), reraise=True)
122122
async def get_identifier(self, code: Union[str, dict[str, str]], client: "MaimaiClient") -> PlayerIdentifier:
123+
wechat_ua = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x6307001e)"
124+
123125
if isinstance(code, dict) and all([code.get("r"), code.get("t"), code.get("code"), code.get("state")]):
124126
headers = {
125-
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x6307001e)",
126127
"Host": "tgk-wcaime.wahlap.com",
128+
"Upgrade-Insecure-Requests": "1",
127129
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
130+
"Sec-Fetch-Site": "none",
131+
"Sec-Fetch-Mode": "navigate",
132+
"Sec-Fetch-User": "?1",
133+
"Sec-Fetch-Dest": "document",
134+
"Accept-Encoding": "gzip, deflate, br",
135+
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
128136
}
129137
resp = await client._client.get(
130-
"https://tgk-wcaime.wahlap.com/wc_auth/oauth/callback/maimai-dx", params=code, headers=headers
138+
"https://tgk-wcaime.wahlap.com/wc_auth/oauth/callback/maimai-dx",
139+
headers={"User-Agent": wechat_ua, **headers},
140+
params=code,
131141
)
132142
if resp.status_code == 302 and resp.next_request:
133-
resp_next = await client._client.get(resp.next_request.url, headers=headers)
143+
resp_next = await client._client.get(resp.next_request.url, headers={"User-Agent": wechat_ua})
144+
print(resp_next)
134145
return PlayerIdentifier(credentials=dict(resp_next.cookies))
135146
else:
136147
raise InvalidWechatTokenError("Invalid or expired Wechat token")

0 commit comments

Comments
 (0)