13
13
import time
14
14
15
15
16
- def WriteLoginInfo (response ):
17
- """写登录态入当前 Session
16
+ def WriteLoginInfo (response , session ):
17
+ """写登录态入Session
18
18
19
19
Args:
20
20
response (dict): 解码后的登录态
21
21
22
22
Raises:
23
23
LoginFailedException: 登陆失败时发生
24
24
"""
25
- sess = GetCurrentSession ()
26
- sess .login_info = {"tick" : time .time (), "content" : response }
27
- if not sess .login_info ["content" ]["code" ] == 200 :
28
- sess .login_info ["success" ] = False
29
- raise LoginFailedException (sess .login_info ["content" ])
30
- sess .login_info ["success" ] = True
31
- sess .csrf_token = sess .cookies .get ('__csrf' )
25
+ session .login_info = {"tick" : time .time (), "content" : response }
26
+ if not session .login_info ["content" ]["code" ] == 200 :
27
+ session .login_info ["success" ] = False
28
+ raise LoginFailedException (session .login_info ["content" ])
29
+ session .login_info ["success" ] = True
30
+ session .csrf_token = session .cookies .get ('__csrf' )
32
31
33
32
34
33
@WeapiCryptoRequest
@@ -103,7 +102,7 @@ def GetCurrentLoginStatus():
103
102
return "/weapi/w/nuser/account/get" , {}
104
103
105
104
106
- async def LoginViaCellphone (phone = "" , password = "" ,passwordHash = "" ,captcha = "" , ctcode = 86 , remeberLogin = True ) -> dict :
105
+ async def LoginViaCellphone (phone = "" , password = "" ,passwordHash = "" ,captcha = "" , ctcode = 86 , remeberLogin = True , session = None ) -> dict :
107
106
"""PC 端 - 手机号登陆
108
107
109
108
* 若同时指定 password 和 passwordHash, 优先使用 password
@@ -125,7 +124,7 @@ async def LoginViaCellphone(phone="", password="",passwordHash="",captcha="", ct
125
124
dict
126
125
"""
127
126
path = "/eapi/w/login/cellphone"
128
- sess = GetCurrentSession ()
127
+ session = session or GetCurrentSession ()
129
128
if password :
130
129
passwordHash = HashHexDigest (password )
131
130
@@ -148,11 +147,11 @@ async def LoginViaCellphone(phone="", password="",passwordHash="",captcha="", ct
148
147
)
149
148
)()
150
149
151
- WriteLoginInfo (login_status )
152
- return {'code' :200 ,'result' :sess .login_info }
150
+ WriteLoginInfo (login_status , session )
151
+ return {'code' :200 ,'result' :session .login_info }
153
152
154
153
155
- async def LoginViaEmail (email = "" , password = "" ,passwordHash = "" , remeberLogin = True ) -> dict :
154
+ async def LoginViaEmail (email = "" , password = "" ,passwordHash = "" , remeberLogin = True , session = None ) -> dict :
156
155
"""网页端 - 邮箱登陆
157
156
158
157
* 若同时指定 password 和 passwordHash, 优先使用 password
@@ -171,7 +170,7 @@ async def LoginViaEmail(email="", password="",passwordHash="", remeberLogin=True
171
170
dict
172
171
"""
173
172
path = "/eapi/login"
174
- sess = GetCurrentSession ()
173
+ session = session or GetCurrentSession ()
175
174
if password :
176
175
passwordHash = HashHexDigest (password )
177
176
@@ -192,10 +191,10 @@ async def LoginViaEmail(email="", password="",passwordHash="", remeberLogin=True
192
191
)
193
192
)()
194
193
195
- WriteLoginInfo (login_status )
196
- return {'code' :200 ,'result' :sess .login_info }
194
+ WriteLoginInfo (login_status , session )
195
+ return {'code' :200 ,'result' :session .login_info }
197
196
198
- async def LoginViaAnonymousAccount (deviceId = None ):
197
+ async def LoginViaAnonymousAccount (deviceId = None , session = None ):
199
198
'''PC 端 - 游客登陆
200
199
201
200
Args:
@@ -207,8 +206,9 @@ async def LoginViaAnonymousAccount(deviceId=None):
207
206
Returns:
208
207
dict
209
208
'''
209
+ session = session or GetCurrentSession ()
210
210
if not deviceId :
211
- deviceId = GetCurrentSession () .deviceId
211
+ deviceId = session .deviceId
212
212
login_status = WeapiCryptoRequest (
213
213
lambda : ("/api/register/anonimous" , {
214
214
"username" : b64encode (
@@ -230,8 +230,8 @@ async def LoginViaAnonymousAccount(deviceId=None):
230
230
'id' : login_status ['userId' ],
231
231
** login_status
232
232
}
233
- })
234
- return GetCurrentSession () .login_info
233
+ }, session )
234
+ return session .login_info
235
235
236
236
@WeapiCryptoRequest
237
237
def SetSendRegisterVerifcationCodeViaCellphone (cell : str , ctcode = 86 ):
@@ -294,45 +294,6 @@ def SetRegisterAccountViaCellphone(
294
294
"phone" : str (cell ),
295
295
}
296
296
297
- async def LoginViaAnonymousAccount (deviceId = None ):
298
- '''PC 端 - 游客登陆
299
-
300
- Args:
301
- deviceId (str optional): 设备 ID. 设置非 None 将同时改变 Session 的设备 ID. Defaults to None.
302
-
303
- Notes:
304
- Session 默认使用 `pyncm!` 作为设备 ID
305
-
306
- Returns:
307
- dict
308
- '''
309
- if deviceId :
310
- GetCurrentSession ().deviceId = deviceId
311
- deviceId = GetCurrentSession ().deviceId
312
- login_status = await WeapiCryptoRequest (
313
- lambda : ("/api/register/anonimous" , {
314
- "username" : b64encode (
315
- ('%s %s' % (
316
- deviceId ,
317
- cloudmusic_dll_encode_id (deviceId ))).encode ()
318
- ).decode ()
319
- }
320
- )
321
- )()
322
- assert login_status ['code' ] == 200 ,"匿名登陆失败"
323
- WriteLoginInfo ({
324
- ** login_status ,
325
- 'profile' :{
326
- 'nickname' : 'Anonymous' ,
327
- ** login_status
328
- },
329
- 'account' :{
330
- 'id' : login_status ['userId' ],
331
- ** login_status
332
- }
333
- })
334
- return GetCurrentSession ().login_info
335
-
336
297
@EapiCryptoRequest
337
298
def CheckIsCellphoneRegistered (cell : str , prefix = 86 ):
338
299
"""移动端 - 检查某手机号是否已注册
0 commit comments