Improved spotify play skill
This commit is contained in:
parent
d1ddb1664c
commit
3e7e5288d4
@ -11,14 +11,8 @@ class SpotifySkill(Skill, metaclass=SkillRegistering):
|
|||||||
def handle_play_a_song(self, data):
|
def handle_play_a_song(self, data):
|
||||||
print(data)
|
print(data)
|
||||||
|
|
||||||
song_lists_matching = None
|
song_lists_matching = spotify.query_song(data['song'] if 'song' in data else None,
|
||||||
|
data['artist'] if 'artist' in data else None)
|
||||||
if 'song' in data:
|
|
||||||
song_lists_matching = spotify.query_song(data['song'])
|
|
||||||
if 'singer' in data:
|
|
||||||
song_lists_matching = spotify.query_song(None, data['singer'])
|
|
||||||
if 'song' in data and 'singer' in data:
|
|
||||||
song_lists_matching = spotify.query_song(data['song'], data['singer'])
|
|
||||||
|
|
||||||
if song_lists_matching is not None and len(song_lists_matching) >= 1:
|
if song_lists_matching is not None and len(song_lists_matching) >= 1:
|
||||||
print(
|
print(
|
||||||
@ -29,6 +23,8 @@ class SpotifySkill(Skill, metaclass=SkillRegistering):
|
|||||||
spotify.get_spotify().add_to_queue(uri=song_lists_matching[0]['uri'])
|
spotify.get_spotify().add_to_queue(uri=song_lists_matching[0]['uri'])
|
||||||
spotify.get_spotify().next_track()
|
spotify.get_spotify().next_track()
|
||||||
# spotify.get_spotify().start_playback(context_uri=song_lists_matching[0]['uri'])
|
# spotify.get_spotify().start_playback(context_uri=song_lists_matching[0]['uri'])
|
||||||
|
else:
|
||||||
|
print("Nothing found for :" + str(data))
|
||||||
|
|
||||||
@intent_file_handler("pause_music.intent", "PauseSpotifyIntent")
|
@intent_file_handler("pause_music.intent", "PauseSpotifyIntent")
|
||||||
def pause_music(self, data):
|
def pause_music(self, data):
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
|
import random
|
||||||
import re
|
import re
|
||||||
|
import string
|
||||||
|
from difflib import SequenceMatcher
|
||||||
|
|
||||||
import spotipy
|
import spotipy
|
||||||
from lingua_franca.parse import fuzzy_match
|
from lingua_franca.parse import fuzzy_match
|
||||||
@ -22,18 +25,23 @@ def get_spotify():
|
|||||||
|
|
||||||
|
|
||||||
def query_song(song=None, artist=None):
|
def query_song(song=None, artist=None):
|
||||||
print(str(song) + " / " + str(artist))
|
|
||||||
if song is not None and artist is not None:
|
if song is not None and artist is not None:
|
||||||
song_search = '*{}* artist:{}'.format(song, artist)
|
query = '*{}* artist:{}'.format(song, artist)
|
||||||
elif song is None and artist is not None:
|
elif song is None and artist is not None:
|
||||||
return query_artist(artist)
|
query = "artist:" + artist
|
||||||
|
elif song is not None and artist is None:
|
||||||
|
query = song
|
||||||
else:
|
else:
|
||||||
song_search = song
|
song = "Back In Black AC/DC" # proof that jarvis has a heart :)
|
||||||
|
query = song
|
||||||
|
|
||||||
data = get_spotify().search(q=song_search, type='track')['tracks']['items']
|
data = get_spotify().search(q=query, limit=6, type='track')['tracks']['items']
|
||||||
if data and len(data) > 0:
|
if data and len(data) > 0:
|
||||||
tracks = [(best_confidence(d['name'], song), d)
|
if song is not None:
|
||||||
for d in data]
|
tracks = [(best_confidence(d['name'], song), d) for d in data]
|
||||||
|
else:
|
||||||
|
tracks = [(best_confidence(d['name'], 'None'), d) for d in data]
|
||||||
|
|
||||||
tracks.sort(key=lambda x: x[0])
|
tracks.sort(key=lambda x: x[0])
|
||||||
|
|
||||||
tracks.reverse() # Place best matches first
|
tracks.reverse() # Place best matches first
|
||||||
@ -50,15 +58,6 @@ def query_song(song=None, artist=None):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def query_artist(artist):
|
|
||||||
tracks = get_spotify().search(q=("artist:" + artist), limit=10, type='track')['tracks']['items']
|
|
||||||
if len(tracks) > 0:
|
|
||||||
tracks.reverse() # Place best matches first
|
|
||||||
|
|
||||||
return tracks
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def best_confidence(title, query):
|
def best_confidence(title, query):
|
||||||
"""Find best match for a title against a query.
|
"""Find best match for a title against a query.
|
||||||
Some titles include ( Remastered 2016 ) and similar info. This method
|
Some titles include ( Remastered 2016 ) and similar info. This method
|
||||||
@ -70,6 +69,13 @@ def best_confidence(title, query):
|
|||||||
Returns:
|
Returns:
|
||||||
(float) best condidence
|
(float) best condidence
|
||||||
"""
|
"""
|
||||||
|
if query == 'None':
|
||||||
|
return SequenceMatcher(None, random_string_generator(5), random_string_generator(5)).ratio()
|
||||||
|
|
||||||
best = title.lower()
|
best = title.lower()
|
||||||
best_stripped = re.sub(r'(\(.+\)|-.+)$', '', best).strip()
|
best_stripped = re.sub(r'(\(.+\)|-.+)$', '', best).strip()
|
||||||
return max(fuzzy_match(best, query), fuzzy_match(best_stripped, query))
|
return max(fuzzy_match(best, query), fuzzy_match(best_stripped, query))
|
||||||
|
|
||||||
|
|
||||||
|
def random_string_generator(str_size):
|
||||||
|
return ''.join(random.choice(string.ascii_letters + string.punctuation) for x in range(str_size))
|
||||||
|
@ -1,33 +1,25 @@
|
|||||||
Joue {song} sur spotify
|
Joue {song} (sur spotify|)
|
||||||
Joue {song}
|
Joue (le|la|) chanson {song}
|
||||||
Joue la chanson {song}
|
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist}
|
||||||
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
Mets (le|la|) chanson {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||||
Mets la chanson {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
(Mets|Joue) (le|la|) (chanson|morceau|titre|) {song} (sur spotify|)
|
||||||
Mets la chanson {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
Mets (le|la|) titre {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||||
Mets le titre {song}
|
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||||
Mets le titre {song} sur spotify
|
Joue (le|la|) (chanson|morceau|titre|) {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||||
Mets le morceau {song}
|
Mets (moi|) voir {song} (sur spotify|)
|
||||||
Mets le morceau {song} sur spotify
|
Mets (moi|) voir un peu de {artist} (sur spotify|)
|
||||||
Joue le morceau {song}
|
Mets voir {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||||
Joue le morceau {song} sur spotify
|
Fait moi écouter {song} (sur spotify|)
|
||||||
Mets le titre {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
Fait moi écouter {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||||
Mets le titre {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
Mets de la musique (de la chanteuse|du chanteur|de) {artist}
|
||||||
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
(Joue|Mets) quelque chose (de la chanteuse|du chanteur|de) {artist}
|
||||||
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
Joue (un|une) (chanson|morceau|titre|) (de la chanteuse|du chanteur|de) {artist}
|
||||||
Joue le morceau {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
Joue du {artist} (sur spotify|)
|
||||||
Joue le morceau {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
Joue voir (la chanson|le morceau|le titre|) {song}
|
||||||
Mets voir {song}
|
Joue voir (la chanson|le morceau|le titre|) {song} (de la chanteuse|du chanteur|de) {artist}
|
||||||
Mets voir {song} sur spotify
|
Joue voir {song} de {artist}
|
||||||
Mets voir {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
Tu peux jouer le morceau {song}
|
||||||
Mets voir {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
Tu peux jouer le morceau {song} (de la chanteuse|du chanteur|de) {artist}
|
||||||
Fait moi écouter {song}
|
Joue moi voir {song} (sur spotify|)
|
||||||
Fait moi écouter {song} sur spotify
|
Joue moi voir {song} de {artist} (sur spotify|)
|
||||||
Fait moi écouter {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
(Joue|Mets) moi un peu de {artist} (sur spotify|)
|
||||||
Fait moi écouter {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
|
||||||
Joue quelque chose de {singer}
|
|
||||||
Mets de la musique du chanteur {singer}
|
|
||||||
Joue quelque chose du chanteur {singer}
|
|
||||||
Joue quelque chose de la chanteuse {singer}
|
|
||||||
Mets quelque chose de {singer}
|
|
||||||
Mets quelque chose de la chanteuse {singer}
|
|
||||||
Mets quelque chose du chanteur {singer}
|
|
Reference in New Issue
Block a user