@@ -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)}
|
||||
|
||||
Reference in New Issue
Block a user