diff options
Diffstat (limited to 'gallery_dl/extractor/pixiv.py')
| -rw-r--r-- | gallery_dl/extractor/pixiv.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/gallery_dl/extractor/pixiv.py b/gallery_dl/extractor/pixiv.py index a589760..6b2e1c3 100644 --- a/gallery_dl/extractor/pixiv.py +++ b/gallery_dl/extractor/pixiv.py @@ -642,6 +642,66 @@ class PixivPixivisionExtractor(PixivExtractor): } +class PixivSeriesExtractor(PixivExtractor): + """Extractor for illustrations from a Pixiv series""" + subcategory = "series" + directory_fmt = ("{category}", "{user[id]} {user[account]}", + "{series[id]} {series[title]}") + filename_fmt = "{num_series:>03}_{id}_p{num}.{extension}" + pattern = (r"(?:https?://)?(?:www\.)?pixiv\.net" + r"/user/(\d+)/series/(\d+)") + test = ("https://www.pixiv.net/user/10509347/series/21859", { + "range": "1-10", + "count": 10, + "keyword": { + "num_series": int, + "series": { + "canonical": "https://www.pixiv.net/user/10509347" + "/series/21859", + "description": str, + "ogp": dict, + "title": "先輩がうざい後輩の話", + "total": int, + "twitter": dict, + }, + }, + }) + + def __init__(self, match): + PixivExtractor.__init__(self, match) + self.user_id, self.series_id = match.groups() + + def works(self): + url = self.root + "/ajax/series/" + self.series_id + params = {"p": 1} + headers = { + "Accept": "application/json", + "Referer": "{}/user/{}/series/{}".format( + self.root, self.user_id, self.series_id), + "Alt-Used": "www.pixiv.net", + } + + while True: + data = self.request(url, params=params, headers=headers).json() + body = data["body"] + page = body["page"] + + series = body["extraData"]["meta"] + series["id"] = self.series_id + series["total"] = page["total"] + series["title"] = text.extract(series["title"], '"', '"')[0] + + for info in page["series"]: + work = self.api.illust_detail(info["workId"]) + work["num_series"] = info["order"] + work["series"] = series + yield work + + if len(page["series"]) < 10: + return + params["p"] += 1 + + class PixivSketchExtractor(Extractor): """Extractor for user pages on sketch.pixiv.net""" category = "pixiv" |
