From c3c0a74bfe7a86c5be9f8fa3a7b6ab4520f76cf6 Mon Sep 17 00:00:00 2001 From: Lev Rusanov <30170278+JDM170@users.noreply.github.com> Date: Thu, 1 Aug 2024 14:41:02 +0700 Subject: [PATCH] Move YouTube downloading to APKMirror Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com> --- .github/workflows/Build.yml | 4 +++ Build.ps1 | 49 +++++++++++++++++++++++++++++++ README.md | 1 + Scripts/YouTube.ps1 | 58 +++++++++++++++++++++++++++++++++++++ 4 files changed, 112 insertions(+) diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index b1b4c38..8adc140 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -10,6 +10,10 @@ jobs: steps: - uses: actions/checkout@main + - name: Install AngleSharp + run: | + Install-Package AngleSharp -Source https://www.nuget.org/api/v2 -SkipDependencies -Force + - name: Download YouTube run: | New-Item -Path Temp -ItemType Directory -Force diff --git a/Build.ps1 b/Build.ps1 index 31f9f78..6858c6f 100644 --- a/Build.ps1 +++ b/Build.ps1 @@ -45,6 +45,7 @@ $versions = ($JSON | Where-Object -FilterScript {$_.compatiblePackages.name -eq $LatestSupported = $versions | Sort-Object -Descending -Unique | Select-Object -First 1 # We need a NON-bundle version +<# # https://apkpure.net/ru/youtube/com.google.android.youtube/versions $Parameters = @{ Uri = "https://apkpure.net/youtube/com.google.android.youtube/download/$($LatestSupported)" @@ -60,6 +61,54 @@ $Parameters = @{ Verbose = $true } Invoke-Webrequest @Parameters +#> + +# https://www.apkmirror.com/apk/google-inc/youtube/ +$apkMirrorLink = "https://www.apkmirror.com/apk/google-inc/youtube/youtube-$($LatestSupported)-release/" +$Parameters = @{ + Uri = $apkMirrorLink + UseBasicParsing = $false # Disabled + Verbose = $true +} +$Request = Invoke-Webrequest @Parameters +$Request.ParsedHtml.getElementsByClassName("table-row headerFont") | ForEach-Object -Process { + foreach ($child in $_.children) + { + if ($child.innerText -eq "nodpi") + { + $apkPackageLink = ($_.getElementsByTagName("a") | Select-Object -First 1).nameProp + break + } + } +} +$apkMirrorLink += $apkPackageLink # actual APK link (not BUNDLE) + +# Get unique key to generate direct link +$Parameters = @{ + Uri = $apkMirrorLink + UseBasicParsing = $false # Disabled + Verbose = $true +} +$Request = Invoke-Webrequest @Parameters +$nameProp = $Request.ParsedHtml.getElementsByClassName("accent_bg btn btn-flat downloadButton") | ForEach-Object -Process {$_.nameProp} + +$Parameters = @{ + Uri = $apkMirrorLink + "/download/$($nameProp)" + UseBasicParsing = $false # Disabled + Verbose = $true +} +$URL_Part = ((Invoke-Webrequest @Parameters).Links | Where-Object -FilterScript {$_.innerHTML -eq "here"}).href +# Replace "&" with "&" to make it work +$URL_Part = $URL_Part.Replace("&", "&") + +# Finally, get the real link +$Parameters = @{ + Uri = "https://www.apkmirror.com$URL_Part" + OutFile = "$WorkingFolder\ReVanced\youtube.apk" + UseBasicParsing = $true + Verbose = $true +} +Invoke-Webrequest @Parameters # https://github.com/revanced/revanced-cli $Parameters = @{ diff --git a/README.md b/README.md index 6f7c850..8166f50 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ Trigger the [`Build`](https://github.com/JDM170/ReVanced_Builder/actions/workflo ## Links * [APKPure](https://apkpure.net) +* [APKMirror](https://apkmirror.com) * [ReVanced CLI](https://github.com/revanced/revanced-cli) * [ReVanced Patches](https://github.com/revanced/revanced-patches) * [ReVanced Integrations](https://github.com/revanced/revanced-integrations) diff --git a/Scripts/YouTube.ps1 b/Scripts/YouTube.ps1 index 0eb4747..740925d 100644 --- a/Scripts/YouTube.ps1 +++ b/Scripts/YouTube.ps1 @@ -10,6 +10,7 @@ $LatestSupported = $versions | Sort-Object -Descending -Unique | Select-Object - # We need a NON-bundle version # https://apkpure.net/ru/youtube/com.google.android.youtube/versions +<# $Parameters = @{ Uri = "https://apkpure.net/youtube/com.google.android.youtube/download/$($LatestSupported)" UseBasicParsing = $true @@ -24,5 +25,62 @@ $Parameters = @{ Verbose = $true } Invoke-Webrequest @Parameters +#> + +$AngleSharpAssemblyPath = (Get-ChildItem -Path (Split-Path -Path (Get-Package -Name AngleSharp).Source) -Filter "*.dll" -Recurse | Where-Object -FilterScript {$_ -match "standard"} | Select-Object -Last 1).FullName +Add-Type -Path $AngleSharpAssemblyPath + +# Create parser object +$angleparser = New-Object -TypeName AngleSharp.Html.Parser.HtmlParser + +# Trying to find correct APK link (not BUNDLE) +# https://www.apkmirror.com/apk/google-inc/youtube/ +$apkMirrorLink = "https://www.apkmirror.com/apk/google-inc/youtube/youtube-$($LatestSupported)-release/" +$Parameters = @{ + Uri = $apkMirrorLink + UseBasicParsing = $false # Disabled + Verbose = $true +} +$Request = Invoke-Webrequest @Parameters +$Parsed = $angleparser.ParseDocument($Request.Content) +$Parsed.All | Where-Object -FilterScript {$_.ClassName -match "table-row headerFont"} | ForEach-Object -Process { + foreach($child in $_.children) + { + if ($child.InnerHtml -eq "nodpi") + { + $apkPackageLink = (($_.getElementsByTagName("a") | Select-Object -First 1).Href).Substring(57) + break + } + } +} +$apkMirrorLink += $apkPackageLink # actual APK link (not BUNDLE) + +# Get unique key to generate direct link +$Parameters = @{ + Uri = $apkMirrorLink + UseBasicParsing = $false # Disabled + Verbose = $true +} +$Request = Invoke-Webrequest @Parameters +$Parsed = $angleparser.ParseDocument($Request.Content) +$Key = $Parsed.All | Where-Object -FilterScript {$_.ClassName -match "accent_bg btn btn-flat downloadButton"} | ForEach-Object -Process {$_.Search} + +$Parameters = @{ + Uri = $apkMirrorLink + "download/$($Key)" + UseBasicParsing = $true + Verbose = $true +} +$Request = Invoke-Webrequest @Parameters +$Parsed = $angleparser.ParseDocument($Request.Content) +$Key = ($Parsed.All | Where-Object -FilterScript { $_.InnerHtml -eq "here" }).Search + +# Finally, get the real link +$Parameters = @{ + Uri = "https://www.apkmirror.com/wp-content/themes/APKMirror/download.php$Key" + OutFile = "Temp\youtube.apk" + UseBasicParsing = $true + Verbose = $true +} +Invoke-Webrequest @Parameters echo "LatestSupportedYT=$LatestSupported" >> $env:GITHUB_ENV