@@ -38,36 +38,37 @@ class BunkrAlbumExtractor(LolisafeAlbumExtractor):
|
||||
page, "<h1", "</div>").partition(">")[2])
|
||||
count, _, size = info[1].split(None, 2)
|
||||
|
||||
# files
|
||||
cdn = None
|
||||
files = []
|
||||
append = files.append
|
||||
|
||||
pos = page.index('class="grid-images')
|
||||
for url in text.extract_iter(page, '<a href="', '"', pos):
|
||||
if url.startswith("/"):
|
||||
if not cdn:
|
||||
# fetch cdn root from download page
|
||||
durl = "{}/d/{}".format(self.root, url[3:])
|
||||
cdn = text.extr(self.request(
|
||||
durl).text, 'link.href = "', '"')
|
||||
cdn = cdn[:cdn.index("/", 8)]
|
||||
url = cdn + url[2:]
|
||||
urls = list(text.extract_iter(page, '<a href="', '"', pos))
|
||||
|
||||
url = text.unescape(url)
|
||||
if url.lower().endswith(CDN_HOSTED_EXTENSIONS):
|
||||
scheme, domain, path, query, fragment = urlsplit(url)
|
||||
if domain in MEDIA_DOMAIN_OVERRIDES:
|
||||
domain = MEDIA_DOMAIN_OVERRIDES[domain]
|
||||
else:
|
||||
domain = domain.replace("cdn", "media-files", 1)
|
||||
url = urlunsplit((scheme, domain, path, query, fragment))
|
||||
append({"file": url})
|
||||
|
||||
return files, {
|
||||
return self._extract_files(urls), {
|
||||
"album_id" : self.album_id,
|
||||
"album_name" : text.unescape(info[0]),
|
||||
"album_size" : size[1:-1],
|
||||
"description": text.unescape(info[2]) if len(info) > 2 else "",
|
||||
"count" : len(files),
|
||||
"count" : len(urls),
|
||||
}
|
||||
|
||||
def _extract_files(self, urls):
|
||||
for url in urls:
|
||||
if url.startswith("/"):
|
||||
try:
|
||||
page = self.request(self.root + text.unescape(url)).text
|
||||
if url[1] == "v":
|
||||
url = text.extr(page, '<source src="', '"')
|
||||
else:
|
||||
url = text.extr(page, '<img src="', '"')
|
||||
except Exception as exc:
|
||||
self.log.error("%s: %s", exc.__class__.__name__, exc)
|
||||
continue
|
||||
|
||||
else:
|
||||
if url.lower().endswith(CDN_HOSTED_EXTENSIONS):
|
||||
scheme, domain, path, query, fragment = urlsplit(url)
|
||||
if domain in MEDIA_DOMAIN_OVERRIDES:
|
||||
domain = MEDIA_DOMAIN_OVERRIDES[domain]
|
||||
else:
|
||||
domain = domain.replace("cdn", "media-files", 1)
|
||||
url = urlunsplit((scheme, domain, path, query, fragment))
|
||||
|
||||
yield {"file": text.unescape(url)}
|
||||
|
||||
@@ -12,7 +12,7 @@ __tests__ = (
|
||||
"#url" : "https://bunkrr.su/a/Lktg9Keq",
|
||||
"#category": ("lolisafe", "bunkr", "album"),
|
||||
"#class" : bunkr.BunkrAlbumExtractor,
|
||||
"#pattern" : r"https://cdn\.bunkr\.ru/test-テスト-\"&>-QjgneIQv\.png",
|
||||
"#urls" : "https://i-burger.bunkr.ru/test-テスト-\"&>-QjgneIQv.png",
|
||||
"#sha1_content": "0c8768055e4e20e7c7259608b67799171b691140",
|
||||
|
||||
"album_id" : "Lktg9Keq",
|
||||
@@ -29,7 +29,7 @@ __tests__ = (
|
||||
"#comment" : "mp4 (#2239)",
|
||||
"#category": ("lolisafe", "bunkr", "album"),
|
||||
"#class" : bunkr.BunkrAlbumExtractor,
|
||||
"#pattern" : r"https://media-files\.bunkr\.ru/_-RnHoW69L\.mp4",
|
||||
"#urls" : "https://burger.bunkr.ru/_-RnHoW69L.mp4",
|
||||
"#sha1_content": "80e61d1dbc5896ae7ef9a28734c747b28b320471",
|
||||
},
|
||||
|
||||
@@ -38,14 +38,17 @@ __tests__ = (
|
||||
"#comment" : "cdn4",
|
||||
"#category": ("lolisafe", "bunkr", "album"),
|
||||
"#class" : bunkr.BunkrAlbumExtractor,
|
||||
"#pattern" : r"https://(cdn|media-files)4\.bunkr\.ru/",
|
||||
"#urls" : (
|
||||
"https://media-files4.bunkr.ru/video-wFO9FtxG.mp4",
|
||||
"https://i4.bunkr.ru/image-sZrQUeOx.jpg",
|
||||
),
|
||||
"#sha1_content": "da29aae371b7adc8c5ef8e6991b66b69823791e8",
|
||||
|
||||
"album_id" : "iXTTc1o2",
|
||||
"album_name" : "test2",
|
||||
"album_size" : "691.1 KB",
|
||||
"count" : 2,
|
||||
"description": "072022",
|
||||
"description": "",
|
||||
"filename" : r"re:video-wFO9FtxG|image-sZrQUeOx",
|
||||
"id" : r"re:wFO9FtxG|sZrQUeOx",
|
||||
"name" : r"re:video|image",
|
||||
@@ -57,8 +60,8 @@ __tests__ = (
|
||||
"#comment" : "cdn12 .ru TLD (#4147)",
|
||||
"#category": ("lolisafe", "bunkr", "album"),
|
||||
"#class" : bunkr.BunkrAlbumExtractor,
|
||||
"#pattern" : r"https://(cdn12.bunkr.ru|media-files12.bunkr.la)/\w+",
|
||||
"#count" : 8,
|
||||
"#pattern" : r"https://(i-)?meatballs.bunkr.ru/\w+",
|
||||
"#count" : 10,
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user