mirror of
https://github.com/sotam0316/docker-py-revanced.git
synced 2026-04-25 03:48:37 +09:00
61 lines
2.4 KiB
Python
61 lines
2.4 KiB
Python
"""Upto Down Downloader."""
|
|
from typing import Any
|
|
|
|
import requests
|
|
from bs4 import BeautifulSoup
|
|
from loguru import logger
|
|
|
|
from scripts.status_check import headers
|
|
from src.downloader.download import Downloader
|
|
from src.exceptions import UptoDownAPKDownloadFailure
|
|
from src.utils import bs4_parser
|
|
|
|
|
|
class UptoDown(Downloader):
|
|
"""Files downloader."""
|
|
|
|
def extract_download_link(self, page: str, app: str) -> None:
|
|
r = requests.get(page, headers=headers, allow_redirects=True)
|
|
soup = BeautifulSoup(r.text, bs4_parser)
|
|
soup = soup.find(id="detail-download-button")
|
|
download_url = soup.get("data-url")
|
|
if not download_url:
|
|
raise UptoDownAPKDownloadFailure(
|
|
f"Unable to download {app} from uptodown.", url=page
|
|
)
|
|
self._download(download_url, f"{app}.apk")
|
|
logger.debug(f"Downloaded {app} apk from upto_down_downloader in rt")
|
|
|
|
def specific_version(self, app: str, version: str) -> None:
|
|
"""Function to download the specified version of app from apkmirror.
|
|
|
|
:param app: Name of the application
|
|
:param version: Version of the application to download
|
|
:return: Version of downloaded apk
|
|
"""
|
|
logger.debug("downloading specified version of app from uptodown.")
|
|
url = (
|
|
f"https://{self.config.upto_down.get(app)}.en.uptodown.com/android/versions"
|
|
)
|
|
html = self.config.session.get(url).text
|
|
soup = BeautifulSoup(html, bs4_parser)
|
|
versions_list = soup.find("section", {"id": "versions"})
|
|
download_url = None
|
|
for version_item in versions_list.find_all("div", {"data-url": True}):
|
|
extracted_version = version_item.find("span", {"class": "version"}).text
|
|
if extracted_version == version:
|
|
download_url = version_item["data-url"]
|
|
break
|
|
if download_url is None:
|
|
raise UptoDownAPKDownloadFailure(
|
|
f"Unable to download {app} from uptodown.", url=url
|
|
)
|
|
self.extract_download_link(download_url, app)
|
|
logger.debug(f"Downloaded {app} apk from upto_down_downloader in rt")
|
|
|
|
def latest_version(self, app: str, **kwargs: Any) -> None:
|
|
page = (
|
|
f"https://{self.config.upto_down.get(app)}.en.uptodown.com/android/download"
|
|
)
|
|
self.extract_download_link(page, app)
|