[xenforo] fix/improve 'bb*Wrapper' extraction (#8868)

This commit is contained in:
Mike Fährmann
2026-01-12 20:48:14 +01:00
parent 200ad21cbd
commit f1fd83e87e
2 changed files with 40 additions and 12 deletions

View File

@@ -18,7 +18,7 @@ class XenforoExtractor(BaseExtractor):
basecategory = "xenforo"
directory_fmt = ("{category}", "{thread[section]}",
"{thread[title]} ({thread[id]})")
filename_fmt = "{post[id]}_{num:>02}_{id}_{filename}.{extension}"
filename_fmt = "{post[id]}_{num:>02}{id:?_//}_{filename}.{extension}"
archive_fmt = "{post[id]}/{type[0]}{id}_{filename}"
def __init__(self, match):
@@ -34,8 +34,8 @@ class XenforoExtractor(BaseExtractor):
r'<video (.*?\ssrc="[^"]+".*?)</video>'
r'|<a [^>]*?href="[^"]*?'
r'(/(?:index\.php\?)?attachments/[^"]+".*?)</a>'
r'|<div [^>]*?data-src="[^"]*?'
r'(/(?:index\.php\?)attachments/[^"]+".*?)/>'
r'|<div class="bb(?:Image|Media)Wrapper[^>]*?'
r'data-src="([^"]+".*?) />'
r'|(?:<a [^>]*?href="|<iframe [^>]*?src="|'
r'''onclick="loadMedia\(this, ')([^"']+)'''
r')'
@@ -55,7 +55,7 @@ class XenforoExtractor(BaseExtractor):
data["_http_expected_status"] = (403,)
data["_http_validate"] = self._validate
data["num"] = data["num_internal"] = data["num_external"] = 0
for video, inl1, inl2, ext in urls:
for video, inl, bb, ext in urls:
if ext:
data["num"] += 1
data["num_external"] += 1
@@ -79,16 +79,17 @@ class XenforoExtractor(BaseExtractor):
url = root_media + url
yield Message.Url, url, data
elif (inline := inl1 or inl2):
elif (inline := bb or inl):
path = inline[:inline.find('"')]
name, _, id = path[path.rfind("/", 0, -1):].strip(
"/").rpartition(".")
if id == id_last:
id_last = None
continue
else:
id_last = id
data["id"] = text.parse_int(id)
data["id"] = id = text.parse_int(id)
if id:
if id == id_last:
id_last = None
continue
else:
id_last = id
if alt := text.extr(inline, 'alt="', '"'):
text.nameext_from_name(alt, data)
if not data["extension"]:
@@ -99,7 +100,9 @@ class XenforoExtractor(BaseExtractor):
data["num"] += 1
data["num_internal"] += 1
data["type"] = "inline"
yield Message.Url, self.root + path, data
url = self.root + path if path[0] == "/" else path
yield Message.Url, url, data
def items_media(self, path, pnum):
self.root_media = self.config_instance("root-media") or self.root