@@ -38,36 +38,37 @@ class BunkrAlbumExtractor(LolisafeAlbumExtractor):
|
|||||||
page, "<h1", "</div>").partition(">")[2])
|
page, "<h1", "</div>").partition(">")[2])
|
||||||
count, _, size = info[1].split(None, 2)
|
count, _, size = info[1].split(None, 2)
|
||||||
|
|
||||||
# files
|
|
||||||
cdn = None
|
|
||||||
files = []
|
|
||||||
append = files.append
|
|
||||||
|
|
||||||
pos = page.index('class="grid-images')
|
pos = page.index('class="grid-images')
|
||||||
for url in text.extract_iter(page, '<a href="', '"', pos):
|
urls = list(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:]
|
|
||||||
|
|
||||||
url = text.unescape(url)
|
return self._extract_files(urls), {
|
||||||
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, {
|
|
||||||
"album_id" : self.album_id,
|
"album_id" : self.album_id,
|
||||||
"album_name" : text.unescape(info[0]),
|
"album_name" : text.unescape(info[0]),
|
||||||
"album_size" : size[1:-1],
|
"album_size" : size[1:-1],
|
||||||
"description": text.unescape(info[2]) if len(info) > 2 else "",
|
"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",
|
"#url" : "https://bunkrr.su/a/Lktg9Keq",
|
||||||
"#category": ("lolisafe", "bunkr", "album"),
|
"#category": ("lolisafe", "bunkr", "album"),
|
||||||
"#class" : bunkr.BunkrAlbumExtractor,
|
"#class" : bunkr.BunkrAlbumExtractor,
|
||||||
"#pattern" : r"https://cdn\.bunkr\.ru/test-テスト-\"&>-QjgneIQv\.png",
|
"#urls" : "https://i-burger.bunkr.ru/test-テスト-\"&>-QjgneIQv.png",
|
||||||
"#sha1_content": "0c8768055e4e20e7c7259608b67799171b691140",
|
"#sha1_content": "0c8768055e4e20e7c7259608b67799171b691140",
|
||||||
|
|
||||||
"album_id" : "Lktg9Keq",
|
"album_id" : "Lktg9Keq",
|
||||||
@@ -29,7 +29,7 @@ __tests__ = (
|
|||||||
"#comment" : "mp4 (#2239)",
|
"#comment" : "mp4 (#2239)",
|
||||||
"#category": ("lolisafe", "bunkr", "album"),
|
"#category": ("lolisafe", "bunkr", "album"),
|
||||||
"#class" : bunkr.BunkrAlbumExtractor,
|
"#class" : bunkr.BunkrAlbumExtractor,
|
||||||
"#pattern" : r"https://media-files\.bunkr\.ru/_-RnHoW69L\.mp4",
|
"#urls" : "https://burger.bunkr.ru/_-RnHoW69L.mp4",
|
||||||
"#sha1_content": "80e61d1dbc5896ae7ef9a28734c747b28b320471",
|
"#sha1_content": "80e61d1dbc5896ae7ef9a28734c747b28b320471",
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -38,14 +38,17 @@ __tests__ = (
|
|||||||
"#comment" : "cdn4",
|
"#comment" : "cdn4",
|
||||||
"#category": ("lolisafe", "bunkr", "album"),
|
"#category": ("lolisafe", "bunkr", "album"),
|
||||||
"#class" : bunkr.BunkrAlbumExtractor,
|
"#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",
|
"#sha1_content": "da29aae371b7adc8c5ef8e6991b66b69823791e8",
|
||||||
|
|
||||||
"album_id" : "iXTTc1o2",
|
"album_id" : "iXTTc1o2",
|
||||||
"album_name" : "test2",
|
"album_name" : "test2",
|
||||||
"album_size" : "691.1 KB",
|
"album_size" : "691.1 KB",
|
||||||
"count" : 2,
|
"count" : 2,
|
||||||
"description": "072022",
|
"description": "",
|
||||||
"filename" : r"re:video-wFO9FtxG|image-sZrQUeOx",
|
"filename" : r"re:video-wFO9FtxG|image-sZrQUeOx",
|
||||||
"id" : r"re:wFO9FtxG|sZrQUeOx",
|
"id" : r"re:wFO9FtxG|sZrQUeOx",
|
||||||
"name" : r"re:video|image",
|
"name" : r"re:video|image",
|
||||||
@@ -57,8 +60,8 @@ __tests__ = (
|
|||||||
"#comment" : "cdn12 .ru TLD (#4147)",
|
"#comment" : "cdn12 .ru TLD (#4147)",
|
||||||
"#category": ("lolisafe", "bunkr", "album"),
|
"#category": ("lolisafe", "bunkr", "album"),
|
||||||
"#class" : bunkr.BunkrAlbumExtractor,
|
"#class" : bunkr.BunkrAlbumExtractor,
|
||||||
"#pattern" : r"https://(cdn12.bunkr.ru|media-files12.bunkr.la)/\w+",
|
"#pattern" : r"https://(i-)?meatballs.bunkr.ru/\w+",
|
||||||
"#count" : 8,
|
"#count" : 10,
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user