forked from platypush/platypush
Added get_track and get_similar_tracks methods on lastfm
plugin
This commit is contained in:
parent
5971ec32c8
commit
3d22d6b082
1 changed files with 75 additions and 0 deletions
|
@ -137,5 +137,80 @@ class LastfmPlugin(Plugin):
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@action
|
||||||
|
def get_track(self, artist: str, title: str) -> Optional[dict]:
|
||||||
|
"""
|
||||||
|
Get the information about a track.
|
||||||
|
|
||||||
|
:param artist: Track artist.
|
||||||
|
:param title: Track title.
|
||||||
|
:return: The retrieved track, with the title corrected if required, if
|
||||||
|
it exists on Last.FM. Example:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"artist": "Led Zeppelin",
|
||||||
|
"title": "Stairway to Heaven",
|
||||||
|
"tags": ["rock", "hard rock", "70s"]
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
track = self.lastfm.get_track(artist, title)
|
||||||
|
return {
|
||||||
|
'title': track.get_correction(),
|
||||||
|
'tags': track.get_tags(),
|
||||||
|
**({'artist': track.artist.name} if track.artist else {'artist': None}),
|
||||||
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
def get_similar_tracks(self, artist: str, title: str) -> List[dict]:
|
||||||
|
"""
|
||||||
|
Get the tracks that are similar to a specific track.
|
||||||
|
|
||||||
|
:param artist: Track artist.
|
||||||
|
:param title: Track title.
|
||||||
|
:return: A list of similar tracks, each with a ``match`` score between
|
||||||
|
0 and 1. Example:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"artist": "Led Zeppelin",
|
||||||
|
"title": "Black Dog",
|
||||||
|
"score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"artist": "Led Zeppelin",
|
||||||
|
"title": "Rock and Roll",
|
||||||
|
"score": 0.89
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"artist": "Eagles",
|
||||||
|
"title": "Hotel California",
|
||||||
|
"score": 0.471
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"artist": "Deep Purple",
|
||||||
|
"title": "Smoke on the Water",
|
||||||
|
"score": 0.393
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
"""
|
||||||
|
track = self.lastfm.get_track(artist, title)
|
||||||
|
if not track:
|
||||||
|
return []
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
'artist': t.item.artist.name,
|
||||||
|
'title': t.item.title,
|
||||||
|
'score': t.match,
|
||||||
|
}
|
||||||
|
for t in track.get_similar()
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
Loading…
Reference in a new issue