File size: 3,007 Bytes
c43be04
1a3f8bd
87f95e1
afa1625
1277e6b
c43be04
e665916
 
 
 
 
 
 
d050fe6
afa1625
91d5749
afa1625
91d5749
d050fe6
e665916
2a08a02
dddfa05
2a08a02
2e43002
41b71e6
2e43002
ea0a27d
41b71e6
2e43002
ea0a27d
41b71e6
2e43002
ea0a27d
41b71e6
2e43002
ea0a27d
2e43002
dddfa05
e665916
b92d253
 
9d24c19
 
 
 
 
 
 
e665916
afa1625
 
 
 
 
dddfa05
afa1625
 
9d24c19
 
bdb2a52
 
9d24c19
e665916
9d24c19
 
 
 
 
 
e665916
bdb2a52
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
import streamlit as st
import pandas as pd
from songscope import *
import random
# !python -m pip install --upgrade pip

# main header
st.title("SongScope")

# web app explainer
st.write("Welcome to SongScope. This is a web app that lets you download lyrics and metadata of your favourite artist.\n")
st.write("Enter an artist name, and you can even select up to 5 songs to retrieve their data. If you don't specify any songs,\ndata on all songs by the artist will be retrieved.")

# delay times
delay_min = st.number_input(label = "Minimum delay per iteration. We recommend a value of at least 10 seconds per song, otherwise you may be banned from azlyrics.com for scraping.",
                            step = 1., format = "%.2f", value = float(10))
delay_max = st.number_input(label = "Maximum delay per iteration. We recommend a value of at least 10 seconds per song, otherwise you may be banned from azlyrics.com for scraping.",
                            step = 1., format = "%.2f", value = float(20))

# user-provided data
artist_name = st.text_input("Enter artist name here", value = "jn mayer") # delete this when done
titles_list = []
song_1 = st.text_input("Enter 1st song title here", value = "gravity")

if song_1:
    titles_list.append(song_1)
    song_2 = st.text_input("Enter 2nd song title here", value = "slowin dancing burbg room")
if song_2:
    titles_list.append(song_2)
    song_3 = st.text_input("Enter 3rd song title here")
if song_3:
    titles_list.append(song_3)
    song_4 = st.text_input("Enter 4th song title here")
if song_4:
    titles_list.append(song_4)
    song_5 = st.text_input("Enter 5th song title here")
if song_5:
    titles_list.append(song_5)

st.write(titles_list)

# funnies
funnies = []
with open("fun_fax.txt", "r", encoding = "utf-8") as f:
    for funny in f.read().split("\n"):
        funnies.append(funny)
f.close() # closes connection to file

# data is found
find_button = st.button('Find Data')
if not find_button: # button to make everything run
    st.write("Once you've entered the above data, click the 'Find Data' button, above, to begin.")
else:
    artist_df = get_all_data(artist_name = artist_name, 
            song_titles = title_list,
            delay = (delay_min, delay_max), # random float value between (delay_min, delay_max) seconds
            print_progress = True)

    # download button and download
    dl_button = st.download_button('Download Data', artist_df, f"{artist_name.lower()}_data.csv")
    if dl_button:
        st.write("Your data should be downloading. If not, please reload the page and try again.")

    # fun joke
    joke_button = st.button("Want to hear a joke while you wait?")
    if joke_button:
        st.write(funnies[random.randint(0, len(funnies) - 1)])
        st.write("Click the button again to get another!")
        
# "thank you" blurb
st.write("\nThanks for checking out SongScope! If you have any feedback or requests for additions to this app, shoot me an email at kmaurinjones@gmail.com.")