🎨 Moved apk sources out of config. (#294)

This commit is contained in:
Nikhil Badyal
2023-08-21 13:30:36 +05:30
committed by GitHub
parent e316a1a184
commit 85c68547d6
8 changed files with 93 additions and 77 deletions
+17 -11
View File
@@ -7,6 +7,7 @@ from loguru import logger
from scripts.status_check import headers
from src.downloader.download import Downloader
from src.downloader.sources import APK_MIRROR_BASE_URL, apk_sources
from src.exceptions import APKMirrorAPKDownloadFailure
from src.utils import bs4_parser
@@ -23,7 +24,7 @@ class ApkMirror(Downloader):
"href"
):
return self._download(
self.config.apk_mirror + possible_link["href"], f"{app}.apk"
APK_MIRROR_BASE_URL + possible_link["href"], f"{app}.apk"
)
raise APKMirrorAPKDownloadFailure(
f"Unable to extract force download for {app}", url=link
@@ -48,7 +49,7 @@ class ApkMirror(Downloader):
None,
):
self._extract_force_download_link(
self.config.apk_mirror + final_download_link, app
APK_MIRROR_BASE_URL + final_download_link, app
)
else:
raise APKMirrorAPKDownloadFailure(
@@ -68,7 +69,9 @@ class ApkMirror(Downloader):
if row.find(class_="accent_color"):
apk_type = row.find(class_="apkm-badge").get_text()
if apk_type == "APK" and (
"arm64-v8a" in row.text.strip() or "universal" in row.text.strip()
"arm64-v8a" in row.text.strip()
or "universal" in row.text.strip()
or "noarch" in row.text.strip()
):
sub_url = row.find(class_="accent_color")["href"]
break
@@ -76,12 +79,12 @@ class ApkMirror(Downloader):
raise APKMirrorAPKDownloadFailure(
"Unable to extract download page", url=main_page
)
return f"{self.config.apk_mirror}{sub_url}"
return f"{APK_MIRROR_BASE_URL}{sub_url}"
@staticmethod
def _extracted_search_div(url: str, search_class: str) -> Tag:
"""Extract search div."""
r = requests.get(url, headers=headers)
r = requests.get(url, headers=headers, timeout=10)
if r.status_code != 200:
raise APKMirrorAPKDownloadFailure(
f"Unable to connect with {url} on ApkMirror. Are you blocked by APKMirror or abused apkmirror "
@@ -101,9 +104,9 @@ class ApkMirror(Downloader):
"""
if not main_page:
version = version.replace(".", "-")
main_page = (
f"{self.config.apk_mirror_version_urls.get(app)}-{version}-release/"
)
apk_main_page = apk_sources[app]
version_page = apk_main_page + apk_main_page.split("/")[-2]
main_page = f"{version_page}-{version}-release/"
download_page = self.get_download_page(main_page)
self.extract_download_link(download_page, app)
@@ -115,14 +118,17 @@ class ApkMirror(Downloader):
:return: Version of downloaded apk
"""
app_main_page = self.config.apk_mirror_urls[app]
app_main_page = apk_sources[app]
versions_div = self._extracted_search_div(
app_main_page, "listWidget p-relative"
)
app_rows = versions_div.find_all(class_="appRow")
version_urls = [
app_row.find(class_="downloadLink")["href"] for app_row in app_rows
app_row.find(class_="downloadLink")["href"]
for app_row in app_rows
if "beta" not in app_row.find(class_="appRowTitle").get_text().lower()
and "alpha" not in app_row.find(class_="appRowTitle").get_text().lower()
]
return self.specific_version(
app, "latest", self.config.apk_mirror + max(version_urls)
app, "latest", APK_MIRROR_BASE_URL + max(version_urls)
)
+3 -2
View File
@@ -4,6 +4,7 @@ from typing import Any
from loguru import logger
from src.downloader.download import Downloader
from src.downloader.sources import apk_sources
from src.patches import Patches
@@ -18,6 +19,6 @@ class ApkPure(Downloader):
:return: Version of downloaded apk
"""
package_name = Patches.get_package_name(app)
download_url = f"https://d.apkpure.com/b/APK/{package_name}?version=latest"
download_url = apk_sources[app].format(package_name)
self._download(download_url, f"{app}.apk")
logger.debug(f"Downloaded {app} apk from apk_pure_downloader in rt")
logger.debug(f"Downloaded {app} apk from apk_pure_downloader")
+2 -1
View File
@@ -6,6 +6,7 @@ from bs4 import BeautifulSoup
from scripts.status_check import headers
from src.downloader.download import Downloader
from src.downloader.sources import apk_sources
from src.exceptions import APKSosAPKDownloadFailure
from src.utils import bs4_parser
@@ -36,5 +37,5 @@ class ApkSos(Downloader):
:return: Version of downloaded apk
"""
package_name = self.patcher.get_package_name(app)
download_url = f"https://apksos.com/download-app/{package_name}"
download_url = apk_sources[app].format(package_name)
self.extract_download_link(download_url, app)
+14 -5
View File
@@ -5,7 +5,15 @@ from src.downloader.apkpure import ApkPure
from src.downloader.apksos import ApkSos
from src.downloader.download import Downloader
from src.downloader.github import Github
from src.downloader.sources import (
APK_MIRROR_BASE_URL,
APK_PURE_URL,
APK_SOS_URL,
GITHUB_BASE_URL,
apk_sources,
)
from src.downloader.uptodown import UptoDown
from src.exceptions import DownloadFailure
from src.patches import Patches
@@ -24,13 +32,14 @@ class DownloaderFactory(object):
patcher : Patcher
config : Config
"""
if app in {"patches", "microg"}:
if apk_sources[app].startswith(GITHUB_BASE_URL):
return Github(patcher, config)
if app in config.apk_pure:
if apk_sources[app].startswith(APK_PURE_URL):
return ApkPure(patcher, config)
elif app in config.apk_sos:
elif apk_sources[app].startswith(APK_SOS_URL):
return ApkSos(patcher, config)
elif app in config.upto_down:
elif apk_sources[app].endswith("en.uptodown.com/android"):
return UptoDown(patcher, config)
else:
elif apk_sources[app].startswith(APK_MIRROR_BASE_URL):
return ApkMirror(patcher, config)
raise DownloadFailure(f"No download factory found for {app}")
+47
View File
@@ -0,0 +1,47 @@
APK_MIRROR_BASE_URL = "https://www.apkmirror.com"
APK_MIRROR_BASE_APK_URL = f"{APK_MIRROR_BASE_URL}/apk"
UPTODOWN_BASE_URL = "https://{}.en.uptodown.com/android"
APK_PURE_URL = "https://d.apkpure.com/b/APK/{}?version=latest"
APK_SOS_URL = "https://apksos.com/download-app/{}"
GITHUB_BASE_URL = "https://github.com"
apk_sources = {
"reddit": f"{APK_MIRROR_BASE_APK_URL}/redditinc/reddit/",
"twitter": f"{APK_MIRROR_BASE_APK_URL}/x-corp/twitter/",
"tiktok": f"{APK_MIRROR_BASE_APK_URL}/tiktok-pte-ltd/tik-tok-including-musical-ly/",
"warnwetter": f"{APK_MIRROR_BASE_APK_URL}/deutscher-wetterdienst/warnwetter/",
"youtube": f"{APK_MIRROR_BASE_APK_URL}/google-inc/youtube/",
"youtube_music": f"{APK_MIRROR_BASE_APK_URL}/google-inc/youtube-music/",
"ticktick": f"{APK_MIRROR_BASE_APK_URL}/appest-inc/ticktick-to-do-list-with-reminder-day-planner/",
"icon_pack_studio": f"{APK_MIRROR_BASE_APK_URL}/smart-launcher-team/icon-pack-studio/",
"windy": f"{APK_MIRROR_BASE_APK_URL}/windy-weather-world-inc/windy-wind-weather-forecast/",
"tasker": f"{APK_MIRROR_BASE_APK_URL}/joaomgcd/tasker-crafty-apps-eu/",
"vsco": f"{APK_MIRROR_BASE_APK_URL}/vsco/vsco-cam/",
"nova_launcher": f"{APK_MIRROR_BASE_APK_URL}/teslacoil-software/nova-launcher/",
"netguard": f"{APK_MIRROR_BASE_APK_URL}/marcel-bokhorst/netguard-no-root-firewall/",
"instagram": f"{APK_MIRROR_BASE_APK_URL}/instagram/instagram-instagram/",
"inshorts": f"{APK_MIRROR_BASE_APK_URL}/inshorts-formerly-news-in-shorts/",
"messenger": f"{APK_MIRROR_BASE_APK_URL}/facebook-2/messenger/",
"trakt": f"{APK_MIRROR_BASE_APK_URL}/trakt/trakt/",
"candyvpn": f"{APK_MIRROR_BASE_APK_URL}/liondev-io/candylink-vpn/",
"sonyheadphone": f"{APK_MIRROR_BASE_APK_URL}/sony-corporation/sony-headphones-connect/",
"boost": f"{APK_MIRROR_BASE_APK_URL}/ruben-mayayo/boost-for-reddit/",
"rif": f"{APK_MIRROR_BASE_APK_URL}/talklittle/reddit-is-fun/",
"sync": f"{APK_MIRROR_BASE_APK_URL}/red-apps-ltd/sync-for-reddit/",
"infinity": f"{APK_MIRROR_BASE_APK_URL}/docile-alligator/infinity-for-reddit/",
"slide": f"{APK_MIRROR_BASE_APK_URL}/haptic-apps/slide-for-reddit/",
"bacon": f"{APK_MIRROR_BASE_APK_URL}/onelouder-apps/baconreader-for-reddit/",
"pixiv": f"{APK_MIRROR_BASE_APK_URL}/pixiv-inc/pixiv/",
"spotify": UPTODOWN_BASE_URL.format("spotify"),
"nyx-music-player": UPTODOWN_BASE_URL.format("nyx-music-player"),
"my-expenses": UPTODOWN_BASE_URL.format("my-expenses"),
"backdrops": UPTODOWN_BASE_URL.format("backdrops"),
"twitch": UPTODOWN_BASE_URL.format("twitch"),
"irplus": UPTODOWN_BASE_URL.format("irplus"),
"meme-generator-free": UPTODOWN_BASE_URL.format("meme-generator-free"),
"yuka": UPTODOWN_BASE_URL.format("yuka"),
"relay": UPTODOWN_BASE_URL.format("relay"),
"grecorder": UPTODOWN_BASE_URL.format("opnemer"),
"hex-editor": APK_PURE_URL,
"androidtwelvewidgets": APK_PURE_URL,
"expensemanager": APK_SOS_URL,
}
+3 -6
View File
@@ -7,6 +7,7 @@ from loguru import logger
from scripts.status_check import headers
from src.downloader.download import Downloader
from src.downloader.sources import apk_sources
from src.exceptions import UptoDownAPKDownloadFailure
from src.utils import bs4_parser
@@ -34,9 +35,7 @@ class UptoDown(Downloader):
: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"
)
url = f"{apk_sources[app]}/versions"
html = self.config.session.get(url).text
soup = BeautifulSoup(html, bs4_parser)
versions_list = soup.find("section", {"id": "versions"})
@@ -54,7 +53,5 @@ class UptoDown(Downloader):
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"
)
page = f"{apk_sources[app]}/download"
self.extract_download_link(page, app)