File size: 5,498 Bytes
20a50c3
 
 
 
 
 
 
 
c44a6b0
20a50c3
 
7f45966
 
ed52937
 
7f45966
 
beb79e5
 
 
 
ed52937
beb79e5
ed52937
 
 
beb79e5
 
7f45966
 
 
beb79e5
7f45966
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20a50c3
7f45966
 
 
 
 
20a50c3
7f45966
 
 
 
 
20a50c3
7f45966
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.chrome.options import Options
import os
from pyspark.sql import SparkSession
#from delta import configure_spark_with_delta_pip
import tempfile

def get_mp3(song_title):
    # Set the download directory to the "music" subfolder within the current directory
    # download_directory = os.path.join(os.getcwd(), "music")
    # os.makedirs(download_directory, exist_ok=True)
    
    # Set up Chrome options
    options = Options()
    options.add_argument("--headless")
    options.add_argument("--no-sandbox")  # Bypass OS security model, necessary on certain platforms
    options.add_argument("--disable-dev-shm-usage")  # Overcome limited resource problems
    #options.add_argument(f"download.default_directory={download_dir}")  # Set download directory
    options.add_experimental_option("prefs", {
        # "download.default_directory": download_dir,
        # "download.prompt_for_download": False,
        # "download.directory_upgrade": True,
        "plugins.always_open_pdf_externally": True,  # Auto-download PDFs
        "safebrowsing.enabled": True  # Enable safe browsing to avoid triggering the browser's security warnings
    })
    
    # Set up the Selenium WebDriver (e.g., Chrome)
    driver = webdriver.Chrome(options=options)
    
    # Navigate to the website
    driver.get("https://suno.com/me")
    
    
    # Wait for the sign-in button to be clickable and click it
    sign_in_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "#__next > div > div > div > div > div.cl-main.🔒️.cl-internal-xk295g > div > button.cl-socialButtonsIconButton.cl-socialButtonsIconButton__discord.🔒️.cl-internal-855i1h"))
        )
    sign_in_button.click()
    
    # Wait for the username field to be visible and enter the username
    #username: applebottom_12
    username_field = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, "#uid_8"))
        )
    username_field.send_keys("asfasfasfgasdfasgfsag@gmail.com")
    
    # Find the password field and enter the password
    password_field = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, "#uid_10"))
        )
    password_field.send_keys("AppleBottom12")
    
    # Find the password button and click it
    password_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "#app-mount > div.appAsidePanelWrapper__5e6e2 > div.notAppAsidePanel__95814 > div.app_b1f720 > div > div > div > div > form > div.centeringWrapper__5e247 > div > div.mainLoginContainer_f58870 > div.block__681fa.marginTop20__7e0ad > button.marginBottom8_ce1fb9.button__5573c.button__581d0.lookFilled__950dd.colorBrand__27d57.sizeLarge_b395a7.fullWidth_fdb23d.grow__4c8a4"))
        )
    password_button.click()
    
    # Wait for the page to load after signing in
    WebDriverWait(driver, 10).until(
            EC.url_contains("https://suno.com/me")
        )
    
    # Click on the specific song
    three_dots = WebDriverWait(driver, 10).until(
         EC.element_to_be_clickable((By.LINK_TEXT, song_title))
     )
    three_dots.click()
    
    # Play the song
    play_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.css-fhtuey > div.css-bhm5u7 > div > div.css-l9hfgy > div.css-144pizt > button.chakra-button.css-15rci1t"))
        )
    play_button.click()
    
    time.sleep(3)
    
    three_dots = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//button[@aria-label="More Actions"]'))
    )
    three_dots.click()
    
    # Wait for the Download button to be clickable and click on it
    download_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//div[@role="menuitem" and contains(text(), "Download")]'))
    )
    download_button.click()
    
    # Wait for the Audio element to be clickable and click on it
    audio_element = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//div[@role="menuitem" and contains(text(), "Audio")]'))
    )
    audio_element.click()
    
    time.sleep(3)
    
    # print("Successfully signed in!")
    
    # # Create a SparkSession with Delta Lake configuration
    # builder = SparkSession.builder.appName("SaveMP3ToDatabricks") \
    #     .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    #     .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")
    
    # spark = configure_spark_with_delta_pip(builder).getOrCreate()
    
    # # Setting the Retrieving Director
    # retrieve_directory = os.path.join(download_directory, f"{song_title}.mp3")
    
    # # Read the downloaded MP3 file as binary
    # mp3_data = spark.sparkContext.binaryFiles(retrieve_directory).collect()[0][1]
    
    # # Create a DataFrame with the MP3 data
    # df = spark.createDataFrame([("Samba Kickoff.mp3", mp3_data,)], ["song_name", "mp3_data"])
    
    # # Save the DataFrame to a Databricks table
    # df.write.format("delta").mode("append").saveAsTable("mp3_table")
    
    # print("MP3 file saved to Databricks table.")
    
    driver.quit()