deezer-py/deezer/utils.py

218 lines
12 KiB
Python
Raw Normal View History

2020-11-19 20:04:41 +00:00
import re
2020-11-12 15:55:24 +00:00
RELEASE_TYPE = {0:"single", 1:"album", 2:"compile", 3:"ep", 4:"bundle"}
# maps gw-light api user/tracks to standard api
def map_user_track(track):
result = {
2020-11-12 15:55:24 +00:00
'id': track['SNG_ID'],
'title': track['SNG_TITLE'],
'link': 'https://www.deezer.com/track/'+str(track['SNG_ID']),
'duration': track['DURATION'],
'rank': track['RANK_SNG'],
'explicit_lyrics': False,
'explicit_content_lyrics': False,
'explicit_content_cover': False,
2021-12-07 10:38:32 +00:00
'time_add': track.get('DATE_ADD') or track.get('DATE_FAVORITE'),
2020-11-12 15:55:24 +00:00
'album': {
'id': track['ALB_ID'],
'title': track['ALB_TITLE'],
'cover': 'https://api.deezer.com/album/'+str(track['ALB_ID'])+'/image',
'cover_small': 'https://e-cdns-images.dzcdn.net/images/cover/'+str(track['ALB_PICTURE'])+'/56x56-000000-80-0-0.jpg',
'cover_medium': 'https://e-cdns-images.dzcdn.net/images/cover/'+str(track['ALB_PICTURE'])+'/250x250-000000-80-0-0.jpg',
'cover_big': 'https://e-cdns-images.dzcdn.net/images/cover/'+str(track['ALB_PICTURE'])+'/500x500-000000-80-0-0.jpg',
'cover_xl': 'https://e-cdns-images.dzcdn.net/images/cover/'+str(track['ALB_PICTURE'])+'/1000x1000-000000-80-0-0.jpg',
'tracklist': 'https://api.deezer.com/album/'+str(track['ALB_ID'])+'/tracks',
'type': 'album'
},
'artist': {
'id': track['ART_ID'],
'name': track['ART_NAME'],
'picture': 'https://api.deezer.com/artist/'+str(track['ART_ID'])+'/image',
'picture_small': None,
'picture_medium': None,
'picture_big': None,
'picture_xl': None,
2020-11-12 15:55:24 +00:00
'tracklist': 'https://api.deezer.com/artist/'+str(track['ART_ID'])+'/top?limit=50',
'type': 'artist'
},
'type': 'track'
}
if int(track['SNG_ID']) >= 0:
art_picture = track.get('ART_PICTURE')
if not art_picture:
for artist in track['ARTISTS']:
if artist['ART_ID'] == track['ART_ID']:
art_picture = artist['ART_PICTURE']
break
result['explicit_lyrics'] = int(track['EXPLICIT_LYRICS']) > 0
result['explicit_content_lyrics'] = track['EXPLICIT_TRACK_CONTENT']['EXPLICIT_COVER_STATUS']
result['explicit_content_cover'] = track['EXPLICIT_TRACK_CONTENT']['EXPLICIT_LYRICS_STATUS']
result['artist']['picture_small'] = 'https://e-cdns-images.dzcdn.net/images/artist/'+str(art_picture)+'/56x56-000000-80-0-0.jpg'
result['artist']['picture_medium'] = 'https://e-cdns-images.dzcdn.net/images/artist/'+str(art_picture)+'/250x250-000000-80-0-0.jpg'
result['artist']['picture_big'] = 'https://e-cdns-images.dzcdn.net/images/artist/'+str(art_picture)+'/500x500-000000-80-0-0.jpg'
result['artist']['picture_xl'] = 'https://e-cdns-images.dzcdn.net/images/artist/'+str(art_picture)+'/1000x1000-000000-80-0-0.jpg'
return result
2020-11-12 15:55:24 +00:00
# maps gw-light api user/artists to standard api
def map_user_artist(artist):
return {
'id': artist['ART_ID'],
'name': artist['ART_NAME'],
'link': 'https://www.deezer.com/artist/'+str(artist['ART_ID']),
2021-03-12 14:02:11 +00:00
'picture': 'https://api.deezer.com/artist/'+str(artist['ART_ID'])+'/image',
2020-12-29 20:32:24 +00:00
'picture_small': 'https://e-cdns-images.dzcdn.net/images/artist/'+str(artist['ART_PICTURE'])+'/56x56-000000-80-0-0.jpg',
'picture_medium': 'https://e-cdns-images.dzcdn.net/images/artist/'+str(artist['ART_PICTURE'])+'/250x250-000000-80-0-0.jpg',
'picture_big': 'https://e-cdns-images.dzcdn.net/images/artist/'+str(artist['ART_PICTURE'])+'/500x500-000000-80-0-0.jpg',
'picture_xl': 'https://e-cdns-images.dzcdn.net/images/artist/'+str(artist['ART_PICTURE'])+'/1000x1000-000000-80-0-0.jpg',
2020-11-12 15:55:24 +00:00
'nb_fan': artist['NB_FAN'],
'tracklist': 'https://api.deezer.com/artist/'+str(artist['ART_ID'])+'/top?limit=50',
'type': 'artist'
}
# maps gw-light api user/albums to standard api
def map_user_album(album):
return {
'id': album['ALB_ID'],
'title': album['ALB_TITLE'],
'link': 'https://www.deezer.com/album/'+str(album['ALB_ID']),
'cover': 'https://api.deezer.com/album/'+str(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/'+str(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/'+str(album['ART_ID'])+'image',
'tracklist': 'https://api.deezer.com/artist/'+str(album['ART_ID'])+'/top?limit=50'
},
'type': 'album'
}
# maps gw-light api user/playlists to standard api
2020-11-19 21:05:26 +00:00
def map_user_playlist(playlist, default_user_name=""):
2020-11-12 15:55:24 +00:00
return {
'id': playlist['PLAYLIST_ID'],
'title': playlist['TITLE'],
2020-12-29 20:17:30 +00:00
'description': playlist.get('DESCRIPTION', ''),
2020-11-12 15:55:24 +00:00
'nb_tracks': playlist['NB_SONG'],
'link': 'https://www.deezer.com/playlist/'+str(playlist['PLAYLIST_ID']),
'picture': 'https://api.deezer.com/playlist/'+str(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/'+str(playlist['PLAYLIST_ID'])+'/tracks',
'creation_date': playlist['DATE_ADD'],
2020-11-12 15:55:24 +00:00
'creator': {
'id': playlist['PARENT_USER_ID'],
2020-11-19 21:05:26 +00:00
'name': playlist.get('PARENT_USERNAME', default_user_name)
2020-11-12 15:55:24 +00:00
},
'type': 'playlist'
}
# maps gw-light api albums to standard api
def map_album(album):
return {
'id': album['ALB_ID'],
'title': album['ALB_TITLE'],
'upc': "", # TODO: Needs to be checked
'link': f"https://www.deezer.com/album/{album['ALB_ID']}",
'share': "", # TODO: Needs to be checked
'cover': f"https://api.deezer.com/album/{album['ALB_ID']}/image",
'cover_small': f"https://cdns-images.dzcdn.net/images/cover/{album['ALB_PICTURE']}/56x56-000000-80-0-0.jpg",
'cover_medium': f"https://cdns-images.dzcdn.net/images/cover/{album['ALB_PICTURE']}/250x250-000000-80-0-0.jpg",
'cover_big': f"https://cdns-images.dzcdn.net/images/cover/{album['ALB_PICTURE']}/500x500-000000-80-0-0.jpg",
'cover_xl': f"https://cdns-images.dzcdn.net/images/cover/{album['ALB_PICTURE']}/1000x1000-000000-80-0-0.jpg",
'md5_image': album['ALB_PICTURE'],
'genre_id': album['GENRE_ID'],
'genres': [], # TODO: Needs to be checked
'label': "", # TODO: Needs to be checked
'nb_tracks': album['NUMBER_TRACK'],
'duration': 0, # TODO: Needs to be checked
'fans': album['RANK'],
'rating': 0, # TODO: Needs to be checked
'release_date': album['PHYSICAL_RELEASE_DATE'],
'record_type': RELEASE_TYPE.get(int(album['TYPE']), "unknown"),
'available': True, # TODO: Needs to be checked
'alternative': None, # TODO: Needs to be checked
'tracklist': f"https://api.deezer.com/album/{album['ALB_ID']}/tracks",
'explicit_lyrics': int(album['EXPLICIT_LYRICS']) > 0,
'explicit_content_lyrics': 2, # TODO: Needs to be checked
'explicit_content_cover': 2, # TODO: Needs to be checked
'contributors': [], # TODO: Needs to be checked
'artist': None, # TODO: Needs to be checked
'tracks': [], # TODO: Needs to be checked
'type': album['__TYPE__'],
# Extras
'nb_disk': album['NUMBER_DISK']
}
2020-11-19 17:56:40 +00:00
# maps gw-light api artist/albums to standard api
def map_artist_album(album):
return {
'id': album['ALB_ID'],
'title': album['ALB_TITLE'],
'link': f"https://www.deezer.com/album/{album['ALB_ID']}",
'cover': f"https://api.deezer.com/album/{album['ALB_ID']}/image",
'cover_small': f"https://cdns-images.dzcdn.net/images/cover/{album['ALB_PICTURE']}/56x56-000000-80-0-0.jpg",
'cover_medium': f"https://cdns-images.dzcdn.net/images/cover/{album['ALB_PICTURE']}/250x250-000000-80-0-0.jpg",
'cover_big': f"https://cdns-images.dzcdn.net/images/cover/{album['ALB_PICTURE']}/500x500-000000-80-0-0.jpg",
'cover_xl': f"https://cdns-images.dzcdn.net/images/cover/{album['ALB_PICTURE']}/1000x1000-000000-80-0-0.jpg",
'genre_id': album['GENRE_ID'],
'fans': album['RANK'],
'release_date': album['PHYSICAL_RELEASE_DATE'],
'record_type': RELEASE_TYPE.get(int(album['TYPE']), "unknown"),
'tracklist': f"https://api.deezer.com/album/{album['ALB_ID']}/tracks",
'explicit_lyrics': int(album['EXPLICIT_LYRICS']) > 0,
'type': album['__TYPE__'],
# Extras
'nb_tracks': album['NUMBER_TRACK'],
'nb_disk': album['NUMBER_DISK']
}
# maps gw-light api playlists to standard api
def map_playlist(playlist):
return {
'id': playlist['PLAYLIST_ID'],
'title': playlist['TITLE'],
'description': playlist['DESCRIPTION'],
'duration': playlist['DURATION'],
'public': playlist['STATUS'] == 1,
'is_loved_track': playlist['TYPE'] == 4,
'collaborative': playlist['STATUS'] == 2,
'nb_tracks': playlist['NB_SONG'],
'fans': playlist['NB_FAN'],
'link': "https://www.deezer.com/playlist/"+playlist['PLAYLIST_ID'],
'share': "https://www.deezer.com/playlist/"+playlist['PLAYLIST_ID'],
'picture': "https://api.deezer.com/playlist/"+playlist['PLAYLIST_ID']+"/image",
'picture_small': "https://cdns-images.dzcdn.net/images/"+playlist['PICTURE_TYPE']+"/"+playlist['PLAYLIST_PICTURE']+"/56x56-000000-80-0-0.jpg",
'picture_medium': "https://cdns-images.dzcdn.net/images/"+playlist['PICTURE_TYPE']+"/"+playlist['PLAYLIST_PICTURE']+"/250x250-000000-80-0-0.jpg",
'picture_big': "https://cdns-images.dzcdn.net/images/"+playlist['PICTURE_TYPE']+"/"+playlist['PLAYLIST_PICTURE']+"/500x500-000000-80-0-0.jpg",
'picture_xl': "https://cdns-images.dzcdn.net/images/"+playlist['PICTURE_TYPE']+"/"+playlist['PLAYLIST_PICTURE']+"/1000x1000-000000-80-0-0.jpg",
'checksum': playlist['CHECKSUM'],
'tracklist': "https://api.deezer.com/playlist/"+playlist['PLAYLIST_ID']+"/tracks",
'creation_date': playlist['DATE_ADD'],
'creator': {
'id': playlist['PARENT_USER_ID'],
'name': playlist['PARENT_USERNAME'],
'tracklist': "https://api.deezer.com/user/"+playlist['PARENT_USER_ID']+"/flow",
'type': "user"
},
'type': "playlist"
}
2020-11-19 20:04:41 +00:00
# Cleanup terms that can hurt search results
def clean_search_query(term):
term = str(term)
term = re.sub(r' feat[\.]? ', " ", term)
term = re.sub(r' ft[\.]? ', " ", term)
term = re.sub(r'\(feat[\.]? ', " ", term)
term = re.sub(r'\(ft[\.]? ', " ", term)
2021-01-31 16:50:32 +00:00
term = term.replace(' & ', " ").replace('', "-").replace('', "-")
2020-11-19 20:04:41 +00:00
return term