From e5b7f4789b8ef19ba891f66345bc698a095e531d Mon Sep 17 00:00:00 2001 From: j-hc Date: Tue, 14 Feb 2023 16:22:16 +0300 Subject: [PATCH] update apkmirror parsing --- build-termux.sh | 13 +++++++++---- config.toml | 1 + utils.sh | 46 +++++++++++++++++++++++++++++++--------------- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/build-termux.sh b/build-termux.sh index 4768062..7c9a6f8 100755 --- a/build-termux.sh +++ b/build-termux.sh @@ -24,7 +24,7 @@ yes "" | pkg update -y && pkg install -y git wget openssl jq openjdk-17 zip pr "Cloning revanced-magisk-module repository..." if [ -d revanced-magisk-module ]; then - if ask "Directory revanced-magisk-module already exists. Do you want to clone the repo again? [y/n]"; then + if ask "Directory revanced-magisk-module already exists. Do you want to clone the repo again and overwrite your config? [y/n]"; then rm -rf revanced-magisk-module git clone https://github.com/j-hc/revanced-magisk-module --recurse --depth 1 sed -i '/^enabled.*/d; /^\[.*\]/a enabled = false' revanced-magisk-module/config.toml @@ -33,7 +33,10 @@ else git clone https://github.com/j-hc/revanced-magisk-module --recurse --depth 1 sed -i '/^enabled.*/d; /^\[.*\]/a enabled = false' revanced-magisk-module/config.toml fi -cd revanced-magisk-module + +if [ ! -f build.sh ]; then + cd revanced-magisk-module +fi if ask "Do you want to open the config.toml for customizations? [y/n]"; then nano config.toml @@ -47,8 +50,10 @@ fi cd build pr "Ask for storage permission" -until ls /sdcard >/dev/null 2>&1; do +until yes | termux-setup-storage >/dev/null 2>&1 + ls /sdcard >/dev/null 2>&1 +do sleep 1 done @@ -59,7 +64,7 @@ for op in *; do cp -f "${PWD}/${op}" ~/storage/downloads/revanced-magisk-module/"${op}" done -pr "Outputs are available in /sdcard/Download folder" +pr "Outputs are available in /sdcard/Download/revanced-magisk-module folder" am start -a android.intent.action.VIEW -d file:///sdcard/Download/revanced-magisk-module -t resource/folder sleep 2 am start -a android.intent.action.VIEW -d file:///sdcard/Download/revanced-magisk-module -t resource/folder diff --git a/config.toml b/config.toml index 9f37b54..b539edd 100755 --- a/config.toml +++ b/config.toml @@ -65,6 +65,7 @@ uptodown-dlurl = "https://spotify.en.uptodown.com/android" [Citra] enabled = false apkmirror-dlurl = "https://www.apkmirror.com/apk/citra-emulator/citra-emulator/" +arch = "arm64-v8a" [Backdrops] enabled = false diff --git a/utils.sh b/utils.sh index 1aff307..e02c8b6 100755 --- a/utils.sh +++ b/utils.sh @@ -82,6 +82,13 @@ get_prebuilts() { mkdir -p ${MODULE_TEMPLATE_DIR}/bin/arm64 ${MODULE_TEMPLATE_DIR}/bin/arm dl_if_dne "${MODULE_TEMPLATE_DIR}/bin/arm64/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-arm64-v8a" dl_if_dne "${MODULE_TEMPLATE_DIR}/bin/arm/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-armeabi-v7a" + + HTMLQ="${TEMP_DIR}/htmlq" + if [ ! -f "${TEMP_DIR}/htmlq" ]; then + req "https://github.com/mgdm/htmlq/releases/latest/download/htmlq-x86_64-linux.tar.gz" "${TEMP_DIR}/htmlq.tar.gz" + tar -xf "${TEMP_DIR}/htmlq.tar.gz" -C "$TEMP_DIR" + rm "${TEMP_DIR}/htmlq.tar.gz" + fi } abort() { echo >&2 -e "\033[0;31mABORT: $1\033[0m" && exit 1; } @@ -99,6 +106,7 @@ set_prebuilts() { log "Patches: ${RV_PATCHES_JAR#"$PREBUILTS_DIR/"}" RV_PATCHES_JSON=$(find "$PREBUILTS_DIR" -maxdepth 1 -name "patches-*.json" | tail -n1) [ "$RV_PATCHES_JSON" ] || abort "patches.json not found" + HTMLQ="${TEMP_DIR}/htmlq" } req() { wget -nv -O "$2" --header="$WGET_HEADER" "$1"; } @@ -148,17 +156,24 @@ dl_if_dne() { # -------------------- apkmirror -------------------- dl_apkmirror() { - local url=$1 version=${2// /-} regexp=$3 output=$4 - if [ "${DRYRUN:-}" = true ]; then - echo "#" >"$output" - return - fi - local resp + local url=$1 version=${2// /-} output=$3 arch=$4 + local resp node app_table archalt dlurl="" + [ "$arch" = universal ] && archalt="arm64-v8a + armeabi-v7a" || archalt=$arch url="${url}/${url##*/}-${version//./-}-release/" resp=$(req "$url" -) || return 1 - url="https://www.apkmirror.com$(echo "$resp" | tr '\n' ' ' | sed -n "s/href=\"/@/g; s;.*${regexp}.*;\1;p")" - [ "$url" != https://www.apkmirror.com ] || return 1 - url="https://www.apkmirror.com$(req "$url" - | tr '\n' ' ' | sed -n 's;.*href="\(.*key=[^"]*\)">.*;\1;p')" + for ((n = 2; n < 50; n++)); do + node=$($HTMLQ "div.table-row:nth-child($n)" -r "span.signature:nth-child(n)" <<<"$resp") + if [ -z "$node" ]; then break; fi + app_table=$($HTMLQ --text --ignore-whitespace <<<"$node") + if [[ "$(sed -n 8p <<<"$app_table")" = nodpi && + "$(sed -n 3p <<<"$app_table")" = APK && + ("$(sed -n 6p <<<"$app_table")" = "$arch" || "$(sed -n 6p <<<"$app_table")" = "$archalt") ]]; then + dlurl=https://www.apkmirror.com$($HTMLQ --attribute href "div:nth-child(1) > a:nth-child(1)" <<<"$node") + break + fi + done + [ -z "$dlurl" ] && return 1 + url="https://www.apkmirror.com$(req "$dlurl" - | tr '\n' ' ' | sed -n 's;.*href="\(.*key=[^"]*\)">.*;\1;p')" url="https://www.apkmirror.com$(req "$url" - | tr '\n' ' ' | sed -n 's;.*href="\(.*key=[^"]*\)">.*;\1;p')" req "$url" "$output" } @@ -186,7 +201,7 @@ get_apkmirror_pkg_name() { req "$1" - | sed -n 's;.*id=\(.*\)" class="accent_col # -------------------- uptodown -------------------- get_uptodown_resp() { req "${1}/versions" -; } -get_uptodown_vers() { sed -n 's;.*version>\(.*\)<\/span>$;\1;p' <<<"$1"; } +get_uptodown_vers() { sed -n 's;.*version">\(.*\)$;\1;p' <<<"$1"; } dl_uptodown() { local uptwod_resp=$1 version=$2 output=$3 local url @@ -276,15 +291,16 @@ build_rv() { if [ ! -f "$stock_apk" ]; then if [ "$dl_from" = apkmirror ]; then pr "Downloading '${app_name}' from APKMirror" + local apkm_arch if [ "$arch" = "all" ]; then - apkmirror_regex="APK[^@]*@\([^#]*\)" + apkm_arch="universal" elif [ "$arch" = "arm64-v8a" ]; then - apkmirror_regex='arm64-v8a[^@]*@\([^"]*\)' + apkm_arch="arm64-v8a" elif [ "$arch" = "arm-v7a" ]; then - apkmirror_regex='armeabi-v7a[^@]*@\([^"]*\)' + apkm_arch="armeabi-v7a" fi - if ! dl_apkmirror "${args[apkmirror_dlurl]}" "$version" "$apkmirror_regex" "$stock_apk"; then - abort "ERROR: Could not find any release of '${app_name}' with version '${version}' from APKMirror" + if ! dl_apkmirror "${args[apkmirror_dlurl]}" "$version" "$stock_apk" "$apkm_arch"; then + abort "ERROR: Could not find any release of '${app_name}' with version '${version}' and arch '${apkm_arch}' from APKMirror" fi elif [ "$dl_from" = uptodown ]; then pr "Downloading '${app_name}' from Uptodown"