♻️ Modularized downloader

This commit is contained in:
Nikhil Badyal
2023-07-02 17:51:26 +05:30
parent ad973926aa
commit 711e2d8c3c
10 changed files with 412 additions and 346 deletions
+42
View File
@@ -0,0 +1,42 @@
"""APK SOS Downloader Class."""
from loguru import logger
from selectolax.lexbor import LexborHTMLParser
from src.downloader.download import Downloader
from src.utils import AppNotFound
class ApkSos(Downloader):
"""Files downloader."""
def extract_download_link(self, page: str, app: str) -> None:
"""Function to extract the download link from apkmirror html page.
:param page: Url of the page
:param app: Name of the app
"""
parser = LexborHTMLParser(self.config.session.get(page).text)
download_url = parser.css_first(
r"body > div > div > div > div > div.col-sm-12.col-md-8 > div.card.fluid.\.idma > "
"div.section.row > div.col-sm-12.col-md-8.text-center > p > a"
).attributes["href"]
self._download(download_url, f"{app}.apk")
logger.debug(f"Downloaded {app} apk from apk_combo_downloader in rt")
def latest_version(self, app: str) -> None:
"""Function to download whatever the latest version of app from
apkmirror.
:param app: Name of the application
:return: Version of downloaded apk
"""
package_name = None
for package, app_tuple in self.patcher.revanced_app_ids.items():
if app_tuple[0] == app:
package_name = package
if not package_name:
logger.info("Unable to download from apkcombo")
raise AppNotFound()
download_url = f"https://apksos.com/download-app/{package_name}"
self.extract_download_link(download_url, app)