Skip to content

Commit

Permalink
Merge branch 'develop' of github.com:JeanBaptiste-dlb/Skiptify into d…
Browse files Browse the repository at this point in the history
…evelop
  • Loading branch information
rangsimanketkaew committed Oct 23, 2022
2 parents 551665a + 3b1c6a3 commit 2bf604f
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 34 deletions.
5 changes: 5 additions & 0 deletions backend/src/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from backend


if __name__ == "__main__":
main()
30 changes: 19 additions & 11 deletions backend/src/model/decision_maker.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from backend.src.config import settings
from backend.src.spotify_api.api_interface import SPOTIFY_API_INTERFACE
import pandas as pd

from pathlib import Path

class DecisionLoop:
def __init__(self):
Expand All @@ -16,27 +16,35 @@ def __init__(self):
self.all_non_skipped = []
self.next_song = None
self.to_skip_path=Path(settings.APP_PATH, "tmp", "to_skip")

self.to_skip_path.mkdir(parents=True, exist_ok= True)

def decision_maker(self):
while True:
next_song = self.interface.get_next_song()
if next_song != self.next_song:
self.next_song = next_song
skipped = self.interface.is_song_skipped(song_id)
skip_decision = self.interface.is_song_skipped(next_song["id"])
# true or false
if skipped:
with open(self.to_skip_path)



with open(self.to_skip_path, "w") as writer:
writer.write(str(skip_decision))
sleep(5)

def main():
loop=DecisionLoop()
loop.decision_maker()

if __name__=="__main__":
main()











sleep(5)




15 changes: 10 additions & 5 deletions backend/src/spotify_api/api_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def save_song_features(self, features=pd.Series, skip_state="UNKNOWN", skip_prob
) as writer:
features["skip_state"] = skip_state
features["date_saved"] = str(datetime.now())
features["skip_probability"]= skip_probability
features["skip_probability"] = skip_probability
json.dump(dict(features), writer)

def load_song_features(self, song_id) -> pd.Series:
Expand All @@ -110,7 +110,7 @@ def load_song_features(self, song_id) -> pd.Series:
features = json.load(reader)
return pd.Series(features)

def get_next_song(self, sp):
def get_next_song(self):
"""Get the next song in the currently playing playlist
Args:
Expand Down Expand Up @@ -138,7 +138,7 @@ def get_next_song(self, sp):
all_track_name.append(track_name)

# get currently playing song
current_song = sp.currently_playing()
current_song = self.sp.currently_playing()
current_song_id = current_song['item']['id']
idx_next_song = all_track_id.index(current_song_id) + 1
return all_track_id[idx_next_song]
Expand Down Expand Up @@ -185,11 +185,12 @@ def is_song_skipped(self, track_id):
"""
# self.sp._update_scope("user-read-currently-playing")
# get features of the skipped songs
df_skipped = pd.read_csv('../../../data/player_data/skipped.csv', usecols=[i for i in range(11)])
df_skipped = pd.read_csv(f'{settings.DATA_PATH}/player_data/skipped.csv', usecols=[i for i in range(11)])

normalized_d_skipped = (df_skipped - df_skipped.mean()) / (df_skipped.max() - df_skipped.min())

# get features of the non-skipped songs
df_nonskipped = pd.read_csv('../../../data/player_data/non_skipped.csv', usecols=[i for i in range(11)])
df_nonskipped = pd.read_csv(f'{settings.DATA_PATH}/player_data/non_skipped.csv', usecols=[i for i in range(11)])
normalized_d_nonskipped = (df_nonskipped - df_nonskipped.mean()) / (df_nonskipped.max() - df_nonskipped.min())

# get features of the song to check the similarity distance
Expand Down Expand Up @@ -217,3 +218,7 @@ def is_song_skipped(self, track_id):
return False
else:
return True

if __name__ == "__main__":
interface = SPOTIFY_API_INTERFACE()
interface.is_song_skipped("6z8teIFzv6DFqsCfWfU425")
35 changes: 24 additions & 11 deletions backend/src/spotify_api/skip_listener.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from pathlib import Path
import time
from datetime import datetime
from backend.src.spotify_api.spotify_actioner import SpotifyActioner


class SKIP_LISTENER:
Expand All @@ -21,14 +22,35 @@ def __init__(self):
self.end_time = 0
self.all_skipped = []
self.all_non_skipped = []
self.to_skip_path = Path(settings.APP_PATH, "tmp", "to_skip")
self.actioner = SpotifyActioner()
Path(settings.DATA_PATH, "player_data").mkdir(parents=True, exist_ok = True)

def listen(self):
self.current_song = self.interface.get_current_song()
self.previous_song = self.interface.get_current_song()
self.update_end_time()
while True:
if time.time() < self.end_time:
if time.time() > self.end_time:

with open(self.to_skip_path, "r") as reader:
line = reader.readline()
if line == "True":
self.interface.save_song_features(self.current_song, skip_state="SKIPPED BY ALGORITHM")
self.actioner.skip_current_song()
with open(self.to_skip_path, "w") as writer:
writer.write("False")
self.current_song = self.interface.get_current_song()
self.previous_song = self.current_song
self.update_end_time()
self.all_non_skipped.append(self.previous_song)
self.previous_song["date_saved"] = str(datetime.now())
self.interface.save_song_features(self.previous_song,
"NOT SKIPPEP")
self.save_all_non_skipped()
print("not_skipped")
continue
else:
if self.previous_song["id"] != self.current_song["id"]:
self.all_skipped.append(self.previous_song)
self.save_all_skipped()
Expand All @@ -39,16 +61,7 @@ def listen(self):
self.update_end_time()
else:
self.previous_song = self.current_song
else:
self.current_song = self.interface.get_current_song()
self.previous_song = self.current_song
self.update_end_time()
self.all_non_skipped.append(self.previous_song)
self.previous_song["date_saved"] = str(datetime.now())
self.interface.save_song_features(self.previous_song,
"NOT SKIPPEP")
self.save_all_non_skipped()
print("not_skipped")

time.sleep(1)
self.current_song = self.interface.get_current_song()

Expand Down
2 changes: 1 addition & 1 deletion backend/src/spotify_api/spotify_actioner.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from backend.src.config import settings
from backend.src.spotify_api.api_interface import SPOTIFY_API_INTERFACE

class SpotifyActionnner:
class SpotifyActioner:
def __init__(self):
self.scope = settings.scope
self.token = spotipy.util.prompt_for_user_token(
Expand Down
7 changes: 4 additions & 3 deletions data/player_data/non_skipped.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
danceability,energy,key,loudness,mode,speechiness,acousticness,instrumentalness,liveness,valence,tempo,type,id,uri,track_href,analysis_url,duration_ms,time_signature,skip_state,date_saved,skip_probability
0.5,0.764,1,-6.834,0,0.0399,0.0444,0.0,0.176,0.426,139.659,audio_features,07VyIZXNfVS13AbebQDQWy,spotify:track:07VyIZXNfVS13AbebQDQWy,https://api.spotify.com/v1/tracks/07VyIZXNfVS13AbebQDQWy,https://api.spotify.com/v1/audio-analysis/07VyIZXNfVS13AbebQDQWy,203600,4,SKIPPEP,2022-10-23 12:14:07.579009,0
0.427,0.944,7,-2.885,1,0.0565,0.000197,0.0159,0.0625,0.248,101.078,audio_features,2093eVNfimjmNjU1gk1ES7,spotify:track:2093eVNfimjmNjU1gk1ES7,https://api.spotify.com/v1/tracks/2093eVNfimjmNjU1gk1ES7,https://api.spotify.com/v1/audio-analysis/2093eVNfimjmNjU1gk1ES7,260276,4,SKIPPEP,2022-10-23 12:14:25.342804,0
0.507,0.0249,3,-32.35,1,0.0409,0.995,0.931,0.0944,0.124,149.976,audio_features,3mVrRcYW3i21oY2SoJhlCM,spotify:track:3mVrRcYW3i21oY2SoJhlCM,https://api.spotify.com/v1/tracks/3mVrRcYW3i21oY2SoJhlCM,https://api.spotify.com/v1/audio-analysis/3mVrRcYW3i21oY2SoJhlCM,215333,4,SKIPPEP,2022-10-23 12:15:23.068399,0
0.484,0.992,11,-1.642,1,0.209,0.0156,0.00485,0.229,0.055,160.108,audio_features,5loB0lp0m3OSiv8ebZTJHm,spotify:track:5loB0lp0m3OSiv8ebZTJHm,https://api.spotify.com/v1/tracks/5loB0lp0m3OSiv8ebZTJHm,https://api.spotify.com/v1/audio-analysis/5loB0lp0m3OSiv8ebZTJHm,313224,4,SKIPPEP,2022-10-23 12:25:24.104769,0
0.646,0.98,0,-2.673,1,0.0821,0.0241,0.862,0.366,0.104,99.995,audio_features,3hA1V8AeeUA41grLuWhRWK,spotify:track:3hA1V8AeeUA41grLuWhRWK,https://api.spotify.com/v1/tracks/3hA1V8AeeUA41grLuWhRWK,https://api.spotify.com/v1/audio-analysis/3hA1V8AeeUA41grLuWhRWK,273600,4,SKIPPEP,2022-10-23 12:29:56.886259,0
0.719,0.704,1,-4.724,1,0.0476,0.0691,0.0,0.166,0.628,133.002,audio_features,25sgk305KZfyuqVBQIahim,spotify:track:25sgk305KZfyuqVBQIahim,https://api.spotify.com/v1/tracks/25sgk305KZfyuqVBQIahim,https://api.spotify.com/v1/audio-analysis/25sgk305KZfyuqVBQIahim,187436,4,SKIPPEP,2022-10-23 12:33:35.373115,0
0.692,0.711,0,-7.498,0,0.0317,0.225,0.0,0.12,0.875,125.135,audio_features,1TfqLAPs4K3s2rJMoCokcS,spotify:track:1TfqLAPs4K3s2rJMoCokcS,https://api.spotify.com/v1/tracks/1TfqLAPs4K3s2rJMoCokcS,https://api.spotify.com/v1/audio-analysis/1TfqLAPs4K3s2rJMoCokcS,216933,4,SKIPPEP,2022-10-23 12:33:40.148521,0
5 changes: 2 additions & 3 deletions data/player_data/skipped.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
danceability,energy,key,loudness,mode,speechiness,acousticness,instrumentalness,liveness,valence,tempo,type,id,uri,track_href,analysis_url,duration_ms,time_signature,skip_state,date_saved,skip_probability
0.5,0.764,1,-6.834,0,0.0399,0.0444,0.0,0.176,0.426,139.659,audio_features,07VyIZXNfVS13AbebQDQWy,spotify:track:07VyIZXNfVS13AbebQDQWy,https://api.spotify.com/v1/tracks/07VyIZXNfVS13AbebQDQWy,https://api.spotify.com/v1/audio-analysis/07VyIZXNfVS13AbebQDQWy,203600,4,SKIPPEP,2022-10-23 12:14:07.579009,0
0.427,0.944,7,-2.885,1,0.0565,0.000197,0.0159,0.0625,0.248,101.078,audio_features,2093eVNfimjmNjU1gk1ES7,spotify:track:2093eVNfimjmNjU1gk1ES7,https://api.spotify.com/v1/tracks/2093eVNfimjmNjU1gk1ES7,https://api.spotify.com/v1/audio-analysis/2093eVNfimjmNjU1gk1ES7,260276,4,SKIPPEP,2022-10-23 12:14:25.342804,0
0.507,0.0249,3,-32.35,1,0.0409,0.995,0.931,0.0944,0.124,149.976,audio_features,3mVrRcYW3i21oY2SoJhlCM,spotify:track:3mVrRcYW3i21oY2SoJhlCM,https://api.spotify.com/v1/tracks/3mVrRcYW3i21oY2SoJhlCM,https://api.spotify.com/v1/audio-analysis/3mVrRcYW3i21oY2SoJhlCM,215333,4,NOT SKIPPEP,2022-10-23 12:15:21.873385,0
0.249,0.789,4,-6.15,0,0.0496,0.0165,0.00239,0.104,0.19,76.293,audio_features,7C6K5CQkYOqCS1qcmGUQfV,spotify:track:7C6K5CQkYOqCS1qcmGUQfV,https://api.spotify.com/v1/tracks/7C6K5CQkYOqCS1qcmGUQfV,https://api.spotify.com/v1/audio-analysis/7C6K5CQkYOqCS1qcmGUQfV,1081316,4,SKIPPEP,2022-10-23 13:08:20.187898,0.0
0.565,0.806,8,-6.521,1,0.109,0.442,4.63e-06,0.0633,0.628,91.976,audio_features,72svLiYZ4D14ryt056I66v,spotify:track:72svLiYZ4D14ryt056I66v,https://api.spotify.com/v1/tracks/72svLiYZ4D14ryt056I66v,https://api.spotify.com/v1/audio-analysis/72svLiYZ4D14ryt056I66v,263520,4,,,

0 comments on commit 2bf604f

Please sign in to comment.