From 888ce2b61cf610ca46372a4d310f26b89fd088ad Mon Sep 17 00:00:00 2001 From: afkarxyz Date: Thu, 24 Jul 2025 06:35:18 +0700 Subject: [PATCH] v4.1 --- deezmate.py | 130 ---------------------------------------------------- 1 file changed, 130 deletions(-) delete mode 100644 deezmate.py diff --git a/deezmate.py b/deezmate.py deleted file mode 100644 index 024ad2e..0000000 --- a/deezmate.py +++ /dev/null @@ -1,130 +0,0 @@ -import nodriver as uc -import asyncio - -async def download_deezer_track(deezer_link=None, initial_delay=7.5): - if deezer_link is None: - deezer_link = "https://www.deezer.com/us/track/2947516331" - - browser = None - try: - browser = await uc.start(headless=False) - page = await browser.get("https://deezmate.com/en") - - print("Loading...") - await asyncio.sleep(initial_delay) - - input_selector = 'input[placeholder="Paste your Deezer link here..."]' - await page.wait_for(input_selector, timeout=15) - input_element = await page.select(input_selector) - await input_element.clear_input() - await input_element.send_keys(deezer_link) - print("Link entered") - - await page.evaluate(""" - window.apiResponse = null; - window.originalFetch = window.fetch; - window.fetch = function(...args) { - return window.originalFetch(...args).then(async response => { - if (response.url.includes('api.deezmate.com/dl/')) { - try { - const data = await response.clone().json(); - window.apiResponse = data; - console.log('Captured API response:', data); - } catch (e) { - console.log('Error parsing API response:', e); - } - } - return response; - }); - }; - """) - - max_retries = 3 - download_button_clicked = False - - for attempt in range(max_retries): - try: - download_button_selector = 'button.bg-purple.hover\\:bg-purple-dark.cursor-pointer.transition.text-white.rounded-xl.p-2.mt-2.w-full.mb-5' - await page.wait_for(download_button_selector, timeout=15) - download_button = await page.select(download_button_selector) - await download_button.click() - print("Processing...") - download_button_clicked = True - break - - except Exception as e: - if attempt < max_retries - 1: - print(f"Turnstile verification failed, retrying... ({attempt + 1}/{max_retries})") - await asyncio.sleep(0.5) - await page.evaluate("window.apiResponse = null;") - else: - print("Failed to pass Turnstile verification after all retries") - raise e - - if not download_button_clicked: - return None - - try: - track_download_selector = 'button.bg-purple.text-white.flex.items-center.gap-2.px-3.py-1.rounded-full.hover\\:bg-purple-dark.transition' - await page.wait_for(track_download_selector, timeout=15) - track_download_button = await page.select(track_download_selector) - await track_download_button.click() - except Exception as e: - print(f"Failed to click track download button: {e}") - return None - - print("Getting FLAC URL from API response...") - - api_response = None - for i in range(30): - api_response = await page.evaluate("window.apiResponse") - if api_response: - break - await asyncio.sleep(0.2) - - if not api_response: - return None - - def parse_nodriver_response(data): - if isinstance(data, list): - result = {} - for item in data: - if isinstance(item, list) and len(item) == 2: - key = item[0] - value_obj = item[1] - if isinstance(value_obj, dict) and 'value' in value_obj: - if value_obj.get('type') == 'object': - result[key] = parse_nodriver_response(value_obj['value']) - else: - result[key] = value_obj['value'] - return result - return data - - parsed_response = parse_nodriver_response(api_response) - - if parsed_response.get('success') and parsed_response.get('links'): - flac_url = parsed_response['links'].get('flac') - if flac_url: - print(f"Successfully obtained FLAC download URL: {flac_url}") - return flac_url - - return None - - except Exception as e: - print(f"Error: {e}") - return None - finally: - if browser: - try: - await browser.stop() - except: - pass - -async def main(deezer_link=None, initial_delay=7.5): - flac_url = await download_deezer_track(deezer_link, initial_delay) - if not flac_url: - print("Failed to download track") - return flac_url - -if __name__ == "__main__": - uc.loop().run_until_complete(main()) \ No newline at end of file