[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

View File

@@ -214,6 +214,31 @@ __tests__ = (
"#results" : "https://redgifs.com/ifr/unusedsubmissivemullet",
},
{
"#url" : "https://simpcity.cr/threads/snowball7766.1490941/post-38256229",
"#comment" : "bbImageWrapper blocks (#8868)",
"#category": ("xenforo", "simpcity", "post"),
"#class" : xenforo.XenforoPostExtractor,
"#auth" : True,
"#results" : (
"https://www.instagram.com/snowball7766/",
"https://www.threads.com/@snowball7766",
"https://www.facebook.com/ball.snow.7773#",
"https://simp6.selti-delivery.ru/images3/82489639_3012191048813651_5086244093198073856_o94d88f27678869a9.jpg",
"https://simp6.selti-delivery.ru/images3/81822451_3012190595480363_7751669220496113664_od8fd937464a00f73.jpg",
"https://simp6.selti-delivery.ru/images3/81459259_3012190838813672_781773786918682624_o880c1a4f0aa402c2.jpg",
"https://simp6.selti-delivery.ru/images3/81936276_3012190545480368_1653404646221283328_oab69119416354f10.jpg",
"https://simp6.selti-delivery.ru/images3/82375666_3012191015480321_6208103187434438656_of41cd9f33c2f5d2b.jpg",
"https://simp6.selti-delivery.ru/images3/82453137_3012190802147009_1828394700625674240_o9f4ee63fffbfc3de.jpg",
"https://simp6.selti-delivery.ru/images3/82710873_3012190752147014_2275240512531202048_o31a8e0ff56b05fa6.jpg",
"https://simp6.selti-delivery.ru/images3/82919150_3012190608813695_447262977784020992_o8105006061c5fd32.jpg",
"https://simp6.selti-delivery.ru/images3/49013049333_eed56c4a94_ob0809a5e8b720026.jpg",
"https://simp6.selti-delivery.ru/images3/49013783762_6143932191_o76c074c41effc49f.jpg",
"https://simp6.selti-delivery.ru/images3/49013792187_8a9f1066e6_o9359dcb86e42dba6.jpg",
"https://simp6.selti-delivery.ru/images3/52044873_2357680964251830_3177806178725920768_n3f60e7febf7ed056.jpg",
),
},
{
"#url" : "https://simpcity.cr/threads/alua-tatakai.89490/",
"#category": ("xenforo", "simpcity", "thread"),