aboutsummaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/ao3.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/ao3.py')
-rw-r--r--gallery_dl/extractor/ao3.py19
1 files changed, 7 insertions, 12 deletions
diff --git a/gallery_dl/extractor/ao3.py b/gallery_dl/extractor/ao3.py
index d3ab846..2652acb 100644
--- a/gallery_dl/extractor/ao3.py
+++ b/gallery_dl/extractor/ao3.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright 2024 Mike Fährmann
+# Copyright 2024-2025 Mike Fährmann
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
@@ -8,7 +8,7 @@
"""Extractors for https://archiveofourown.org/"""
-from .common import Extractor, Message
+from .common import Extractor, Message, Dispatch
from .. import text, util, exception
from ..cache import cache
@@ -135,7 +135,7 @@ class Ao3WorkExtractor(Ao3Extractor):
self.login()
work_id = self.groups[0]
- url = "{}/works/{}".format(self.root, work_id)
+ url = f"{self.root}/works/{work_id}"
response = self.request(url, notfound="work")
if response.url.endswith("/users/login?restricted=true"):
@@ -144,7 +144,7 @@ class Ao3WorkExtractor(Ao3Extractor):
page = response.text
if len(page) < 20000 and \
'<h2 class="landmark heading">Adult Content Warning</' in page:
- raise exception.StopExtraction("Adult Content")
+ raise exception.AbortExtraction("Adult Content")
extr = text.extract_from(page)
@@ -205,8 +205,7 @@ class Ao3WorkExtractor(Ao3Extractor):
}
data["language"] = util.code_to_language(data["lang"])
- series = data["series"]
- if series:
+ if series := data["series"]:
extr = text.extract_from(series)
data["series"] = {
"prev" : extr(' class="previous" href="/works/', '"'),
@@ -249,18 +248,14 @@ class Ao3SearchExtractor(Ao3Extractor):
example = "https://archiveofourown.org/works/search?work_search[query]=air"
-class Ao3UserExtractor(Ao3Extractor):
+class Ao3UserExtractor(Dispatch, Ao3Extractor):
"""Extractor for an AO3 user profile"""
- subcategory = "user"
pattern = (BASE_PATTERN + r"/users/([^/?#]+(?:/pseuds/[^/?#]+)?)"
r"(?:/profile)?/?(?:$|\?|#)")
example = "https://archiveofourown.org/users/USER"
- def initialize(self):
- pass
-
def items(self):
- base = "{}/users/{}/".format(self.root, self.groups[0])
+ base = f"{self.root}/users/{self.groups[0]}/"
return self._dispatch_extractors((
(Ao3UserWorksExtractor , base + "works"),
(Ao3UserSeriesExtractor , base + "series"),