From 8b44677f43c45a2b30aece53e959d6426672e403 Mon Sep 17 00:00:00 2001 From: amd64fox <62529699+amd64fox@users.noreply.github.com> Date: Wed, 5 Nov 2025 23:49:42 +0300 Subject: [PATCH] refactor GAS request --- LoaderSpot_CLI/src/main.rs | 9 +- upd.py | 164 +++++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+), 5 deletions(-) create mode 100644 upd.py diff --git a/LoaderSpot_CLI/src/main.rs b/LoaderSpot_CLI/src/main.rs index d51d808..efc2c1c 100644 --- a/LoaderSpot_CLI/src/main.rs +++ b/LoaderSpot_CLI/src/main.rs @@ -378,11 +378,9 @@ async fn send_to_gas( gas_url: &str, data: HashMap, ) { - let json_data = serde_json::to_string(&data).unwrap(); - let encoded_json = urlencoding::encode(&json_data); - let url = format!("{}{}", gas_url, encoded_json); + let cleaned_gas_url = gas_url.trim_matches('"'); - match client.get(&url).send().await { + match client.post(cleaned_gas_url).json(&data).send().await { Ok(response) => { if response.status().is_success() { match response.text().await { @@ -393,7 +391,8 @@ async fn send_to_gas( if let Some(div) = soup.select(&selector).next() { println!("Ответ от GAS: {}", div.text().collect::().trim()); } else { - println!("Не удалось извлечь ответ из HTML"); + eprintln!("Не удалось извлечь ответ из HTML. Полный ответ:"); + eprintln!("{}", text); } } else { println!("Ответ от GAS: {}", text.trim()); diff --git a/upd.py b/upd.py new file mode 100644 index 0000000..bdbc258 --- /dev/null +++ b/upd.py @@ -0,0 +1,164 @@ +import aiohttp +import asyncio +import json +import re +import argparse +from bs4 import BeautifulSoup +import urllib.parse + +parser = argparse.ArgumentParser() +parser.add_argument("-v", required=True) +parser.add_argument("-s", required=True) +parser.add_argument("-u", required=True) + +args = parser.parse_args() +version = args.v +source = args.s +u = args.u + + +async def send_request(json_data): + url = u + urllib.parse.quote(json_data) + async with aiohttp.ClientSession() as session: + async with session.get(url) as response: + if response.status == 200: + data = await response.text() + if " current_version: + platform_urls[platform] = str(url) + else: + platform_urls[platform] = str(url) + + return platform_urls + + +async def main(): + start_number = 0 + before_enter = 1000 + additional_searches = 10 # Максимальное кол-во шагов для дополнительного поиска + increment = 1000 # Размер шага + + find_url = [] + + root_url = "https://upgrade.scdn.co/upgrade/client/" + platform_templates = { + "WIN32": "win32-x86/spotify_installer-{version}-{numbers}.exe", + "WIN64": "win32-x86_64/spotify_installer-{version}-{numbers}.exe", + "WIN-ARM64": "win32-arm64/spotify_installer-{version}-{numbers}.exe", + "OSX": "osx-x86_64/spotify-autoupdate-{version}-{numbers}.tbz", + "OSX-ARM64": "osx-arm64/spotify-autoupdate-{version}-{numbers}.tbz", + } + + # не ищем архитектуру WIN32 если версия >= 1.2.54.304 + if parse_version(version) >= (1, 2, 54, 304): + platform_templates.pop("WIN32", None) + + async with aiohttp.ClientSession() as session: + tasks = [] + platform_names = list(platform_templates.keys()) + + for platform_name in platform_names: + numbers = start_number + while numbers <= before_enter: + url = root_url + platform_templates[platform_name].format( + version=version, numbers=numbers + ) + tasks.append(check_url(session, url, platform_name)) + numbers += 1 + + for task in asyncio.as_completed(tasks): + result = await task + if result is not None: + find_url.append(result) + + for i in range(additional_searches): + latest_urls = get_urls(find_url) + if len(latest_urls) < len(platform_names): + start_number = before_enter + 1 + before_enter += increment + tasks = [] + for platform_name in platform_names: + if platform_name not in latest_urls: + numbers = start_number + while numbers <= before_enter: + url = root_url + platform_templates[platform_name].format( + version=version, numbers=numbers + ) + tasks.append(check_url(session, url, platform_name)) + numbers += 1 + + if tasks: + for task in asyncio.as_completed(tasks): + result = await task + if result is not None: + find_url.append(result) + + if find_url: + latest_urls = get_urls(find_url) + await pre_version(latest_urls) + else: + await pre_version(False) + + +if __name__ == "__main__": + asyncio.run(main())