From cb7021152f267ee1689175cc2f4fbd0b6c882c09 Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Thu, 2 Jun 2022 20:57:35 +0200 Subject: [PATCH] Added `get_recent_tracks` method to the `lastfm` plugin --- platypush/plugins/lastfm/__init__.py | 59 +++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/platypush/plugins/lastfm/__init__.py b/platypush/plugins/lastfm/__init__.py index a43230247..1a838d7ad 100644 --- a/platypush/plugins/lastfm/__init__.py +++ b/platypush/plugins/lastfm/__init__.py @@ -1,4 +1,5 @@ import time +from typing import Optional, List from platypush.plugins import Plugin, action @@ -29,6 +30,7 @@ class LastfmPlugin(Plugin): """ import pylast + super().__init__() self.api_key = api_key @@ -40,7 +42,8 @@ class LastfmPlugin(Plugin): api_key=self.api_key, api_secret=self.api_secret, username=self.username, - password_hash=pylast.md5(self.password)) + password_hash=pylast.md5(self.password), + ) @action def scrobble(self, artist, title, album=None): @@ -81,4 +84,58 @@ class LastfmPlugin(Plugin): album=album, ) + @action + def get_recent_tracks( + self, + username: Optional[str] = None, + limit: int = 10, + time_from: Optional[int] = None, + time_to: Optional[int] = None, + ) -> List[dict]: + """ + Get a list of recently played tracks. + + :param username: Target username (default: the one registered to this + plugin). + :param limit: Maximum number of tracks to be returned (default: 10). + :param time_from: Return tracks starting from this time + (as a UNIX timestamp). + :param time_to: Return tracks starting up to this time + (as a UNIX timestamp). + :return: Example: + + .. code-block:: json + + [ + { + "artist": "Led Zeppelin", + "title": "Stairway to Heaven", + "album": "IV", + "timestamp": 1654196137 + } + ] + + """ + + return [ + { + 'title': track.track.title, + 'album': track.album, + 'timestamp': int(track.timestamp or 0), + **( + {'artist': track.track.artist.name} + if track.track.artist + else {'artist': None} + ), + } + for track in self.lastfm.get_user( + username or self.username + ).get_recent_tracks( + limit=limit, + time_from=time_from, + time_to=time_to, + ) + ] + + # vim:sw=4:ts=4:et: