summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/cyberfile.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/cyberfile.py')
-rw-r--r--gallery_dl/extractor/cyberfile.py58
1 files changed, 49 insertions, 9 deletions
diff --git a/gallery_dl/extractor/cyberfile.py b/gallery_dl/extractor/cyberfile.py
index 2ea81d6..e8c0061 100644
--- a/gallery_dl/extractor/cyberfile.py
+++ b/gallery_dl/extractor/cyberfile.py
@@ -56,7 +56,9 @@ class CyberfileFolderExtractor(CyberfileExtractor):
url = f"{self.root}/folder/{folder_hash}"
folder_num = text.extr(self.request(url).text, "ages('folder', '", "'")
- extract_urls = text.re(r'dtfullurl="([^"]+)').findall
+ extract_folders = text.re(r'sharing-url="([^"]+)').findall
+ extract_files = text.re(r'dtfullurl="([^"]+)').findall
+ recursive = self.config("recursive", True)
perpage = 600
data = {
@@ -67,25 +69,63 @@ class CyberfileFolderExtractor(CyberfileExtractor):
"filterOrderBy": "",
}
resp = self.request_api("/account/ajax/load_files", data)
+ html = resp["html"]
folder = {
- "_extractor" : CyberfileFileExtractor,
"folder_hash": folder_hash,
"folder_num" : text.parse_int(folder_num),
"folder" : resp["page_title"],
}
while True:
- urls = extract_urls(resp["html"])
- for url in urls:
- yield Message.Queue, url, folder
-
- if len(urls) < perpage:
+ folders = extract_folders(html)
+ if recursive and folders:
+ folder["_extractor"] = CyberfileFolderExtractor
+ for url in folders:
+ yield Message.Queue, url, folder
+
+ if files := extract_files(html):
+ folder["_extractor"] = CyberfileFileExtractor
+ for url in files:
+ yield Message.Queue, url, folder
+
+ if len(folders) + len(files) < perpage:
return
data["pageStart"] += 1
resp = self.request_api("/account/ajax/load_files", data)
+class CyberfileSharedExtractor(CyberfileExtractor):
+ subcategory = "shared"
+ pattern = rf"{BASE_PATTERN}/shared/([a-zA-Z0-9]+)"
+ example = "https://cyberfile.me/shared/AbCdEfGhIjK"
+
+ def items(self):
+ # get 'filehosting' cookie
+ url = f"{self.root}/shared/{self.groups[0]}"
+ self.request(url, method="HEAD")
+
+ data = {
+ "pageType" : "nonaccountshared",
+ "nodeId" : "",
+ "pageStart": "1",
+ "perPage" : "500",
+ "filterOrderBy": "",
+ }
+ resp = self.request_api("/account/ajax/load_files", data)
+
+ html = resp["html"]
+ pos = html.find("<!-- /.navbar-collapse -->") + 26
+
+ data = {"_extractor": CyberfileFolderExtractor}
+ for url in text.extract_iter(html, 'sharing-url="', '"', pos):
+ yield Message.Queue, url, data
+
+ data = {"_extractor": CyberfileFileExtractor}
+ for url in text.extract_iter(html, 'dtfullurl="', '"', pos):
+ yield Message.Queue, url, data
+
+
class CyberfileFileExtractor(CyberfileExtractor):
subcategory = "file"
directory_fmt = ("{category}", "{uploader}", "{folder}")
@@ -113,7 +153,7 @@ class CyberfileFileExtractor(CyberfileExtractor):
"Filesize:", "</tr>"))[:-1]),
"tags" : text.split_html(extr(
"Keywords:", "</tr>")),
- "date" : text.parse_datetime(text.remove_html(extr(
+ "date" : self.parse_datetime(text.remove_html(extr(
"Uploaded:", "</tr>")), "%d/%m/%Y %H:%M:%S"),
"permissions": text.remove_html(extr(
"Permissions:", "</tr>")).split(" &amp; "),
@@ -121,5 +161,5 @@ class CyberfileFileExtractor(CyberfileExtractor):
file["file_url"] = url = extr("openUrl('", "'")
text.nameext_from_url(file["name"] or url, file)
- yield Message.Directory, file
+ yield Message.Directory, "", file
yield Message.Url, url, file