1
0
mirror of https://github.com/mikf/gallery-dl.git synced 2024-11-26 04:32:51 +01:00

[pixiv] move query parsing out of constructor

better exception handling, among other things
This commit is contained in:
Mike Fährmann 2018-05-15 13:28:08 +02:00
parent 909d105ae6
commit b8e53b8c6b
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

View File

@ -112,17 +112,17 @@ class PixivUserExtractor(PixivExtractor):
def __init__(self, match): def __init__(self, match):
PixivExtractor.__init__(self) PixivExtractor.__init__(self)
self.user_id, tag = match.groups() self.user_id, self.tag = match.groups()
if tag:
self.tag = text.unquote(tag).lower()
self.works = self._tagged_works
def works(self): def works(self):
if self.tag:
return self._tagged_works()
return self.api.user_illusts(self.user_id) return self.api.user_illusts(self.user_id)
def _tagged_works(self): def _tagged_works(self):
tag = text.unquote(self.tag).lower()
for work in self.api.user_illusts(self.user_id): for work in self.api.user_illusts(self.user_id):
if self.tag in [tag["name"].lower() for tag in work["tags"]]: if tag in [tag["name"].lower() for tag in work["tags"]]:
yield work yield work
@ -259,8 +259,17 @@ class PixivRankingExtractor(PixivExtractor):
def __init__(self, match): def __init__(self, match):
PixivExtractor.__init__(self) PixivExtractor.__init__(self)
self.query = match.group(1)
self.mode = self.date = None
modes = { def works(self):
return self.api.illust_ranking(self.mode, self.date)
def get_metadata(self, user=None):
query = text.parse_query(self.query)
mode = query.get("mode", "daily").lower()
mode_map = {
"daily": "day", "daily": "day",
"daily_r18": "day_r18", "daily_r18": "day_r18",
"weekly": "week", "weekly": "week",
@ -274,14 +283,10 @@ class PixivRankingExtractor(PixivExtractor):
"rookie": "week_rookie", "rookie": "week_rookie",
"r18g": "week_r18g", "r18g": "week_r18g",
} }
if mode not in mode_map:
query = text.parse_query(match.group(1))
mode = query.get("mode", "daily").lower()
if mode not in modes:
self.log.warning("invalid mode '%s'", mode) self.log.warning("invalid mode '%s'", mode)
mode = "daily" mode = "daily"
self.mode = modes[mode] self.mode = mode_map[mode]
date = query.get("date") date = query.get("date")
if date: if date:
@ -294,13 +299,10 @@ class PixivRankingExtractor(PixivExtractor):
date = (datetime.utcnow() - timedelta(days=1)).strftime("%Y-%m-%d") date = (datetime.utcnow() - timedelta(days=1)).strftime("%Y-%m-%d")
self.date = date self.date = date
self.ranking_info = {"mode": mode, "date": self.date} return {"ranking": {
"mode": mode,
def works(self): "date": self.date,
return self.api.illust_ranking(self.mode, self.date) }}
def get_metadata(self, user=None):
return {"ranking": self.ranking_info}
class PixivSearchExtractor(PixivExtractor): class PixivSearchExtractor(PixivExtractor):
@ -317,14 +319,20 @@ class PixivSearchExtractor(PixivExtractor):
def __init__(self, match): def __init__(self, match):
PixivExtractor.__init__(self) PixivExtractor.__init__(self)
self.query = match.group(1)
self.word = self.sort = self.target = None
query = text.parse_query(match.group(1)) def works(self):
return self.api.search_illust(self.word, self.sort, self.target)
def get_metadata(self, user=None):
query = text.parse_query(self.query)
if "word" in query: if "word" in query:
self.word = text.unescape(query["word"]) self.word = text.unescape(query["word"])
else: else:
self.log.error("missing search term") self.log.error("missing search term")
self.word = None raise exception.StopExtraction()
sort = query.get("order", "date_d") sort = query.get("order", "date_d")
sort_map = { sort_map = {
@ -347,19 +355,11 @@ class PixivSearchExtractor(PixivExtractor):
target = "s_tag" target = "s_tag"
self.target = target_map[target] self.target = target_map[target]
self.search_info = { return {"search": {
"word": self.word, "word": self.word,
"sort": self.sort, "sort": self.sort,
"target": self.target, "target": self.target,
} }}
def works(self):
if not self.word:
return ()
return self.api.search_illust(self.word, self.sort, self.target)
def get_metadata(self, user=None):
return {"search": self.search_info}
class PixivFollowExtractor(PixivExtractor): class PixivFollowExtractor(PixivExtractor):
@ -374,7 +374,7 @@ class PixivFollowExtractor(PixivExtractor):
("https://touch.pixiv.net/bookmark_new_illust.php", None), ("https://touch.pixiv.net/bookmark_new_illust.php", None),
] ]
def __init__(self, match): def __init__(self, _):
PixivExtractor.__init__(self) PixivExtractor.__init__(self)
def works(self): def works(self):