summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/aryion.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/aryion.py')
-rw-r--r--gallery_dl/extractor/aryion.py66
1 files changed, 40 insertions, 26 deletions
diff --git a/gallery_dl/extractor/aryion.py b/gallery_dl/extractor/aryion.py
index 7575de9..04bb146 100644
--- a/gallery_dl/extractor/aryion.py
+++ b/gallery_dl/extractor/aryion.py
@@ -26,9 +26,24 @@ class AryionExtractor(Extractor):
def __init__(self, match):
Extractor.__init__(self, match)
self.user = match.group(1)
- self.offset = 0
+ self.recursive = True
- def posts(self, url):
+ def items(self):
+ for post_id in self.posts():
+ post = self._parse_post(post_id)
+ if post:
+ yield Message.Directory, post
+ yield Message.Url, post["url"], post
+ elif post is False and self.recursive:
+ base = self.root + "/g4/view/"
+ data = {"_extractor": AryionPostExtractor}
+ for post_id in self._pagination(base + post_id):
+ yield Message.Queue, base + post_id, data
+
+ def posts(self):
+ """Yield relevant post IDs"""
+
+ def _pagination(self, url):
while True:
page = self.request(url).text
yield from text.extract_iter(
@@ -39,11 +54,14 @@ class AryionExtractor(Extractor):
return
url = self.root + text.rextract(page, "href='", "'", pos)[0]
- def parse_post(self, post_id):
+ def _parse_post(self, post_id):
url = "{}/g4/data.php?id={}".format(self.root, post_id)
with self.request(url, method="HEAD", fatal=False) as response:
if response.status_code >= 400:
+ self.log.warning(
+ "Unable to fetch post %s ('%s %s')",
+ post_id, response.status_code, response.reason)
return None
headers = response.headers
@@ -106,9 +124,11 @@ class AryionExtractor(Extractor):
class AryionGalleryExtractor(AryionExtractor):
"""Extractor for a user's gallery on eka's portal"""
subcategory = "gallery"
+ categorytransfer = True
pattern = BASE_PATTERN + r"/(?:gallery/|user/|latest.php\?name=)([^/?&#]+)"
test = (
("https://aryion.com/g4/gallery/jameshoward", {
+ "options": (("recursive", False),),
"pattern": r"https://aryion\.com/g4/data\.php\?id=\d+$",
"range": "48-52",
"count": 5,
@@ -117,17 +137,24 @@ class AryionGalleryExtractor(AryionExtractor):
("https://aryion.com/g4/latest.php?name=jameshoward"),
)
+ def __init__(self, match):
+ AryionExtractor.__init__(self, match)
+ self.recursive = self.config("recursive", True)
+ self.offset = 0
+
def skip(self, num):
+ if self.recursive:
+ num = 0
self.offset += num
return num
- def items(self):
- url = "{}/g4/latest.php?name={}".format(self.root, self.user)
- for post_id in util.advance(self.posts(url), self.offset):
- post = self.parse_post(post_id)
- if post:
- yield Message.Directory, post
- yield Message.Url, post["url"], post
+ def posts(self):
+ if self.recursive:
+ url = "{}/g4/gallery/{}".format(self.root, self.user)
+ return self._pagination(url)
+ else:
+ url = "{}/g4/latest.php?name={}".format(self.root, self.user)
+ return util.advance(self._pagination(url), self.offset)
class AryionPostExtractor(AryionExtractor):
@@ -164,19 +191,6 @@ class AryionPostExtractor(AryionExtractor):
}),
)
- def items(self):
- post_id = self.user
- self.user = None
- post = self.parse_post(post_id)
-
- if post:
- yield Message.Directory, post
- yield Message.Url, post["url"], post
-
- elif post is False:
- folder_url = "{}/g4/view/{}".format(self.root, post_id)
- data = {"_extractor": AryionPostExtractor}
-
- for post_id in self.posts(folder_url):
- url = "{}/g4/view/{}".format(self.root, post_id)
- yield Message.Queue, url, data
+ def posts(self):
+ post_id, self.user = self.user, None
+ return (post_id,)