# -*- coding: utf-8 -*- # Copyright 2025 Mike Fährmann # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. """Extractors for https://cyberfile.me/""" from .common import Extractor, Message from .. import text, exception BASE_PATTERN = r"(?:https?://)?(?:www\.)?cyberfile\.me" class CyberfileExtractor(Extractor): """Base class for cyberfile extractors""" category = "cyberfile" root = "https://cyberfile.me" def request_api(self, endpoint, data): url = self.root + endpoint headers = { "X-Requested-With": "XMLHttpRequest", "Origin": self.root, } resp = self.request_json( url, method="POST", headers=headers, data=data) if "albumPasswordModel" in resp.get("javascript", ""): url_pw = self.root + "/ajax/folder_password_process" data_pw = { "folderPassword": self._get_auth_info(password=True)[1], "folderId": text.extr( resp["html"], '") + 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}") pattern = BASE_PATTERN + r"/([a-zA-Z0-9]+)" example = "https://cyberfile.me/AbCdE" def items(self): file_id = self.groups[0] url = f"{self.root}/{file_id}" file_num = text.extr(self.request(url).text, "owFileInformation(", ")") data = {"u": file_num} resp = self.request_api("/account/ajax/file_details", data) extr = text.extract_from(resp["html"]) info = text.split_html(extr('class="text-section">', "")) folder = info[0] if len(info) > 1 else "" file = { "file_id" : file_id, "file_num": text.parse_int(file_num), "name" : resp["page_title"], "folder" : folder, "uploader": info[-1][2:].strip(), "size" : text.parse_bytes(text.remove_html(extr( "Filesize:", ""))[:-1]), "tags" : text.split_html(extr( "Keywords:", "")), "date" : self.parse_datetime(text.remove_html(extr( "Uploaded:", "")), "%d/%m/%Y %H:%M:%S"), "permissions": text.remove_html(extr( "Permissions:", "")).split(" & "), } file["file_url"] = url = extr("openUrl('", "'") text.nameext_from_url(file["name"] or url, file) yield Message.Directory, "", file yield Message.Url, url, file