diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..ee3f5d2 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,23 @@ +name: Version Check +on: + repository_dispatch: + types: [webhook-event] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.x + + - name: Install dependencies + run: pip install -r requirements.txt + + - name: Run Python script + run: python ${{ github.workspace }}/upd.py -v ${{ github.event.client_payload.v }} -s "${{ github.event.client_payload.s }}" -u "${{ secrets.GOOGLE_APPS_URL }}" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3425ed9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +aiohttp +asyncio +beautifulsoup4 +argparse \ No newline at end of file diff --git a/upd.py b/upd.py new file mode 100644 index 0000000..078224a --- /dev/null +++ b/upd.py @@ -0,0 +1,98 @@ +import aiohttp +import asyncio +import json +import argparse +from bs4 import BeautifulSoup + +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 check_url(session, url, platform_name): + try: + async with session.get(url) as response: + if response.status == 200: + if platform_name: + return response.url, platform_name + else: + return response.url + except aiohttp.ClientError: + pass + return None + +async def send_request(json_data): + url = u + json_data + async with aiohttp.ClientSession() as session: + async with session.get(url) as response: + if response.status == 200: + data = await response.text() + soup = BeautifulSoup(data, 'html.parser') + system_response = soup.find('div', style='text-align:center;font-family:monospace;margin:50px auto 0;max-width:600px').text + print(f'Ответ от Google apps script: {system_response}') + +async def main(): + + start_number = 0 + before_enter = 4500 + + numbers = start_number + find_url = [] + + win32 = "https://upgrade.scdn.co/upgrade/client/win32-x86/spotify_installer-{version}-{numbers}.exe" + win_arm64 = "https://upgrade.scdn.co/upgrade/client/win32-arm64/spotify_installer-{version}-{numbers}.exe" + osx = "https://upgrade.scdn.co/upgrade/client/osx-x86_64/spotify-autoupdate-{version}-{numbers}.tbz" + osx_arm64 = "https://upgrade.scdn.co/upgrade/client/osx-arm64/spotify-autoupdate-{version}-{numbers}.tbz" + + async with aiohttp.ClientSession() as session: + tasks = [] + + url_templates = [win32, win_arm64, osx, osx_arm64] + platform_names = ["WIN32", "WIN-ARM64", "OSX", "OSX-ARM64"] + + for url_template, platform_name in zip(url_templates, platform_names): + numbers = start_number + while numbers <= before_enter: + url = url_template.format( + version=version, numbers=numbers + ) + tasks.append(check_url(session, url, platform_name)) + numbers += 1 + + results = [] + + for task in asyncio.as_completed(tasks): + result = await task + if result is not None: + find_url.append(result) + if find_url: + platform_urls = {} + for item in find_url: + if isinstance(item, tuple): + url, platform_name = item + if platform_name not in platform_urls: + platform_urls[platform_name] = str(url) # Преобразование URL в строку + else: + if "unknown" not in platform_urls: + platform_urls["unknown"] = "unknown" + platform_urls["version"] = version + platform_urls["source"] = source + req_ver = json.dumps(platform_urls) + print(f'Версия {version} отправлена') + await send_request(req_ver) + else: + print(f'Версия {version} не найдена') + data = { + "unknown": "unknown", + "version": version + } + req_ver = json.dumps(data) + await send_request(req_ver) + + +asyncio.run(main()) \ No newline at end of file