SensationSnagger.psm1
|
function Get-Sensation { param ( [string]$UserUrl = $(Read-Host -Prompt "Please enter the URL") ) $apiUrl = "https://api-gib.dontdmca.me/api/json" $requestBody = @{ aFormat = "mp3" filenamePattern = "classic" dubLang = "false" vQuality = 1080 twitterGif = "true" url = $UserUrl } | ConvertTo-Json $startTime = Get-Date # Send the POST request $response = Invoke-RestMethod -Uri $apiUrl -Body $requestBody -Method Post -ContentType "application/json" -Headers @{ Accept = "application/json" } # Check for errors if ($response.text -and $response.text -ne "OK") { Write-Output "Error: $($response.text)" return } $downloadUrl = $response.url $filenameFromResponse = $response.filename if (-not $downloadUrl) { Write-Output "Error: No download URL found in the response." return } # Extract file name and extension from the URL's path $uri = [System.Uri]::new($downloadUrl) $absolutePath = $uri.AbsolutePath $fileName = [System.IO.Path]::GetFileNameWithoutExtension($absolutePath) $fileExtension = [System.IO.Path]::GetExtension($absolutePath) if (-not $fileName) { $fileName = "unknown" } # Set file name and extension based on provider $provider = "Unknown" switch -Regex ($UserUrl) { "instagram\.com" { $provider = "Instagram" if ($filenameFromResponse -and $filenameFromResponse -match "\.[\w\d]+$") { $fileName = [System.IO.Path]::GetFileNameWithoutExtension($filenameFromResponse) $fileExtension = [System.IO.Path]::GetExtension($filenameFromResponse) } } "facebook\.com" { $provider = "Facebook" if ($filenameFromResponse -and $filenameFromResponse -match "\.[\w\d]+$") { $fileName = [System.IO.Path]::GetFileNameWithoutExtension($filenameFromResponse) $fileExtension = [System.IO.Path]::GetExtension($filenameFromResponse) } } "tiktok\.com" { $provider = "TikTok" if ($filenameFromResponse -and $filenameFromResponse -match "\.[\w\d]+$") { $fileName = [System.IO.Path]::GetFileNameWithoutExtension($filenameFromResponse) $fileExtension = [System.IO.Path]::GetExtension($filenameFromResponse) } } "youtube\.com|youtu\.be" { $provider = "YouTube" $fileName = if ($UserUrl -match "(?<=v=|\/)([a-zA-Z0-9_-]{11})") { $matches[0] } else { $fileName } $fileExtension = ".mp4" } "twitter\.com|x\.com" { $provider = "Twitter/X" if ($filenameFromResponse -and $filenameFromResponse -match "\.[\w\d]+$") { $fileName = [System.IO.Path]::GetFileNameWithoutExtension($filenameFromResponse) $fileExtension = [System.IO.Path]::GetExtension($filenameFromResponse) } } } # Finalize the file name $fileName += $fileExtension Add-Type -AssemblyName PresentationFramework $saveFileDialog = New-Object -TypeName Microsoft.Win32.SaveFileDialog $saveFileDialog.FileName = $fileName $saveFileDialog.Filter = "$fileExtension files (*$fileExtension)|*$fileExtension|All Files (*.*)|*.*" $filePath = $null $dialogResult = $saveFileDialog.ShowDialog() if ($dialogResult -ne $true) { Write-Output "Download canceled." return } $filePath = $saveFileDialog.FileName $webClient = New-Object System.Net.WebClient $downloadHandler = Register-ObjectEvent -InputObject $webClient -EventName DownloadProgressChanged -Action { Write-Progress -Activity "Downloading" -Status "$($EventArgs.ProgressPercentage)% Complete" -PercentComplete $EventArgs.ProgressPercentage } $webClient.DownloadFileAsync($uri, $filePath) while ($webClient.IsBusy) { Start-Sleep -Milliseconds 100 } Unregister-Event -SourceIdentifier $downloadHandler.Name Remove-Job -Name $downloadHandler.Name Write-Output "File saved to $filePath" $endTime = Get-Date $runTime = $endTime - $startTime Write-Output "Download completed from $provider." Write-Output "Script run time: $runTime." } |