wip
This commit is contained in:
parent
9a7e720e7e
commit
4c72748b9f
1 changed files with 42 additions and 3 deletions
|
@ -2,7 +2,7 @@
|
||||||
[//]: # (description: Use Platypush to manage your music activity, discovery playlists and be on top of new releases.)
|
[//]: # (description: Use Platypush to manage your music activity, discovery playlists and be on top of new releases.)
|
||||||
[//]: # (image: /img/music-automation.png)
|
[//]: # (image: /img/music-automation.png)
|
||||||
[//]: # (author: Fabio Manganiello <fabio@platypush.tech>)
|
[//]: # (author: Fabio Manganiello <fabio@platypush.tech>)
|
||||||
[//]: # (published: 2022-09-18)
|
[//]: # (published: 2022-09-19)
|
||||||
|
|
||||||
I have been an enthusiastic user of mpd and mopidy for nearly two decades. I
|
I have been an enthusiastic user of mpd and mopidy for nearly two decades. I
|
||||||
have already [written an
|
have already [written an
|
||||||
|
@ -167,8 +167,7 @@ database.
|
||||||
I'll assume that you have a Postgres database running somewhere, but the script
|
I'll assume that you have a Postgres database running somewhere, but the script
|
||||||
below can be easily adapted also to other DBMS's.
|
below can be easily adapted also to other DBMS's.
|
||||||
|
|
||||||
Database initialization script (download/pastebin link is
|
Database initialization script:
|
||||||
[here](https://paste.fabiomanganiello.com/blacklight/music.sql)):
|
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
-- New listened tracks will be pushed to the tmp_music table, and normalized by
|
-- New listened tracks will be pushed to the tmp_music table, and normalized by
|
||||||
|
@ -241,6 +240,20 @@ create table music_discovery_playlist_track(
|
||||||
foreign key(track_id) references music_track(id)
|
foreign key(track_id) references music_track(id)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
-- This table contains the new releases from artist that we've listened to at
|
||||||
|
-- least once
|
||||||
|
drop table if exists new_release cascade;
|
||||||
|
create table new_release(
|
||||||
|
id serial not null,
|
||||||
|
artist varchar(255) not null,
|
||||||
|
album varchar(255) not null,
|
||||||
|
genre varchar(255),
|
||||||
|
created_at timestamp with time zone default CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
primary key(id),
|
||||||
|
constraint u_artist_title unique(artist, album)
|
||||||
|
);
|
||||||
|
|
||||||
-- This trigger normalizes the tracks inserted into tmp_track
|
-- This trigger normalizes the tracks inserted into tmp_track
|
||||||
create or replace function sync_music_data()
|
create or replace function sync_music_data()
|
||||||
returns trigger as
|
returns trigger as
|
||||||
|
@ -498,6 +511,7 @@ TrackActivity = Base.classes.music_activity
|
||||||
TrackSimilar = Base.classes.music_similar
|
TrackSimilar = Base.classes.music_similar
|
||||||
DiscoveryPlaylist = Base.classes.music_discovery_playlist
|
DiscoveryPlaylist = Base.classes.music_discovery_playlist
|
||||||
DiscoveryPlaylistTrack = Base.classes.music_discovery_playlist_track
|
DiscoveryPlaylistTrack = Base.classes.music_discovery_playlist_track
|
||||||
|
NewRelease = Base.classes.new_release
|
||||||
|
|
||||||
|
|
||||||
def get_db_session():
|
def get_db_session():
|
||||||
|
@ -955,3 +969,28 @@ your Python interpreter:
|
||||||
|
|
||||||
If everything went well, you should soon see a new playlist in your collection
|
If everything went well, you should soon see a new playlist in your collection
|
||||||
named _Discover Weekly [date]_. Congratulations!
|
named _Discover Weekly [date]_. Congratulations!
|
||||||
|
|
||||||
|
## Release radar playlist
|
||||||
|
|
||||||
|
Another great feature of Spotify and Tidal is the ability to provide "release
|
||||||
|
radar" playlists that contain new releases from artists that we may like.
|
||||||
|
|
||||||
|
We now have a powerful way of creating such playlists ourselves though. We
|
||||||
|
previously configured Platypush to subscribe to the RSS feed from
|
||||||
|
newalbumreleases.net. Populating our release radar playlist involves the
|
||||||
|
following steps:
|
||||||
|
|
||||||
|
1. Creating a hook that reacts to [`NewFeedEntryEvent`
|
||||||
|
events](https://docs.platypush.tech/platypush/events/rss.html) on this feed.
|
||||||
|
2. The hook will store new releases that match artists in our collection on the
|
||||||
|
`new_release` table that we created when we initialized the database.
|
||||||
|
3. A cron will scan this table on a weekly basis, search the tracks on
|
||||||
|
Spotify/Tidal, and populate our playlist just like we did for _Discover
|
||||||
|
Weekly_.
|
||||||
|
|
||||||
|
Let's put these pieces together in a new user script stored under e.g.
|
||||||
|
`~/.config/platypush/scripts/music/releases.py`:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# ~/.config/platypush/scripts/music/releases.py
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in a new issue