diff --git a/README.md b/README.md index 41704aa..558bcdf 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,20 @@ Currently there are no available builds as it's still in development.
But you can try to run it yourself!
## Running instructions -NOTE: Python 3 is required for this app.
+### Standard way +NOTE: Python 3 is required for this app. Make sure you tick the option to add python to PATH when installing.
+NOTE: If `pip3` and `python3` are "not recognized commands" try using `pip` and `python` instead

-After installing python install the dependencies using `pip install -r requirements.txt`
-Run `python -m deemix --help` to see how to use the app
-Run `python server.py` to start the server and then connect to 127.0.0.1:33333.
+After installing python install the dependencies using `pip3 install -r requirements.txt`
+Run `python3 -m deemix --help` to see how to use the app
+Run `python3 server.py` to start the server and then connect to 127.0.0.1:33333.
Enjoy!
+### Easy Windows way +Download `install.bat` file to your PC and place it in the folder where you want Deemix to live
+Start the `install.bat` as administrator
+Wait for it to finish, then run the `start.bat`
+ ## What's left to do? Library: - Add a log system @@ -26,7 +33,6 @@ Library: WebUI: - Stylize and separate the options in the Settings tab - Home tab -- Favorites / Playlists tab - About Section - Animations and style polishing - ? diff --git a/deemix/api/deezer.py b/deemix/api/deezer.py index 56814d5..0765e4c 100755 --- a/deemix/api/deezer.py +++ b/deemix/api/deezer.py @@ -253,17 +253,137 @@ class Deezer: def get_lyrics_gw(self, sng_id): return self.gw_api_call('song.getLyrics', {'sng_id': sng_id})["results"] - def get_user_playlist(self, user_id): + def get_user_playlists_gw(self, user_id): + data = self.gw_api_call('deezer.pageProfile', {'user_id': user_id, 'tab': 'playlists', 'nb': -1})['results']['TAB']['playlists']['data'] + result = [] + for playlist in data: + item = { + 'id': playlist['PLAYLIST_ID'], + 'title': playlist['TITLE'], + 'nb_tracks': playlist['NB_SONG'], + 'link': 'https://www.deezer.com/playlist/'+playlist['PLAYLIST_ID'], + 'picture': 'https://api.deezer.com/playlist/'+playlist['PLAYLIST_ID']+'/image', + 'picture_small': 'https://e-cdns-images.dzcdn.net/images/'+playlist['PICTURE_TYPE']+'/'+playlist['PLAYLIST_PICTURE']+'/56x56-000000-80-0-0.jpg', + 'picture_medium': 'https://e-cdns-images.dzcdn.net/images/'+playlist['PICTURE_TYPE']+'/'+playlist['PLAYLIST_PICTURE']+'/250x250-000000-80-0-0.jpg', + 'picture_big': 'https://e-cdns-images.dzcdn.net/images/'+playlist['PICTURE_TYPE']+'/'+playlist['PLAYLIST_PICTURE']+'/500x500-000000-80-0-0.jpg', + 'picture_xl': 'https://e-cdns-images.dzcdn.net/images/'+playlist['PICTURE_TYPE']+'/'+playlist['PLAYLIST_PICTURE']+'/1000x1000-000000-80-0-0.jpg', + 'tracklist': 'https://api.deezer.com/playlist/'+playlist['PLAYLIST_ID']+'/tracks', + 'creator': { + 'id': playlist['PARENT_USER_ID'], + 'name': playlist['PARENT_USERNAME'] if 'PARENT_USERNAME' in playlist else self.user['name'] + }, + 'type': 'playlist' + } + result.append(item) + return result + + def get_user_albums_gw(self, user_id): + data = self.gw_api_call('deezer.pageProfile', {'user_id': user_id, 'tab': 'albums', 'nb': -1})['results']['TAB']['albums']['data'] + result = [] + for album in data: + item = { + 'id': album['ALB_ID'], + 'title': album['ALB_TITLE'], + 'link': 'https://www.deezer.com/album/'+album['ALB_ID'], + 'cover': 'https://api.deezer.com/album/'+album['ALB_ID']+'/image', + 'cover_small': 'https://e-cdns-images.dzcdn.net/images/cover/'+album['ALB_PICTURE']+'/56x56-000000-80-0-0.jpg', + 'cover_medium': 'https://e-cdns-images.dzcdn.net/images/cover/'+album['ALB_PICTURE']+'/250x250-000000-80-0-0.jpg', + 'cover_big': 'https://e-cdns-images.dzcdn.net/images/cover/'+album['ALB_PICTURE']+'/500x500-000000-80-0-0.jpg', + 'cover_xl': 'https://e-cdns-images.dzcdn.net/images/cover/'+album['ALB_PICTURE']+'/1000x1000-000000-80-0-0.jpg', + 'tracklist': 'https://api.deezer.com/album/'+album['ALB_ID']+'/tracks', + 'explicit_lyrics': album['EXPLICIT_ALBUM_CONTENT']['EXPLICIT_LYRICS_STATUS'] > 0, + 'artist': { + 'id': album['ART_ID'], + 'name': album['ART_NAME'], + 'picture': 'https://api.deezer.com/artist/'+album['ART_ID']+'image', + 'tracklist': 'https://api.deezer.com/artist/'+album['ART_ID']+'/top?limit=50' + }, + 'type': 'album' + } + result.append(item) + return result + + def get_user_artists_gw(self, user_id): + data = self.gw_api_call('deezer.pageProfile', {'user_id': user_id, 'tab': 'artists', 'nb': -1})['results']['TAB']['artists']['data'] + result = [] + for artist in data: + item = { + 'id': artist['ART_ID'], + 'name': artist['ART_NAME'], + 'link': 'https://www.deezer.com/artist/'+artist['ART_ID'], + 'picture': 'https://api.deezer.com/artist/'+artist['ART_ID']+'/image', + 'picture_small': 'https://e-cdns-images.dzcdn.net/images/artist/'+artist['ART_ID']+'/56x56-000000-80-0-0.jpg', + 'picture_medium': 'https://e-cdns-images.dzcdn.net/images/artist/'+artist['ART_ID']+'/250x250-000000-80-0-0.jpg', + 'picture_big': 'https://e-cdns-images.dzcdn.net/images/artist/'+artist['ART_ID']+'/500x500-000000-80-0-0.jpg', + 'picture_xl': 'https://e-cdns-images.dzcdn.net/images/artist/'+artist['ART_ID']+'/1000x1000-000000-80-0-0.jpg', + 'nb_fan': artist['NB_FAN'], + 'tracklist': 'https://api.deezer.com/artist/'+artist['ART_ID']+'/top?limit=50', + 'type': 'artist' + } + result.append(item) + return result + + def get_user_tracks_gw(self, user_id): + data = self.gw_api_call('deezer.pageProfile', {'user_id': user_id, 'tab': 'loved', 'nb': -1})['results']['TAB']['loved']['data'] + result = [] + for track in data: + item = { + 'id': track['SNG_ID'], + 'title': track['SNG_TITLE'], + 'link': 'https://www.deezer.com/track/'+track['SNG_ID'], + 'duration': track['DURATION'], + 'rank': track['RANK_SNG'], + 'explicit_lyrics': int(track['EXPLICIT_LYRICS']) > 0, + 'explicit_content_lyrics': track['EXPLICIT_TRACK_CONTENT']['EXPLICIT_COVER_STATUS'], + 'explicit_content_cover': track['EXPLICIT_TRACK_CONTENT']['EXPLICIT_LYRICS_STATUS'], + 'time_add': track['DATE_ADD'], + 'album': { + 'id': track['ALB_ID'], + 'title': track['ALB_TITLE'], + 'cover': 'https://api.deezer.com/album/'+track['ALB_ID']+'/image', + 'cover_small': 'https://e-cdns-images.dzcdn.net/images/cover/'+track['ALB_PICTURE']+'/56x56-000000-80-0-0.jpg', + 'cover_medium': 'https://e-cdns-images.dzcdn.net/images/cover/'+track['ALB_PICTURE']+'/250x250-000000-80-0-0.jpg', + 'cover_big': 'https://e-cdns-images.dzcdn.net/images/cover/'+track['ALB_PICTURE']+'/500x500-000000-80-0-0.jpg', + 'cover_xl': 'https://e-cdns-images.dzcdn.net/images/cover/'+track['ALB_PICTURE']+'/1000x1000-000000-80-0-0.jpg', + 'tracklist': 'https://api.deezer.com/album/'+track['ALB_ID']+'/tracks', + 'type': 'album' + }, + 'artist': { + 'id': track['ART_ID'], + 'name': track['ART_NAME'], + 'picture': 'https://api.deezer.com/artist/'+track['ART_ID']+'/image', + 'picture_small': 'https://e-cdns-images.dzcdn.net/images/artist/'+track['ART_PICTURE']+'/56x56-000000-80-0-0.jpg', + 'picture_medium': 'https://e-cdns-images.dzcdn.net/images/artist/'+track['ART_PICTURE']+'/250x250-000000-80-0-0.jpg', + 'picture_big': 'https://e-cdns-images.dzcdn.net/images/artist/'+track['ART_PICTURE']+'/500x500-000000-80-0-0.jpg', + 'picture_xl': 'https://e-cdns-images.dzcdn.net/images/artist/'+track['ART_PICTURE']+'/1000x1000-000000-80-0-0.jpg', + 'tracklist': 'https://api.deezer.com/artist/'+track['ART_ID']+'/top?limit=50', + 'type': 'artist' + }, + 'type': 'track' + } + result.append(item) + return result + + def get_user_playlists(self, user_id): return self.api_call('user/' + str(user_id) + '/playlists', {'limit': -1}) - def get_track(self, user_id): - return self.api_call('track/' + str(user_id)) + def get_user_albums(self, user_id): + return self.api_call('user/' + str(user_id) + '/albums', {'limit': -1}) + + def get_user_artists(self, user_id): + return self.api_call('user/' + str(user_id) + '/artists', {'limit': -1}) + + def get_user_tracks(self, user_id): + return self.api_call('user/' + str(user_id) + '/tracks', {'limit': -1}) + + def get_track(self, sng_id): + return self.api_call('track/' + str(sng_id)) def get_track_by_ISRC(self, isrc): return self.api_call('track/isrc:' + isrc) def get_charts_countries(self): - temp = self.get_user_playlist('637006841')['data'] + temp = self.get_user_playlists('637006841')['data'] result = sorted(temp, key=lambda k: k['title']) if not result[0]['title'].startswith('Top'): result = result[1:]