Skip to content

Commit b6b0df6

Browse files
committed
PreRev 5.5 - 0527 端口整理
1 parent 0b4c414 commit b6b0df6

File tree

3 files changed

+120
-70
lines changed

3 files changed

+120
-70
lines changed

models/requests.py

-1
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,3 @@ class SearchInfo(BaseModel):
4646
page: int = 1
4747
sort: Optional[Union[JMSortRule, PicaSortRule]] = None
4848
append_query: Optional[List[str]] = None
49-

router/JMComic.py

+119-68
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
11
from fastapi import APIRouter, Cookie, Response
2+
from bs4 import BeautifulSoup
3+
import re
24

35
from core.JMRequests import JMRequests, JMToolUtils
46
from models.mirrors import ApiList
57
from models.user import Login_Form
6-
from models.requests import StandardResponse
8+
from models.requests import SearchInfo, StandardResponse
79
from models.sort import JMSortRule
810
from models.album import JMComicInfo, TinyComicInfo, Origin
911

1012

11-
router = APIRouter(
12-
prefix="/jm"
13-
)
13+
router = APIRouter(prefix="/jm")
1414

1515

1616
@router.post("/login", response_model=StandardResponse)
17-
async def jm_login(body: Login_Form, response: Response, api_mirror: str = Cookie(default=ApiList[0])):
17+
async def jm_login(
18+
body: Login_Form, response: Response, api_mirror: str = Cookie(default=ApiList[0])
19+
):
1820
# 登录
1921
login_form = {
2022
"username": body.username,
2123
"password": body.password,
2224
"key": "0b931a6f4b5ccc3f8d870839d07ae7b2",
2325
"login_remember": "on",
2426
"view_mode_debug": 1,
25-
"view_mode": None
27+
"view_mode": None,
2628
}
2729

2830
req = JMRequests(api_mirror)
@@ -35,19 +37,21 @@ async def jm_login(body: Login_Form, response: Response, api_mirror: str = Cooki
3537

3638

3739
@router.get("/album", response_model=StandardResponse)
38-
async def jm_getAlbum(album_id: str, AVS: str = Cookie(default=""), remember: str = Cookie(default=""), api_mirror: str = Cookie(default=ApiList[0])):
40+
async def jm_getAlbum(
41+
album_id: str,
42+
AVS: str = Cookie(default=""),
43+
remember: str = Cookie(default=""),
44+
api_mirror: str = Cookie(default=ApiList[0]),
45+
):
3946
# 漫画信息
40-
req = JMRequests(api_mirror, {
41-
"AVS": AVS,
42-
"remember": remember
43-
})
47+
req = JMRequests(api_mirror, {"AVS": AVS, "remember": remember})
4448

4549
req_body = {
4650
"key": "0b931a6f4b5ccc3f8d870839d07ae7b2",
4751
"view_mode_debug": 1,
4852
"view_mode": "null",
4953
"comicName": "",
50-
"id": album_id
54+
"id": album_id,
5155
}
5256

5357
res = await req.get("/album", params=req_body)
@@ -57,103 +61,141 @@ async def jm_getAlbum(album_id: str, AVS: str = Cookie(default=""), remember: st
5761
assert res.data is not None
5862

5963
album_info = JMComicInfo(
60-
album_id=res.data["id"], name=res.data["name"], author=res.data["author"],
61-
cover=f"/media/albums/{res.data['id']}_3x4.jpg", description=res.data["description"],
62-
total_views=res.data["total_views"], total_likes=res.data["likes"],
63-
total_comments=res.data["comment_total"], series=res.data["series"],
64-
tags=res.data["tags"], is_favor=res.data["is_favorite"], is_liked=res.data["liked"],
64+
album_id=res.data["id"],
65+
name=res.data["name"],
66+
author=res.data["author"],
67+
cover=f"/media/albums/{res.data['id']}_3x4.jpg",
68+
description=res.data["description"],
69+
total_views=res.data["total_views"],
70+
total_likes=res.data["likes"],
71+
total_comments=res.data["comment_total"],
72+
series=res.data["series"],
73+
tags=res.data["tags"],
74+
is_favor=res.data["is_favorite"],
75+
is_liked=res.data["liked"],
6576
related_list=[
66-
TinyComicInfo(item["id"], name=item["name"], author=JMToolUtils.AuthorStr2List(
67-
item["author"]), cover=f"/media/albums/{item['id']}_3x4.jpg", origin=Origin.JMComic).__dict__() for item in res.data["related_list"]],
68-
series_id=res.data["series_id"], works=res.data["works"], actors=res.data["actors"]
77+
TinyComicInfo(
78+
item["id"],
79+
name=item["name"],
80+
author=JMToolUtils.AuthorStr2List(item["author"]),
81+
cover=f"/media/albums/{item['id']}_3x4.jpg",
82+
origin=Origin.JMComic,
83+
).__dict__()
84+
for item in res.data["related_list"]
85+
],
86+
series_id=res.data["series_id"],
87+
works=res.data["works"],
88+
actors=res.data["actors"],
6989
).__dict__()
7090
return StandardResponse(status_code=200, data=album_info)
7191
except AssertionError:
7292
return StandardResponse(status_code=res.status_code, error_msg=res.error_msg)
7393

7494

75-
@router.get("/chapters", response_model=StandardResponse)
76-
async def jm_getChapters(album_id: str, AVS: str = Cookie(default=""), remember: str = Cookie(default=""), api_mirror: str = Cookie(default=ApiList[0])):
95+
@router.get("/album/chapter", response_model=StandardResponse)
96+
async def jm_getChapters(
97+
album_id: str,
98+
AVS: str = Cookie(default=""),
99+
remember: str = Cookie(default=""),
100+
api_mirror: str = Cookie(default=ApiList[0]),
101+
):
77102
# 章节信息
78-
req = JMRequests(api_mirror, {
79-
"AVS": AVS,
80-
"remember": remember
81-
})
103+
req = JMRequests(api_mirror, {"AVS": AVS, "remember": remember})
82104

83105
req_body = {
84106
"key": "0b931a6f4b5ccc3f8d870839d07ae7b2",
85107
"view_mode_debug": 1,
86108
"view_mode": "null",
87109
"comicName": "",
88110
"skip": "",
89-
"id": album_id
111+
"id": album_id,
90112
}
91113

92-
res = await req.get("/chapter", params=req_body)
114+
res = await req.get("/chapters", params=req_body)
93115
await req.close()
94116

95117
try:
96118
assert res.data is not None
97-
return StandardResponse(status_code=200, data=res.data)
119+
if res.data["series"] == []:
120+
return StandardResponse(status_code=200, data=[album_id])
121+
else:
122+
return StandardResponse(
123+
status_code=200,
124+
data=[item["id"] for item in res.data["series"]],
125+
)
98126
except AssertionError:
99127
return StandardResponse(status_code=res.status_code, error_msg=res.error_msg)
100128

101129

102-
@router.get("/img_list", response_model=StandardResponse)
103-
async def jm_getImagesList(chapter_id: str, AVS: str = Cookie(default=""), remember: str = Cookie(default=""), api_mirror: str = Cookie(default=ApiList[0])):
130+
@router.get("/comic", response_model=StandardResponse)
131+
async def jm_getComic(
132+
chapter_id: str,
133+
AVS: str = Cookie(default=""),
134+
remember: str = Cookie(default=""),
135+
api_mirror: str = Cookie(default=ApiList[0]),
136+
):
104137
# 图片列表
105-
req = JMRequests(api_mirror,{
106-
"AVS": AVS,
107-
"remember": remember
108-
})
109-
110-
req_body={
111-
"id":chapter_id,
112-
"mode": "vertical",
113-
"page": 0,
114-
"app_img_shunt": "NaN"
115-
}
116-
# Alert! GetContent is desgined for the unencrypted data, but Chapter's data is encrypted, so you need to use Get instead.
117-
res=await req.getContent("/chapter_view_template",params=req_body)
138+
req = JMRequests(api_mirror, {"AVS": AVS, "remember": remember})
139+
140+
req_body = {"id": chapter_id, "mode": "vertical", "page": 0, "app_img_shunt": "NaN"}
141+
142+
res = await req.getContent("/chapter_view_template", params=req_body)
118143
await req.close()
119144

120145
try:
121146
assert res.data is not None
122-
return StandardResponse(status_code=200, data=res.data)
147+
document = BeautifulSoup(res.data, "lxml")
148+
img_list = []
149+
for container in document.find_all("div", class_="center scramble-page"):
150+
img_list.append(container.attrs["id"])
151+
152+
mo = re.search(r"(?<=var scramble_id = )\w+", res.data.decode("utf-8"))
153+
if mo is None:
154+
scramble_id = 220980
155+
else:
156+
scramble_id = int(mo.group())
157+
return StandardResponse(
158+
status_code=200, data={"scramble_id": scramble_id, "img_list": img_list}
159+
)
123160
except AssertionError:
124161
return StandardResponse(status_code=res.status_code, error_msg=res.error_msg)
125-
126162

127163

128164
@router.get("/logout", response_model=StandardResponse)
129165
async def jm_logout(response: Response):
130166
# 登出
131-
cookies = {
132-
"AVS": "",
133-
"remember": ""
134-
}
167+
cookies = {"AVS": "", "remember": ""}
135168
for cookie in cookies:
136169
response.set_cookie(cookie, "")
137170

138171
return StandardResponse(status_code=200, data="Success")
139172

140173

141174
@router.get("/favor", response_model=StandardResponse)
142-
async def jm_getFavor(page: int = 1, sort: JMSortRule = JMSortRule.Time, fid: str = "0", AVS: str = Cookie(default=""), remember: str = Cookie(default=""),
143-
api_mirror: str = Cookie(default=ApiList[0])):
175+
async def jm_getFavor(
176+
page: int = 1,
177+
sort: JMSortRule = JMSortRule.Time,
178+
fid: str = "0",
179+
AVS: str = Cookie(default=""),
180+
remember: str = Cookie(default=""),
181+
api_mirror: str = Cookie(default=ApiList[0]),
182+
):
144183
# 获取收藏夹
145-
req = JMRequests(api_mirror, {
146-
"AVS": AVS,
147-
"remember": remember,
148-
})
184+
req = JMRequests(
185+
api_mirror,
186+
{
187+
"AVS": AVS,
188+
"remember": remember,
189+
},
190+
)
149191

150192
req_body = {
151193
"key": "0b931a6f4b5ccc3f8d870839d07ae7b2",
152194
"view_mode_debug": 1,
153195
"view_mode": "null",
154196
"page": page,
155197
"folder_id": fid,
156-
"o": sort
198+
"o": sort,
157199
}
158200

159201
res = await req.get("/favorite", params=req_body)
@@ -163,29 +205,38 @@ async def jm_getFavor(page: int = 1, sort: JMSortRule = JMSortRule.Time, fid: st
163205
assert res.data is not None
164206
fav_list = list()
165207
for item in res.data["list"]:
166-
fav_list.append(TinyComicInfo(album_id=item["id"], name=item["name"], origin=Origin.JMComic,
167-
categories=TinyComicInfo.JM_categories_formatter(
168-
[item["category"], item["category_sub"]]),
169-
cover=f"/media/albums/{item['id']}_3x4.jpg",
170-
author=JMToolUtils.AuthorStr2List(item["author"])).__dict__())
208+
fav_list.append(
209+
TinyComicInfo(
210+
album_id=item["id"],
211+
name=item["name"],
212+
origin=Origin.JMComic,
213+
categories=TinyComicInfo.JM_categories_formatter(
214+
[item["category"], item["category_sub"]]
215+
),
216+
cover=f"/media/albums/{item['id']}_3x4.jpg",
217+
author=JMToolUtils.AuthorStr2List(item["author"]),
218+
).__dict__()
219+
)
171220
return StandardResponse(status_code=res.status_code, data=fav_list)
172221
except:
173222
return StandardResponse(status_code=res.status_code, error_msg=res.error_msg)
174223

175224

176225
@router.post("/favor/{album_id}", response_model=StandardResponse)
177-
async def jm_addFavor(album_id: str, AVS: str = Cookie(default=""), remember: str = Cookie(default=""), api_mirror: str = Cookie(default=ApiList[0])):
226+
async def jm_addFavor(
227+
album_id: str,
228+
AVS: str = Cookie(default=""),
229+
remember: str = Cookie(default=""),
230+
api_mirror: str = Cookie(default=ApiList[0]),
231+
):
178232
# 添加收藏
179-
req = JMRequests(api_mirror, {
180-
"AVS": AVS,
181-
"remember": remember
182-
})
233+
req = JMRequests(api_mirror, {"AVS": AVS, "remember": remember})
183234

184235
req_body = {
185236
"key": "0b931a6f4b5ccc3f8d870839d07ae7b2",
186237
"view_mode_debug": 1,
187238
"view_mode": "null",
188-
"aid": album_id
239+
"aid": album_id,
189240
}
190241

191242
res = await req.post("/favorite", data=req_body)

router/PicaComic.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ async def pica_getSubComments(
177177
return res
178178

179179

180-
@router.get("/album/chapter", response_model=StandardResponse)
180+
@router.get("/album/chapters", response_model=StandardResponse)
181181
async def pica_getAlbumChapter(
182182
album_id: str, page: int = 1, pica_token: str = Cookie(default="")
183183
):

0 commit comments

Comments
 (0)