From f7cdfd4c25d08ad9c875bd1fe96990a0f7fd0931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Thu, 24 Aug 2017 20:55:58 +0200 Subject: [PATCH] add a simplified version of 'parse_qs' This version only returns a dict of plain string to string key-value pairs and ignores multiple values for the same query variable. --- gallery_dl/extractor/flickr.py | 6 +----- gallery_dl/extractor/pixiv.py | 10 +++------- gallery_dl/text.py | 5 +++++ test/test_extractors.py | 2 +- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/gallery_dl/extractor/flickr.py b/gallery_dl/extractor/flickr.py index 8fb2120c..56f96c1e 100644 --- a/gallery_dl/extractor/flickr.py +++ b/gallery_dl/extractor/flickr.py @@ -10,7 +10,6 @@ from .common import Extractor, Message from .. import text, util, exception -import urllib.parse class FlickrExtractor(Extractor): @@ -225,10 +224,7 @@ class FlickrSearchExtractor(FlickrExtractor): def __init__(self, match): FlickrExtractor.__init__(self, match) - self.search = { - key: vlist[0] - for key, vlist in urllib.parse.parse_qs(match.group(1)).items() - } + self.search = text.parse_query(match.group(1)) if "text" not in self.search: self.search["text"] = "" diff --git a/gallery_dl/extractor/pixiv.py b/gallery_dl/extractor/pixiv.py index fd270e84..3c4ea1d6 100644 --- a/gallery_dl/extractor/pixiv.py +++ b/gallery_dl/extractor/pixiv.py @@ -11,7 +11,6 @@ from .common import Extractor, Message from .. import text, exception from ..cache import cache -import urllib.parse import re @@ -141,7 +140,7 @@ class PixivUserExtractor(PixivExtractor): PixivExtractor.__init__(self) self.user_id, tag = match.groups() if tag: - self.tag = urllib.parse.unquote(tag).lower() + self.tag = text.unquote(tag).lower() self.works = self._tagged_works def works(self): @@ -267,7 +266,7 @@ class PixivRankingExtractor(PixivExtractor): test = [ (("https://www.pixiv.net/ranking.php" "?mode=daily&content=illust&date=20170818"), { - "url": "7fdffbecfbd420b1d202fa417d79317240be30bc", + "url": "b073c74e3a6633dbdc9ba4122448f66e5211c771", }), ("https://www.pixiv.net/ranking.php", None), ] @@ -277,10 +276,7 @@ class PixivRankingExtractor(PixivExtractor): self._iter = None self._first = None - query = { - key: vlist[0] - for key, vlist in urllib.parse.parse_qs(match.group(1)).items() - } + query = text.parse_query(match.group(1)) self.mode = query.get("mode", "daily") self.content = query.get("content", "all") self.date = query.get("date") diff --git a/gallery_dl/text.py b/gallery_dl/text.py index e4243a27..49328ab6 100644 --- a/gallery_dl/text.py +++ b/gallery_dl/text.py @@ -130,6 +130,11 @@ def extract_iter(txt, begin, end, pos=0): yield value +def parse_query(qs): + """Parse a query string into key-value pairs""" + return {key: vlist[0] for key, vlist in urllib.parse.parse_qs(qs).items()} + + if os.name == "nt": clean_path = clean_path_windows else: diff --git a/test/test_extractors.py b/test/test_extractors.py index f0c0491a..40ab8abc 100644 --- a/test/test_extractors.py +++ b/test/test_extractors.py @@ -58,7 +58,7 @@ skip = [ "exhentai", "kissmanga", "mangafox", "dynastyscans", "nijie", "archivedmoe", "archiveofsins", "thebarchive", # temporary issues - "imgtrex", # 504 + "mangapark", ] # enable selective testing for direct calls if __name__ == '__main__' and len(sys.argv) > 1: