[pixiv] use api for illust series
This commit is contained in:
@@ -562,34 +562,39 @@ class PixivSeriesExtractor(PixivExtractor):
|
|||||||
self.user_id, self.series_id = match.groups()
|
self.user_id, self.series_id = match.groups()
|
||||||
|
|
||||||
def works(self):
|
def works(self):
|
||||||
url = self.root + "/ajax/series/" + self.series_id
|
offset = 0
|
||||||
params = {"p": 1}
|
|
||||||
headers = {
|
|
||||||
"Accept": "application/json",
|
|
||||||
"Referer": "{}/user/{}/series/{}".format(
|
|
||||||
self.root, self.user_id, self.series_id),
|
|
||||||
"Alt-Used": "www.pixiv.net",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
series = None
|
||||||
|
works = []
|
||||||
while True:
|
while True:
|
||||||
data = self.request(url, params=params, headers=headers).json()
|
data = (self.api.illust_series(self.series_id, offset))
|
||||||
body = data["body"]
|
|
||||||
page = body["page"]
|
|
||||||
|
|
||||||
series = body["extraData"]["meta"]
|
if series is None:
|
||||||
series["id"] = self.series_id
|
detail = data['illust_series_detail']
|
||||||
series["total"] = page["total"]
|
series = {
|
||||||
series["title"] = text.extr(series["title"], '"', '"')
|
'id': self.series_id,
|
||||||
|
'total': detail['series_work_count'],
|
||||||
|
'title': detail["title"],
|
||||||
|
'description': detail['caption'],
|
||||||
|
}
|
||||||
|
|
||||||
for info in page["series"]:
|
works = works + data['illusts']
|
||||||
work = self.api.illust_detail(info["workId"])
|
|
||||||
work["num_series"] = info["order"]
|
|
||||||
work["series"] = series
|
|
||||||
yield work
|
|
||||||
|
|
||||||
if len(page["series"]) < 10:
|
if data['next_url'] is None:
|
||||||
return
|
break
|
||||||
params["p"] += 1
|
|
||||||
|
offset = len(works)
|
||||||
|
|
||||||
|
works.reverse()
|
||||||
|
|
||||||
|
chapterNo = 0
|
||||||
|
for work in works:
|
||||||
|
chapterNo += 1
|
||||||
|
|
||||||
|
work["num_series"] = chapterNo
|
||||||
|
work["series"] = series
|
||||||
|
|
||||||
|
yield work
|
||||||
|
|
||||||
|
|
||||||
class PixivNovelExtractor(PixivExtractor):
|
class PixivNovelExtractor(PixivExtractor):
|
||||||
@@ -916,6 +921,10 @@ class PixivAppAPI():
|
|||||||
params = {"illust_id": illust_id}
|
params = {"illust_id": illust_id}
|
||||||
return self._pagination("/v2/illust/related", params)
|
return self._pagination("/v2/illust/related", params)
|
||||||
|
|
||||||
|
def illust_series(self, series_id, offset=0):
|
||||||
|
params = {"illust_series_id": series_id, "offset": offset}
|
||||||
|
return self._call("/v1/illust/series", params)
|
||||||
|
|
||||||
def novel_bookmark_detail(self, novel_id):
|
def novel_bookmark_detail(self, novel_id):
|
||||||
params = {"novel_id": novel_id}
|
params = {"novel_id": novel_id}
|
||||||
return self._call(
|
return self._call(
|
||||||
|
|||||||
Reference in New Issue
Block a user