1
1
2
2
import base64
3
+ from models import Playlist
3
4
import requests
4
5
import random
5
6
@@ -29,75 +30,146 @@ def get_token_for_spotify():
29
30
result = requests .post (url ,data = data , headers = headers )
30
31
token = result .json ()
31
32
return token ['access_token' ]
33
+ def get_danceability (focus_sentiment ):
34
+ return (focus_sentiment + 1 )/ 2
32
35
33
- def get_random_song (playlist_id ):
36
+
37
+ def get_playlist_from_sentiment (focus_sentiment ):
38
+
39
+ if focus_sentiment == - 1 :
40
+ # Hardcore Punk Rock
41
+ return "7mCzIltN0jFQ54GH02HMsY"
42
+ elif focus_sentiment > - 1 and focus_sentiment <= - 0.9 :
43
+ #Metal/ Hard Rock
44
+ return "1GXRoQWlxTNQiMNkOe7RqA"
45
+ elif focus_sentiment > - 0.9 and focus_sentiment <= - 0.8 :
46
+ # Dream Pop
47
+ return "37i9dQZF1DX6uhsAfngvaD"
48
+ elif focus_sentiment > - 0.8 and focus_sentiment <= - 0.7 :
49
+ # Indie Rock
50
+ return "7lnCgcTxLTTcOqvgoS80sC"
51
+ elif focus_sentiment > - 0.7 and focus_sentiment <= - 0.6 :
52
+ # EDM
53
+ return "2e3dcRuo9uDH6qD3NOGKAL"
54
+ elif focus_sentiment > - 0.6 and focus_sentiment <= - 0.5 :
55
+ # Alternative Rock
56
+ return "37i9dQZF1DX9GRpeH4CL0S"
57
+ elif focus_sentiment > - 0.5 and focus_sentiment <= - 0.4 :
58
+ # R&B
59
+ return "37i9dQZF1DX4SBhb3fqCJd"
60
+ elif focus_sentiment > - 0.4 and focus_sentiment <= - 0.3 :
61
+ # Blues
62
+ return "37i9dQZF1DXd9rSDyQguIk"
63
+ elif focus_sentiment > - 0.3 and focus_sentiment <= - 0.2 :
64
+ # Indie Folk
65
+ return "5tOffZXVBFTMS7mkKQ3tpX"
66
+ elif focus_sentiment > - 0.2 and focus_sentiment <= - 0.1 :
67
+ # country
68
+ return "37i9dQZF1DX13ZzXoot6Jc"
69
+ elif focus_sentiment > - 0.1 and focus_sentiment < 0.1 :
70
+ # ambient
71
+ return "1kqBP6eE24L0agNpnTIKtc"
72
+ elif focus_sentiment >= 0.1 and focus_sentiment < 0.2 :
73
+ # Classical
74
+ return "37i9dQZF1DWWEJlAGA9gs0"
75
+ elif focus_sentiment >= 0.2 and focus_sentiment < 0.3 :
76
+ # Jazz
77
+ return "37i9dQZF1DXbITWG1ZJKYt"
78
+ elif focus_sentiment >= 0.3 and focus_sentiment < 0.4 :
79
+ # Reggae
80
+ return "37i9dQZF1DXbSbnqxMTGx9"
81
+ elif focus_sentiment >= 0.4 and focus_sentiment < 0.5 :
82
+ # Rap
83
+ return "37i9dQZF1DX0XUsuxWHRQd"
84
+ elif focus_sentiment >= 0.5 and focus_sentiment < 0.6 :
85
+ # Love
86
+ return "5KbTzqKBqxQRD8OBtJTZrS"
87
+ elif focus_sentiment >= 0.6 and focus_sentiment < 0.7 :
88
+ # Latino
89
+ return "37i9dQZF1DX10zKzsJ2jva"
90
+ elif focus_sentiment >= 0.7 and focus_sentiment < 0.8 :
91
+ # Pop
92
+ return "37i9dQZF1DX2L0iB23Enbq"
93
+ elif focus_sentiment >= 0.8 and focus_sentiment < 0.9 :
94
+ # Disco
95
+ return "37i9dQZF1DX2GKumqRIZ7g"
96
+ elif focus_sentiment >= 0.9 and focus_sentiment < 1 :
97
+ # Funk
98
+ return "37i9dQZF1DWWvhKV4FBciw"
99
+ elif focus_sentiment == 1 :
100
+ # Salsa
101
+ return "37i9dQZF1DX7SeoIaFyTmA"
102
+
103
+ def determine_starting_playlists (focus_sentiment ):
104
+ playlists = []
105
+ # get playlists based on sentiment
106
+ focus_sentiments = [focus_sentiment - 0.1 ,focus_sentiment ,focus_sentiment + 0.1 ]
107
+ for sentiment in focus_sentiments :
108
+ playlists .append (get_playlist_from_sentiment (sentiment ))
109
+ return playlists
110
+ def get_tracks (playlist_id ):
34
111
token = get_token_for_spotify ()
35
112
params = {"market" :"US" ,"limit" :10 }
36
113
headers = {
37
114
"Authorization" :"Bearer {}" .format (token )
38
115
}
39
116
url = f"https://api.spotify.com/v1/playlists/{ playlist_id } /tracks"
40
117
response = requests .request ("GET" ,url ,headers = headers ,params = params )
41
- song = response .json ()
42
- rand = get_rand ()
43
- return song ["items" ][rand ]["track" ]["id" ]
44
-
45
- def get_random_artist (playlist_id ):
118
+ tracks = response .json ()
119
+ return tracks
120
+ def get_track_seed (tracks ):
121
+ rand = random .randint (0 ,len (tracks ["items" ])- 1 )
122
+ track_seed = tracks ["items" ][rand ]["track" ]["id" ]
123
+ return track_seed
124
+ def get_artist_seed (tracks ):
125
+ rand = random .randint (0 ,len (tracks ["items" ])- 1 )
126
+ artist_seed = tracks ["items" ][rand ]["track" ]["artists" ][0 ]["id" ]
127
+ return artist_seed
128
+
129
+
130
+ def get_featured_playlists ():
46
131
token = get_token_for_spotify ()
47
-
48
132
params = {"market" :"US" ,"limit" :1 }
49
133
headers = {
50
134
"Authorization" :"Bearer {}" .format (token )
51
135
}
52
- url = f"https://api.spotify.com/v1/playlists/ { playlist_id } /tracks "
136
+ url = f"https://api.spotify.com/v1/browse/featured-playlists "
53
137
response = requests .request ("GET" ,url ,headers = headers ,params = params )
54
- artist = response .json ()
55
- return artist ["items" ][0 ]["track" ]["artists" ][0 ]["id" ]
138
+ ids = response .json ()["playlists" ]["items" ]
139
+ featured_playlists = []
140
+ for playlist in ids :
141
+ featured_playlists .append (playlist ["id" ])
142
+ return featured_playlists
56
143
144
+ def get_urmusic (focus_sentiment ):
145
+ track_seeds = []
146
+ artist_seeds = []
57
147
58
- def get_random_genre (artist_seed ):
59
- token = get_token_for_spotify ()
60
- artist_id = artist_seed
61
- params = {"ids" :artist_id }
62
- headers = {
63
- "Authorization" :"Bearer {}" .format (token )
64
- }
65
- url = f"https://api.spotify.com/v1/artists"
66
- response = requests .request ("GET" ,url ,headers = headers ,params = params )
67
- genre = response .json ()
68
- return genre ["artists" ][0 ]["genres" ]
69
148
70
- def get_starting_point_playlist (focus_sentiment ):
71
- if focus_sentiment >= - 1 and focus_sentiment < - 0.7 :
72
- return "7mCzIltN0jFQ54GH02HMsY"
73
- elif focus_sentiment >= - 0.7 and focus_sentiment < - 0.4 :
74
- return "37i9dQZF1DX0XUsuxWHRQd"
75
- elif focus_sentiment >= - 0.4 and focus_sentiment < 0 :
76
- return "4y3WX0SZQ2cTLBovftfyiP"
77
- elif focus_sentiment >= 0 and focus_sentiment < .4 :
78
- return "37i9dQZF1DWV7EzJMK2FUI"
79
- elif focus_sentiment >= .4 and focus_sentiment < 0.7 :
80
- return "7vI0tN3yUn07dkK9T6p2pg"
81
- elif focus_sentiment >= 0.7 and focus_sentiment <= 1 :
82
- return "37i9dQZF1DXaqCgtv7ZR3L"
83
-
84
- def get_recommended_music (focus ,playlist_id ):
85
- token = get_token_for_spotify ()
86
- track_seed = get_random_song (playlist_id )
87
- track_seed2 = get_random_song (playlist_id )
149
+ #get seeds from featured music in spotify (2)
150
+ featured_playlists = get_featured_playlists ()
151
+ for playlist in featured_playlists :
152
+ list_of_tracks = get_tracks (playlist )
153
+ artist_seeds .append (get_artist_seed (list_of_tracks ))
154
+ track_seeds .append (get_track_seed (list_of_tracks ))
88
155
89
- artist_seed = get_random_artist (playlist_id )
90
- genre_seed = get_random_genre (artist_seed )
156
+ # get seeds from playlists determined by sentiment-genre conrrelation (3)
157
+ playlists = determine_starting_playlists (focus_sentiment )
158
+ for playlist in playlists :
159
+ list_of_tracks = get_tracks (playlist )
160
+ artist_seeds .append (get_artist_seed (list_of_tracks ))
161
+ track_seeds .append (get_track_seed (list_of_tracks ))
91
162
163
+ # return artist_seeds
92
164
93
- limit = 10
94
- target_danceability = (focus + 1 )/ 2
95
-
165
+ token = get_token_for_spotify ()
166
+ target_danceability = get_danceability (focus_sentiment )
167
+
168
+ limit = 20
96
169
params = {
97
170
"limit" :limit ,
98
- "seed_artists" :[artist_seed ],
99
- "seed_genres" :[genre_seed ],
100
- "seed_tracks" :[track_seed ,track_seed2 ],
171
+ "seed_artists" :artist_seeds ,
172
+ "seed_tracks" :track_seeds ,
101
173
"market" :"US" ,
102
174
"target_danceability" :target_danceability
103
175
}
@@ -108,14 +180,9 @@ def get_recommended_music(focus,playlist_id):
108
180
response = requests .request ("GET" ,url ,headers = headers ,params = params )
109
181
recommended = response .json ()
110
182
try :
111
- results = recommended [' tracks' ][ 0 ]
183
+ results = recommended [" tracks" ]
112
184
return results
113
185
except :
114
186
return None
115
187
116
188
117
-
118
- def get_playlist (focus_sentiment ):
119
- playlist_id = get_starting_point_playlist (focus_sentiment )
120
- return get_recommended_music (focus_sentiment ,playlist_id )
121
-
0 commit comments