Skip to content

Commit 1e5bcfb

Browse files
authored
Add support for fetching recently played tracks (#310)
1 parent 3b8b69b commit 1e5bcfb

5 files changed

Lines changed: 10878 additions & 0 deletions

File tree

src/spotifyaio/models.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,22 @@ class SavedTrackResponse(DataClassORJSONMixin):
184184
items: list[SavedTrack]
185185

186186

187+
@dataclass
188+
class PlayedTrackResponse(DataClassORJSONMixin):
189+
"""PlayedTrack response model."""
190+
191+
items: list[PlayedTrack]
192+
193+
194+
@dataclass
195+
class PlayedTrack(DataClassORJSONMixin):
196+
"""Played track model."""
197+
198+
played_at: datetime
199+
track: Track
200+
context: Context
201+
202+
187203
@dataclass
188204
class ArtistResponse(DataClassORJSONMixin):
189205
"""Artist response model."""

src/spotifyaio/spotify.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
Episode,
2525
FeaturedPlaylistResponse,
2626
PlaybackState,
27+
PlayedTrack,
28+
PlayedTrackResponse,
2729
Playlist,
2830
PlaylistResponse,
2931
RepeatMode,
@@ -289,6 +291,12 @@ async def get_saved_shows(self) -> list[SavedShow]:
289291
response = await self._get("v1/me/shows", params=params)
290292
return SavedShowResponse.from_json(response).items
291293

294+
async def get_recently_played_tracks(self) -> list[PlayedTrack]:
295+
"""Get recently played tracks."""
296+
params: dict[str, Any] = {"limit": 48}
297+
response = await self._get("v1/me/player/recently-played", params=params)
298+
return PlayedTrackResponse.from_json(response).items
299+
292300
async def get_category_playlists(self, category_id: str) -> list[BasePlaylist]:
293301
"""Get category playlists."""
294302
params: dict[str, Any] = {"limit": 48}

0 commit comments

Comments
 (0)