summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/pixiv.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/pixiv.py')
-rw-r--r--gallery_dl/extractor/pixiv.py47
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"])