diff options
Diffstat (limited to 'gallery_dl/extractor/pixiv.py')
| -rw-r--r-- | gallery_dl/extractor/pixiv.py | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/gallery_dl/extractor/pixiv.py b/gallery_dl/extractor/pixiv.py index e3a96bd..fc092f1 100644 --- a/gallery_dl/extractor/pixiv.py +++ b/gallery_dl/extractor/pixiv.py @@ -462,6 +462,9 @@ class PixivRankingExtractor(PixivExtractor): ("https://www.pixiv.net/ranking.php?mode=daily&date=20170818"), ("https://www.pixiv.net/ranking.php"), ("https://touch.pixiv.net/ranking.php"), + ("https://www.pixiv.net/ranking.php?mode=unknown", { + "exception": exception.StopExtraction, + }), ) def __init__(self, match): @@ -479,6 +482,8 @@ class PixivRankingExtractor(PixivExtractor): mode_map = { "daily": "day", "daily_r18": "day_r18", + "daily_ai": "day_ai", + "daily_r18_ai": "day_r18_ai", "weekly": "week", "weekly_r18": "week_r18", "monthly": "month", @@ -490,10 +495,10 @@ class PixivRankingExtractor(PixivExtractor): "rookie": "week_rookie", "r18g": "week_r18g", } - if mode not in mode_map: - self.log.warning("invalid mode '%s'", mode) - mode = "daily" - self.mode = mode_map[mode] + try: + self.mode = mode = mode_map[mode] + except KeyError: + raise exception.StopExtraction("Invalid mode '%s'", mode) date = query.get("date") if date: @@ -525,6 +530,15 @@ class PixivSearchExtractor(PixivExtractor): "range": "1-10", "count": 10, }), + ("https://pixiv.net/en/tags/foo/artworks?order=week&s_mode=s_tag", { + "exception": exception.StopExtraction, + }), + ("https://pixiv.net/en/tags/foo/artworks?order=date&s_mode=tag", { + "exception": exception.StopExtraction, + }), + ("https://www.pixiv.net/search.php?s_mode=s_tag&name=Original", { + "exception": exception.StopExtraction, + }), ("https://www.pixiv.net/en/tags/foo/artworks?order=date&s_mode=s_tag"), ("https://www.pixiv.net/search.php?s_mode=s_tag&word=Original"), ("https://touch.pixiv.net/search.php?word=Original"), @@ -546,19 +560,20 @@ class PixivSearchExtractor(PixivExtractor): if self.word: self.word = text.unquote(self.word) else: - if "word" not in query: + try: + self.word = query["word"] + except KeyError: raise exception.StopExtraction("Missing search term") - self.word = query["word"] sort = query.get("order", "date_d") sort_map = { "date": "date_asc", "date_d": "date_desc", } - if sort not in sort_map: - self.log.warning("invalid sort order '%s'", sort) - sort = "date_d" - self.sort = sort_map[sort] + try: + self.sort = sort = sort_map[sort] + except KeyError: + raise exception.StopExtraction("Invalid search order '%s'", sort) target = query.get("s_mode", "s_tag_full") target_map = { @@ -566,10 +581,10 @@ class PixivSearchExtractor(PixivExtractor): "s_tag_full": "exact_match_for_tags", "s_tc": "title_and_caption", } - if target not in target_map: - self.log.warning("invalid search target '%s'", target) - target = "s_tag_full" - self.target = target_map[target] + try: + self.target = target = target_map[target] + except KeyError: + raise exception.StopExtraction("Invalid search mode '%s'", target) self.date_start = query.get("scd") self.date_end = query.get("ecd") @@ -638,7 +653,7 @@ class PixivPixivisionExtractor(PixivExtractor): headers = {"User-Agent": "Mozilla/5.0"} self.page = self.request(url, headers=headers).text - title = text.extract(self.page, '<title>', '<')[0] + title = text.extr(self.page, '<title>', '<') return { "pixivision_id" : self.pixivision_id, "pixivision_title": text.unescape(title), @@ -692,7 +707,7 @@ class PixivSeriesExtractor(PixivExtractor): series = body["extraData"]["meta"] series["id"] = self.series_id series["total"] = page["total"] - series["title"] = text.extract(series["title"], '"', '"')[0] + series["title"] = text.extr(series["title"], '"', '"') for info in page["series"]: work = self.api.illust_detail(info["workId"]) |
