diff --git a/docs/supportedsites.md b/docs/supportedsites.md
index e60152dd..4271fd8b 100644
--- a/docs/supportedsites.md
+++ b/docs/supportedsites.md
@@ -220,7 +220,7 @@ Consider all listed sites to potentially be NSFW.
| CyberFile |
https://cyberfile.me/ |
- Files, Folders |
+ Files, Folders, Shares |
|
diff --git a/gallery_dl/extractor/cyberfile.py b/gallery_dl/extractor/cyberfile.py
index bdcc044d..635f296b 100644
--- a/gallery_dl/extractor/cyberfile.py
+++ b/gallery_dl/extractor/cyberfile.py
@@ -86,6 +86,37 @@ class CyberfileFolderExtractor(CyberfileExtractor):
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("") + 26
+
+ data = {"_extractor": CyberfileFolderExtractor}
+ for folder in text.extract_iter(html, 'sharing-url="', '"', pos):
+ yield Message.Queue, folder, data
+
+ data = {"_extractor": CyberfileFileExtractor}
+ for file in text.extract_iter(html, 'dtfullurl="', '"', pos):
+ yield Message.Queue, file, data
+
+
class CyberfileFileExtractor(CyberfileExtractor):
subcategory = "file"
directory_fmt = ("{category}", "{uploader}", "{folder}")
diff --git a/scripts/supportedsites.py b/scripts/supportedsites.py
index b94257d5..3e42ad9e 100755
--- a/scripts/supportedsites.py
+++ b/scripts/supportedsites.py
@@ -265,6 +265,9 @@ SUBCATEGORY_MAP = {
"discord-server": "",
"posts" : "",
},
+ "cyberfile": {
+ "shared": "Shares",
+ },
"Danbooru": {
"favgroup": "Favorite Groups",
"random" : "Random Posts",
diff --git a/test/results/cyberfile.py b/test/results/cyberfile.py
index 68d7aa56..08b9186e 100644
--- a/test/results/cyberfile.py
+++ b/test/results/cyberfile.py
@@ -104,4 +104,24 @@ __tests__ = (
"#exception": exception.AuthorizationError,
},
+{
+ "#url" : "https://cyberfile.me/shared/tao35avvfc",
+ "#class" : cyberfile.CyberfileSharedExtractor,
+},
+
+{
+ "#url" : "https://cyberfile.me/shared/l7zoinbctg",
+ "#class" : cyberfile.CyberfileSharedExtractor,
+ "#results" : (
+ "https://cyberfile.me/gb3s",
+ "https://cyberfile.me/gb8m"
+ ),
+},
+
+{
+ "#url" : "https://cyberfile.me/shared/wqpd9n0si5",
+ "#class" : cyberfile.CyberfileSharedExtractor,
+ "#results" : "https://cyberfile.me/folder/9f611ebab76f363e4b818397c7828a73/CF_DSPRMTRS",
+},
+
)