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):
|
||||
print(data)
|
||||
|
||||
song_lists_matching = 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'])
|
||||
song_lists_matching = spotify.query_song(data['song'] if 'song' in data else None,
|
||||
data['artist'] if 'artist' in data else None)
|
||||
|
||||
if song_lists_matching is not None and len(song_lists_matching) >= 1:
|
||||
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().next_track()
|
||||
# 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")
|
||||
def pause_music(self, data):
|
||||
|
@ -1,4 +1,7 @@
|
||||
import random
|
||||
import re
|
||||
import string
|
||||
from difflib import SequenceMatcher
|
||||
|
||||
import spotipy
|
||||
from lingua_franca.parse import fuzzy_match
|
||||
@ -22,18 +25,23 @@ def get_spotify():
|
||||
|
||||
|
||||
def query_song(song=None, artist=None):
|
||||
print(str(song) + " / " + str(artist))
|
||||
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:
|
||||
return query_artist(artist)
|
||||
query = "artist:" + artist
|
||||
elif song is not None and artist is None:
|
||||
query = song
|
||||
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:
|
||||
tracks = [(best_confidence(d['name'], song), d)
|
||||
for d in data]
|
||||
if song is not None:
|
||||
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.reverse() # Place best matches first
|
||||
@ -50,15 +58,6 @@ def query_song(song=None, artist=None):
|
||||
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):
|
||||
"""Find best match for a title against a query.
|
||||
Some titles include ( Remastered 2016 ) and similar info. This method
|
||||
@ -70,6 +69,13 @@ def best_confidence(title, query):
|
||||
Returns:
|
||||
(float) best condidence
|
||||
"""
|
||||
if query == 'None':
|
||||
return SequenceMatcher(None, random_string_generator(5), random_string_generator(5)).ratio()
|
||||
|
||||
best = title.lower()
|
||||
best_stripped = re.sub(r'(\(.+\)|-.+)$', '', best).strip()
|
||||
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}
|
||||
Joue la chanson {song}
|
||||
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
||||
Mets la chanson {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
||||
Mets la chanson {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
||||
Mets le titre {song}
|
||||
Mets le titre {song} sur spotify
|
||||
Mets le morceau {song}
|
||||
Mets le morceau {song} sur spotify
|
||||
Joue le morceau {song}
|
||||
Joue le morceau {song} sur spotify
|
||||
Mets le titre {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
||||
Mets le titre {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
||||
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
||||
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
||||
Joue le morceau {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
||||
Joue le morceau {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
||||
Mets voir {song}
|
||||
Mets voir {song} sur spotify
|
||||
Mets voir {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
||||
Mets voir {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer} sur spotify
|
||||
Fait moi écouter {song}
|
||||
Fait moi écouter {song} sur spotify
|
||||
Fait moi écouter {song} (de|des|du groupe|du chanteur|de la chanteuse) {singer}
|
||||
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}
|
||||
Joue {song} (sur spotify|)
|
||||
Joue (le|la|) chanson {song}
|
||||
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist}
|
||||
Mets (le|la|) chanson {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||
(Mets|Joue) (le|la|) (chanson|morceau|titre|) {song} (sur spotify|)
|
||||
Mets (le|la|) titre {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||
Joue {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||
Joue (le|la|) (chanson|morceau|titre|) {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||
Mets (moi|) voir {song} (sur spotify|)
|
||||
Mets (moi|) voir un peu de {artist} (sur spotify|)
|
||||
Mets voir {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||
Fait moi écouter {song} (sur spotify|)
|
||||
Fait moi écouter {song} (de|des|du groupe|du chanteur|de la chanteuse) {artist} (sur spotify|)
|
||||
Mets de la musique (de la chanteuse|du chanteur|de) {artist}
|
||||
(Joue|Mets) quelque chose (de la chanteuse|du chanteur|de) {artist}
|
||||
Joue (un|une) (chanson|morceau|titre|) (de la chanteuse|du chanteur|de) {artist}
|
||||
Joue du {artist} (sur spotify|)
|
||||
Joue voir (la chanson|le morceau|le titre|) {song}
|
||||
Joue voir (la chanson|le morceau|le titre|) {song} (de la chanteuse|du chanteur|de) {artist}
|
||||
Joue voir {song} de {artist}
|
||||
Tu peux jouer le morceau {song}
|
||||
Tu peux jouer le morceau {song} (de la chanteuse|du chanteur|de) {artist}
|
||||
Joue moi voir {song} (sur spotify|)
|
||||
Joue moi voir {song} de {artist} (sur spotify|)
|
||||
(Joue|Mets) moi un peu de {artist} (sur spotify|)
|
Reference in New Issue
Block a user