# -*- 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 = f"{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 = f"{self.root}/ajax/folder_password_process" data_pw = { "folderPassword": self._get_auth_info(password=True)[1], "folderId": text.extr( resp["html"], '', "")) 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" : text.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