Added automatic fallback calls

This commit is contained in:
RemixDev 2021-12-22 12:28:11 +01:00
parent 3b0e39711c
commit cadaf3e4c7
No known key found for this signature in database
GPG key ID: B33962B465BDB51C

View file

@ -75,6 +75,10 @@ class GW:
sleep(2) sleep(2)
return self.api_call(method, args, params) return self.api_call(method, args, params)
if len(result_json['error']): if len(result_json['error']):
if result_json.get('payload', {}).get('FALLBACK', {}):
for key in result_json['payload']['FALLBACK'].keys():
args[key] = result_json['payload']['FALLBACK'][key]
return self.api_call(method, args, params)
raise GWAPIError(json.dumps(result_json['error'])) raise GWAPIError(json.dumps(result_json['error']))
return result_json['results'] return result_json['results']
@ -86,7 +90,7 @@ class GW:
return self.api_call('deezer.getUserData') return self.api_call('deezer.getUserData')
def get_user_profile_page(self, user_id, tab, limit=10): def get_user_profile_page(self, user_id, tab, limit=10):
return self.api_call('deezer.pageProfile', {'user_id': user_id, 'tab': tab, 'nb': limit}) return self.api_call('deezer.pageProfile', {'USER_ID': user_id, 'tab': tab, 'nb': limit})
def get_user_favorite_ids(self, checksum = None, limit = 10000, start = 0): def get_user_favorite_ids(self, checksum = None, limit = 10000, start = 0):
return self.api_call('song.getFavoriteIds', {'nb': limit, 'start': start, 'checksum': checksum}) return self.api_call('song.getFavoriteIds', {'nb': limit, 'start': start, 'checksum': checksum})
@ -95,17 +99,17 @@ class GW:
return self.api_call('deezer.getChildAccounts') return self.api_call('deezer.getChildAccounts')
def get_track(self, sng_id): def get_track(self, sng_id):
return self.api_call('song.getData', {'sng_id': sng_id}) return self.api_call('song.getData', {'SNG_ID': sng_id})
def get_track_page(self, sng_id): def get_track_page(self, sng_id):
return self.api_call('deezer.pageTrack', {'sng_id': sng_id}) return self.api_call('deezer.pageTrack', {'SNG_ID': sng_id})
def get_track_lyrics(self, sng_id): def get_track_lyrics(self, sng_id):
return self.api_call('song.getLyrics', {'sng_id': sng_id}) return self.api_call('song.getLyrics', {'SNG_ID': sng_id})
def get_tracks(self, sng_ids): def get_tracks(self, sng_ids):
tracks_array = [] tracks_array = []
body = self.api_call('song.getListData', {'sng_ids': sng_ids}) body = self.api_call('song.getListData', {'SNG_IDS': sng_ids})
errors = 0 errors = 0
for i in range(len(sng_ids)): for i in range(len(sng_ids)):
if sng_ids[i] != 0: if sng_ids[i] != 0:
@ -116,11 +120,11 @@ class GW:
return tracks_array return tracks_array
def get_album(self, alb_id): def get_album(self, alb_id):
return self.api_call('album.getData', {'alb_id': alb_id}) return self.api_call('album.getData', {'ALB_ID': alb_id})
def get_album_page(self, alb_id): def get_album_page(self, alb_id):
return self.api_call('deezer.pageAlbum', { return self.api_call('deezer.pageAlbum', {
'alb_id': alb_id, 'ALB_ID': alb_id,
'lang': 'en', 'lang': 'en',
'header': True, 'header': True,
'tab': 0 'tab': 0
@ -128,18 +132,18 @@ class GW:
def get_album_tracks(self, alb_id): def get_album_tracks(self, alb_id):
tracks_array = [] tracks_array = []
body = self.api_call('song.getListByAlbum', {'alb_id': alb_id, 'nb': -1}) body = self.api_call('song.getListByAlbum', {'ALB_ID': alb_id, 'nb': -1})
for track in body['data']: for track in body['data']:
track['POSITION'] = body['data'].index(track) track['POSITION'] = body['data'].index(track)
tracks_array.append(track) tracks_array.append(track)
return tracks_array return tracks_array
def get_artist(self, art_id): def get_artist(self, art_id):
return self.api_call('artist.getData', {'art_id': art_id}) return self.api_call('artist.getData', {'ART_ID': art_id})
def get_artist_page(self, art_id): def get_artist_page(self, art_id):
return self.api_call('deezer.pageArtist', { return self.api_call('deezer.pageArtist', {
'art_id': art_id, 'ART_ID': art_id,
'lang': 'en', 'lang': 'en',
'header': True, 'header': True,
'tab': 0 'tab': 0
@ -147,7 +151,7 @@ class GW:
def get_artist_top_tracks(self, art_id, limit=100): def get_artist_top_tracks(self, art_id, limit=100):
tracks_array = [] tracks_array = []
body = self.api_call('artist.getTopTrack', {'art_id': art_id, 'nb': limit}) body = self.api_call('artist.getTopTrack', {'ART_ID': art_id, 'nb': limit})
for track in body['data']: for track in body['data']:
track['POSITION'] = body['data'].index(track) track['POSITION'] = body['data'].index(track)
tracks_array.append(track) tracks_array.append(track)
@ -155,7 +159,7 @@ class GW:
def get_artist_discography(self, art_id, index=0, limit=25): def get_artist_discography(self, art_id, index=0, limit=25):
return self.api_call('album.getDiscography', { return self.api_call('album.getDiscography', {
'art_id': art_id, 'ART_ID': art_id,
"discography_mode":"all", "discography_mode":"all",
'nb': limit, 'nb': limit,
'nb_songs': 0, 'nb_songs': 0,
@ -167,7 +171,7 @@ class GW:
def get_playlist_page(self, playlist_id): def get_playlist_page(self, playlist_id):
return self.api_call('deezer.pagePlaylist', { return self.api_call('deezer.pagePlaylist', {
'playlist_id': playlist_id, 'PLAYLIST_ID': playlist_id,
'lang': 'en', 'lang': 'en',
'header': True, 'header': True,
'tab': 0 'tab': 0
@ -175,7 +179,7 @@ class GW:
def get_playlist_tracks(self, playlist_id): def get_playlist_tracks(self, playlist_id):
tracks_array = [] tracks_array = []
body = self.api_call('playlist.getSongs', {'playlist_id': playlist_id, 'nb': -1}) body = self.api_call('playlist.getSongs', {'PLAYLIST_ID': playlist_id, 'nb': -1})
for track in body['data']: for track in body['data']:
track['POSITION'] = body['data'].index(track) track['POSITION'] = body['data'].index(track)
tracks_array.append(track) tracks_array.append(track)
@ -197,7 +201,7 @@ class GW:
for song in songs: for song in songs:
newSongs.append([song, 0]) newSongs.append([song, 0])
return self.api_call('playlist.update', { return self.api_call('playlist.update', {
'playlist_id': playlist_id, 'PLAYLIST_ID': playlist_id,
'title': title, 'title': title,
'status': status, 'status': status,
'description': description, 'description': description,
@ -209,7 +213,7 @@ class GW:
for song in songs: for song in songs:
newSongs.append([song, 0]) newSongs.append([song, 0])
return self.api_call('playlist.addSongs', { return self.api_call('playlist.addSongs', {
'playlist_id': playlist_id, 'PLAYLIST_ID': playlist_id,
'songs': newSongs, 'songs': newSongs,
'offset': offset 'offset': offset
}) })
@ -222,7 +226,7 @@ class GW:
for song in songs: for song in songs:
newSongs.append([song, 0]) newSongs.append([song, 0])
return self.api_call('playlist.deleteSongs', { return self.api_call('playlist.deleteSongs', {
'playlist_id': playlist_id, 'PLAYLIST_ID': playlist_id,
'songs': newSongs 'songs': newSongs
}) })
@ -230,7 +234,7 @@ class GW:
return self.remove_songs_from_playlist(playlist_id, [sng_id]) return self.remove_songs_from_playlist(playlist_id, [sng_id])
def delete_playlist(self, playlist_id): def delete_playlist(self, playlist_id):
return self.api_call('playlist.delete', {'playlist_id': playlist_id}) return self.api_call('playlist.delete', {'PLAYLIST_ID': playlist_id})
def add_song_to_favorites(self, sng_id): def add_song_to_favorites(self, sng_id):
return self.api_call('favorite_song.add', {'SNG_ID': sng_id}) return self.api_call('favorite_song.add', {'SNG_ID': sng_id})
@ -344,6 +348,8 @@ class GW:
if body: if body:
if 'LYRICS' in body: if 'LYRICS' in body:
body['DATA']['LYRICS'] = body['LYRICS'] body['DATA']['LYRICS'] = body['LYRICS']
if 'ISRC' in body:
body['DATA']['ALBUM_FALLBACK'] = body['ISRC']
body = body['DATA'] body = body['DATA']
else: else:
body = self.get_track(sng_id) body = self.get_track(sng_id)