From 5efd0184b667ba7c017876cf00910b7a2d36ec0b Mon Sep 17 00:00:00 2001 From: davy39 Date: Sat, 7 Dec 2024 15:57:55 +0100 Subject: [PATCH 01/14] New auth --- src/app/http/api.py | 34 +++++++++++++++------------------- src/resources/settings.xml | 2 +- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/app/http/api.py b/src/app/http/api.py index 7843345..18aba31 100644 --- a/src/app/http/api.py +++ b/src/app/http/api.py @@ -22,8 +22,9 @@ class Api(object): _API_BASE_URL = "http://api.deezer.com/2.0/{service}/{id}/{method}" _API_BASE_STREAMING_URL = "http://tv.deezer.com/smarttv/streaming.php" - _API_AUTH_URL = "http://tv.deezer.com/smarttv/authentication.php" - + _API_AUTH_URL = "https://connect.deezer.com/oauth/user_auth.php" + _CLIENT_ID = "447462" + _CLIENT_SECRET = "a83bf7f38ad2f137e444727cfc3775cf" __CACHE_FILE = xbmcvfs.translatePath('special://temp/deezer-api.pickle') __INSTANCE = None @@ -47,7 +48,7 @@ def instance(cls): Logger.debug("Api instance not saved, trying to get token ...") cls.__INSTANCE = cls( - Settings.get('username'), + Settings.get('email'), Settings.get('password') ) except LoadedCredentialsException: @@ -55,7 +56,7 @@ def instance(cls): cls.clean_cache() cls.__INSTANCE = cls( - Settings.get('username'), + Settings.get('email'), Settings.get('password') ) @@ -68,22 +69,22 @@ def clean_cache(cls) -> None: xbmcvfs.delete(Api.__CACHE_FILE) cls.__INSTANCE = None - def __init__(self, username: str, password: str): + def __init__(self, email: str, password: str): """ - Instantiate a Connection object from username and password. + Instantiate a Connection object from email and password. - :param str username: The user's name + :param str email: The user's email :param str password: The user's password :raise EmptyCredentialsException: If the credentials are empty """ Logger.debug("Creating new API connection ...") - self._username = username + self._email = email self._password = "" self.set_password(password) self._access_token = None if self.empty_credentials(): - raise EmptyCredentialsException("Username and password are required!") + raise EmptyCredentialsException("email and password are required!") self._obtain_access_token() @@ -119,7 +120,7 @@ def load(cache_file: str = __CACHE_FILE): cls = pickle.load(file) if cls.empty_credentials(check_token=True): - raise LoadedCredentialsException("Loaded empty username or password") + raise LoadedCredentialsException("Loaded empty email or password") return cls @@ -130,7 +131,7 @@ def empty_credentials(self, check_token: bool = False) -> bool: :param check_token: Tells wether or not to check the access token :return: True if any credential is empty, False if there are all filled """ - empty_creds = self._username == "" or self._password == "" + empty_creds = self._email == "" or self._password == "" empty_tok = False if check_token: @@ -143,15 +144,10 @@ def _obtain_access_token(self) -> None: Obtain access token by pretending to be a smart tv. """ Logger.debug("Connection: Getting access token from API ...") - - response = requests.get(self._API_AUTH_URL, params={ - 'login': self._username, - 'password': self._password, - 'device': 'panasonic' - }).json() - + hashed_params = hashlib.md5(f'{self._CLIENT_ID}{self._email}{self._password}{self._CLIENT_SECRET}'.encode('utf-8')).hexdigest() + url = f'{self._API_AUTH_URL}?app_id={self._CLIENT_ID}&login={self._email}&password={self._password}&hash={hashed_params}' + response = requests.get(url).json() Api.check_error(response) - self._access_token = response['access_token'] def request( diff --git a/src/resources/settings.xml b/src/resources/settings.xml index df47eb3..557a1e2 100755 --- a/src/resources/settings.xml +++ b/src/resources/settings.xml @@ -1,7 +1,7 @@ - + \ No newline at end of file From 03792e6789b93bb293149e597284de265a6b080f Mon Sep 17 00:00:00 2001 From: davy39 Date: Sat, 7 Dec 2024 17:53:39 +0100 Subject: [PATCH 02/14] gw_api & download --- src/app/actions/tracks_actions.py | 14 ++- src/app/http/api.py | 167 +++++++++++++++++++++++++++--- 2 files changed, 160 insertions(+), 21 deletions(-) diff --git a/src/app/actions/tracks_actions.py b/src/app/actions/tracks_actions.py index 43d582c..ffafbd8 100644 --- a/src/app/actions/tracks_actions.py +++ b/src/app/actions/tracks_actions.py @@ -17,14 +17,19 @@ def play(cls, identifiant): :param identifiant: ID of the track to stream :return: track's stream url """ + # Get stream url url = Api.instance().request_streaming(identifiant) - if url.startswith('http'): - Logger.debug("Playing track " + identifiant) - item = xbmcgui.ListItem(path=url) + # Create a path to download stream + path = xbmcvfs.translatePath(f'special://temp/{identifiant}') + # Download and decrypt stream + Api.instance().dl_track(identifiant, url, path) + # Create an item to give to kodi's player + item = xbmcgui.ListItem(path=path) + # Send the item to Kodi's player xbmcplugin.setResolvedUrl(cls.app.args().addon_handle, True, listitem=item) else: - Logger.warn("Unplayable track " + identifiant) + Logger.warn("Unable to get url of track " + identifiant) xbmcgui.Dialog().notification( "Unplayable track", "Track " + identifiant + " cannot be played.", @@ -32,5 +37,4 @@ def play(cls, identifiant): sound=False ) xbmcplugin.setResolvedUrl(cls.app.args().addon_handle, False, xbmcgui.ListItem()) - return [] diff --git a/src/app/http/api.py b/src/app/http/api.py index 18aba31..102f388 100644 --- a/src/app/http/api.py +++ b/src/app/http/api.py @@ -4,8 +4,12 @@ """ import hashlib +from math import ceil import pickle - +from random import randint +from time import time +from Cryptodome.Hash import MD5 +from Cryptodome.Cipher import Blowfish, AES import requests import xbmcvfs @@ -21,8 +25,9 @@ class Api(object): """ _API_BASE_URL = "http://api.deezer.com/2.0/{service}/{id}/{method}" - _API_BASE_STREAMING_URL = "http://tv.deezer.com/smarttv/streaming.php" + _API_BASE_STREAMING_URL = "https://media.deezer.com/v1/get_url" _API_AUTH_URL = "https://connect.deezer.com/oauth/user_auth.php" + _API_BASE_GW_URL = 'https://www.deezer.com/ajax/gw-light.php' _CLIENT_ID = "447462" _CLIENT_SECRET = "a83bf7f38ad2f137e444727cfc3775cf" __CACHE_FILE = xbmcvfs.translatePath('special://temp/deezer-api.pickle') @@ -86,8 +91,24 @@ def __init__(self, email: str, password: str): if self.empty_credentials(): raise EmptyCredentialsException("email and password are required!") + self.s = requests.Session() + self.s.headers.update({ + 'accept': '*/*', + 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', + 'content-type': 'text/plain;charset=UTF-8', + 'origin': 'https://www.deezer.com', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'same-origin', + 'sec-fetch-dest': 'empty', + 'referer': 'https://www.deezer.com/', + 'accept-language': 'en-US,en;q=0.9', + }) + self.s.get('https://www.deezer.com') + self._obtain_access_token() + self._obtain_api_token() + def set_password(self, password: str) -> None: """ Save md5 of user password. @@ -146,10 +167,52 @@ def _obtain_access_token(self) -> None: Logger.debug("Connection: Getting access token from API ...") hashed_params = hashlib.md5(f'{self._CLIENT_ID}{self._email}{self._password}{self._CLIENT_SECRET}'.encode('utf-8')).hexdigest() url = f'{self._API_AUTH_URL}?app_id={self._CLIENT_ID}&login={self._email}&password={self._password}&hash={hashed_params}' - response = requests.get(url).json() + response = self.s.get(url).json() Api.check_error(response) self._access_token = response['access_token'] + + def _obtain_api_token(self) -> None: + """ + Obtain api token from gw_api. + """ + Logger.debug("Connection: Getting api token ...") + self.call_gw_api('deezer.getUserData') + # TODO : allow login with ARL + #arl = self.call_gw_api('user.getArl') + #self.s.cookies.set('arl', self._arl, domain='.deezer.com') + + + def call_gw_api(self, method, payload={}): + api_token = '' if method in ('deezer.getUserData', 'user.getArl') else self.api_token + params = { + 'method': method, + 'input': 3, + 'api_version': 1.0, + 'api_token': api_token, + 'cid': randint(0, 1_000_000_000), + } + resp = self.s.post(self._API_BASE_GW_URL, params=params, json=payload).json() + if resp['error']!=[]: + self.s.cookies.clear() + Logger.debug(f"Error: {resp['error']}") + else: + resp = resp['results'] + if method == 'deezer.getUserData': + self.api_token = resp['checkForm'] + self.country = resp['COUNTRY'] + self.license_token = resp['USER']['OPTIONS']['license_token'] + self.renew_timestamp = ceil(time()) + self.language = resp['USER']['SETTING']['global']['language'] + self.available_formats = ['MP3_128'] + format_dict = {'web_hq': 'MP3_320', 'web_lossless': 'FLAC'} + for k, v in format_dict.items(): + if resp['USER']['OPTIONS'][k]: + self.available_formats.append(v) + print(self.available_formats) + return resp + + def request( self, service: str, @@ -176,7 +239,7 @@ def request( parameters = {} url = self._API_BASE_URL.format(service=service, id=identifiant, method=method) - response = requests.get(url, params=_merge_two_dicts( + response = self.s.get(url, params=_merge_two_dicts( {'output': 'json', 'access_token': self._access_token}, parameters )).json() @@ -209,6 +272,74 @@ def request_url(url: str): return response + + def get_track_url(self, id, track_token, track_token_expiry, format): + # renews license token + if time() - self.renew_timestamp >= 3600: + self.call_gw_api('deezer.getUserData') + # renews track token + if time() - track_token_expiry >= 0: + track_token = self.call_gw_api('song.getData', {'sng_id': id, 'array_default': ['TRACK_TOKEN']})['TRACK_TOKEN'] + json = { + 'license_token': self.license_token, + 'media': [ + { + 'type': 'FULL', + 'formats': [{'cipher': 'BF_CBC_STRIPE', 'format': format}] + } + ], + 'track_tokens': [track_token] + } + resp = self.s.post(self._API_BASE_STREAMING_URL, json=json).json() + return resp['data'][0]['media'][0]['sources'][0]['url'] + + + def get_legacy_track_url(self, md5_origin, format, id, media_version): + format_num = { + 'MP3_MISC': '0', + 'MP3_128': '1', + 'MP4_RA1': '13', + 'MP4_RA2': '14', + 'MP4_RA3': '15', + 'MHM1_RA1': '16', + 'MHM1_RA2': '17', + 'MHM1_RA3': '18' + }[format] + # mashing a bunch of metadata and hashing it with MD5 + info = b"\xa4".join([i.encode() for i in [ + md5_origin, format_num, str(id), str(media_version) + ]]) + hash = MD5.new(info).hexdigest() + # hash + metadata + hash_metadata = hash.encode() + b"\xa4" + info + b"\xa4" + # padding + while len(hash_metadata) % 16 > 0: + hash_metadata += b"\0" + # AES encryption + track_url_key = "jo6aey6haid2Teih" + legacy_url_cipher = AES.new(track_url_key.encode('ascii'), AES.MODE_ECB) + result = legacy_url_cipher.encrypt(hash_metadata).hex() + # getting url + return f"https://cdns-proxy-{md5_origin[0]}.dzcdn.net/mobile/1/{result}" + + + def dl_track(self, id, url, path): + md5_id = MD5.new(str(id).encode()).hexdigest().encode('ascii') + bf_secret = "g4el58wc0zvf9na1".encode('ascii') + bf_key = bytes([md5_id[i] ^ md5_id[i + 16] ^ bf_secret[i] for i in range(16)]) + req = requests.get(url, stream=True) + req.raise_for_status() + with open(path, "wb") as file: + for i, chunk in enumerate(req.iter_content(2048)): + # every 3rd chunk is encrypted + if i % 3 == 0 and len(chunk) == 2048: + # yes, the cipher has to be reset on every chunk. + # those deezer devs were prob smoking crack when they made this DRM + cipher = Blowfish.new(bf_key, Blowfish.MODE_CBC, b"\x00\x01\x02\x03\x04\x05\x06\x07") + chunk = cipher.decrypt(chunk) + file.write(chunk) + + def request_streaming(self, identifiant: str = '', st_type: str = 'track'): """ Make a request to get the streaming url of `type` with `id`. @@ -221,19 +352,23 @@ def request_streaming(self, identifiant: str = '', st_type: str = 'track'): "Connection: Requesting streaming for {} with id {} ...".format(st_type, identifiant) ) - if self._access_token is None: - self._obtain_access_token() - - response = requests.get(self._API_BASE_STREAMING_URL, params={ - 'access_token': self._access_token, - "{}_id".format(st_type): identifiant, - 'device': 'panasonic' - }) - - if st_type.startswith('radio') or st_type.startswith('artist'): - return response.json() + if time() - self.renew_timestamp >= 3600: + self.call_gw_api('deezer.getUserData') + t_data = self.call_gw_api('deezer.pageTrack', {'sng_id': identifiant})['DATA'] + print(t_data) + id = t_data['SNG_ID'] + track_token = t_data['TRACK_TOKEN'] + track_token_expiry = t_data['TRACK_TOKEN_EXPIRE'] + format = self.available_formats[-1] + md5_origin = t_data['MD5_ORIGIN'] + media_version = t_data['MEDIA_VERSION'] + if format in ('MP3_320', 'FLAC'): + url = self.get_track_url(id, track_token, track_token_expiry, format) + else: + url = self.get_legacy_track_url(md5_origin, format, id, media_version) + + return url - return response.text @staticmethod def check_error(response): From dd22265309c98b481a4a576114ce00a0bae433aa Mon Sep 17 00:00:00 2001 From: davy39 Date: Sat, 7 Dec 2024 17:59:39 +0100 Subject: [PATCH 03/14] add xbmcvsf dependency --- src/app/actions/tracks_actions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/actions/tracks_actions.py b/src/app/actions/tracks_actions.py index ffafbd8..d1d70aa 100644 --- a/src/app/actions/tracks_actions.py +++ b/src/app/actions/tracks_actions.py @@ -1,6 +1,6 @@ import xbmcgui import xbmcplugin - +import xbmcvfs from app.actions.base_actions import BaseActions from app.http import Api from lib.helpers.logger import Logger From 84ac9b31fa5a71a6be31073e8abef4bb968f5d1a Mon Sep 17 00:00:00 2001 From: davy39 Date: Sat, 7 Dec 2024 18:11:31 +0100 Subject: [PATCH 04/14] Release 3.0 --- addons.xml | 44 +++++++++++++++++- addons.xml.md5 | 2 +- plugin.audio.deezer/addon.xml | 4 +- .../plugin.audio.deezer-2.0.5.zip.md5 | 1 - ....0.5.zip => plugin.audio.deezer-3.0.0.zip} | Bin 958834 -> 862484 bytes .../plugin.audio.deezer-3.0.0.zip.md5 | 1 + src/addon.xml | 4 +- 7 files changed, 48 insertions(+), 8 deletions(-) delete mode 100644 plugin.audio.deezer/plugin.audio.deezer-2.0.5.zip.md5 rename plugin.audio.deezer/{plugin.audio.deezer-2.0.5.zip => plugin.audio.deezer-3.0.0.zip} (87%) create mode 100644 plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip.md5 diff --git a/addons.xml b/addons.xml index 7969033..bf1d26f 100644 --- a/addons.xml +++ b/addons.xml @@ -1,5 +1,5 @@ - + @@ -23,7 +23,47 @@ This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. A premium account is REQUIRED. This addon was not provided by Deezer. -- Fixed "authenticate user failed" when streaming +- Fixed login and streaming (2024) + + + all + en + GPL-3.0 + https://github.com/Valentin271/DeezerKodi/issues + https://github.com/Valentin271/DeezerKodi + https://github.com/Valentin271/DeezerKodi/tree/master/src + + + resources/icon.png + resources/fanart.jpg + + + + + + + + + + + + audio + + + + + https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml + https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml.md5 + md5 + + + + + This addon allows you to listen to music from Deezer. + This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. A premium account is REQUIRED. + This addon was not provided by Deezer. + +- Fixed login and streaming (2024) all diff --git a/addons.xml.md5 b/addons.xml.md5 index 5d74b34..4d20702 100644 --- a/addons.xml.md5 +++ b/addons.xml.md5 @@ -1 +1 @@ -f97fa007c33dd7b5de4c6335222dc01c addons.xml +8b273f037508e56ff5f88bd04048ce75 addons.xml diff --git a/plugin.audio.deezer/addon.xml b/plugin.audio.deezer/addon.xml index 4ad6c76..bd30582 100644 --- a/plugin.audio.deezer/addon.xml +++ b/plugin.audio.deezer/addon.xml @@ -1,5 +1,5 @@ - + @@ -23,7 +23,7 @@ This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. A premium account is REQUIRED. This addon was not provided by Deezer. -- Fixed "authenticate user failed" when streaming +- Fixed login and streaming (2024) all diff --git a/plugin.audio.deezer/plugin.audio.deezer-2.0.5.zip.md5 b/plugin.audio.deezer/plugin.audio.deezer-2.0.5.zip.md5 deleted file mode 100644 index 3db686a..0000000 --- a/plugin.audio.deezer/plugin.audio.deezer-2.0.5.zip.md5 +++ /dev/null @@ -1 +0,0 @@ -4592a81e342e27a14df7b648627dd3b7 *plugin.audio.deezer-2.0.5.zip diff --git a/plugin.audio.deezer/plugin.audio.deezer-2.0.5.zip b/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip similarity index 87% rename from plugin.audio.deezer/plugin.audio.deezer-2.0.5.zip rename to plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip index ab752669af92f500694707dc31b448c0cbbaafa5..41a2afc8487174f29d62cf0ea8b7e9aeedecd71a 100644 GIT binary patch delta 9688 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�g7<@vMWW6! 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 a@>_<6x@d-ZA9RiX_U3pzHIuOy>G?m5ZCD=w diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip.md5 b/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip.md5 new file mode 100644 index 0000000..7956dd3 --- /dev/null +++ b/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip.md5 @@ -0,0 +1 @@ +564289a20266d681fe3157560e3e2eb3 *plugin.audio.deezer-3.0.0.zip diff --git a/src/addon.xml b/src/addon.xml index 4ad6c76..bd30582 100755 --- a/src/addon.xml +++ b/src/addon.xml @@ -1,5 +1,5 @@ - + @@ -23,7 +23,7 @@ This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. A premium account is REQUIRED. This addon was not provided by Deezer. -- Fixed "authenticate user failed" when streaming +- Fixed login and streaming (2024) all From 049413213ccea23ea04da7cbb8ab4357e05c956f Mon Sep 17 00:00:00 2001 From: davy39 Date: Sat, 7 Dec 2024 18:17:34 +0100 Subject: [PATCH 05/14] update Readme --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 06a9cef..7d62c0f 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # DeezerKodi This is an unofficial Deezer addon for Kodi. -It works **only for premium account** (Deezer API doesn't allow streaming for free accounts). +It works with all kind of deezer accounts. +Streaming is limited to 128kb/s for free accounts, but can play up to flac for premium's. This addon works for personal and family accounts (profiles are usable). It supports access to your playlists. Searching for tracks, albums and artists is also implemented. Let me know if there is a particular feature you want to see implemented. -Tracks are played in 128kb resolution as that's the max available bitrate for TVs from Deezer. # Installation @@ -50,3 +50,5 @@ new [issue](https://github.com/Valentin271/DeezerKodi/issues). This addon is forked from [kubatek94](https://github.com/kubatek94)' s [DeezerKodi repo](https://github.com/kubatek94/DeezerKodi). Only the streaming API, icon and fanart have been reused. + +Auth and decryption are adapted from [orpheusdl-deezer](https://github.com/TheKVT/orpheusdl-deezer). \ No newline at end of file From 9ed5bae65773f518dff220515a4e032ed9519029 Mon Sep 17 00:00:00 2001 From: davy39 Date: Sat, 7 Dec 2024 18:26:33 +0100 Subject: [PATCH 06/14] Changelog --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f268daf..cccc490 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog + +## v3.0.0 + +### [Breaking changes] + +- Added auth from https://connect.deezer.com/oauth/user_auth.php +- Added API from https://www.deezer.com/ajax/gw-light.php for getting track tokens +- Added getting streams from https://media.deezer.com/v1/get_url +- Added streams decryption +- Now working with free tiers + ## v2.0.5 ### [Fix] From b63e7b062683830bcf7ca069104eafe6c7a40768 Mon Sep 17 00:00:00 2001 From: davy39 Date: Mon, 9 Dec 2024 16:56:16 +0100 Subject: [PATCH 07/14] fix zip --- addons.xml | 40 ------------------ addons.xml.md5 | 2 +- .../plugin.audio.deezer-3.0.0.zip | Bin 862484 -> 862484 bytes .../plugin.audio.deezer-3.0.0.zip.md5 | 2 +- 4 files changed, 2 insertions(+), 42 deletions(-) diff --git a/addons.xml b/addons.xml index bf1d26f..0e011ff 100644 --- a/addons.xml +++ b/addons.xml @@ -18,46 +18,6 @@ - - This addon allows you to listen to music from Deezer. - This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. A premium account is REQUIRED. - This addon was not provided by Deezer. - -- Fixed login and streaming (2024) - - - all - en - GPL-3.0 - https://github.com/Valentin271/DeezerKodi/issues - https://github.com/Valentin271/DeezerKodi - https://github.com/Valentin271/DeezerKodi/tree/master/src - - - resources/icon.png - resources/fanart.jpg - - - - - - - - - - - - audio - - - - - https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml - https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml.md5 - md5 - - - This addon allows you to listen to music from Deezer. This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. A premium account is REQUIRED. diff --git a/addons.xml.md5 b/addons.xml.md5 index 4d20702..86a757d 100644 --- a/addons.xml.md5 +++ b/addons.xml.md5 @@ -1 +1 @@ -8b273f037508e56ff5f88bd04048ce75 addons.xml +2989e88c3ea817789bdc57d7876af8b6 addons.xml diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip b/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip index 41a2afc8487174f29d62cf0ea8b7e9aeedecd71a..17f81eef4ed0c323961c0564c588f0bfef988eb7 100644 GIT binary patch delta 512 zcmbPo$z;kUlgR6?@@YgprrINpT)-(1VJaO)FjnlM~GTMQ@msfCm z#t7b++@OBqvicq`&et-*-?OL0Gr2oPO%4iv!fM9yCsF>;?fx*E%Z#;iK7UfsjIG~& zukfBn^t*G%elG5oZd$7(dfmapvS1?TuSaFBzL$GJd4xrK{tstEb7vDKYbvWYJWyr%zJU zB$=NB02usP0vmwEE%3W>=k#S+sW zi1M;A0bTM6r~v2^iOq*hL^zp~T01x2v=w0nGd?&}*)ylKb~fiWwC6T30x=U1GXpUT z5VHa?8xXStF$WNHZqIGts+bJY(EdW08;E(fzYym21DiG7Qk-{=0?_nG`)y~p1JPr>ATiT_mb%~V}?Vk&M@gQ!0hG#+P&G^ke8WAq zZF~C*VQwJi+5SS9*N=I6zcjDFbT@I{eg&YZk@hzqES@CDz_8bhfk7E$GZbuTeC#lN zp*XMnWI0E+?NSoFr+6Sbdn9=IrZcJX-T)ar{jMsnB Date: Sat, 11 Jan 2025 13:41:18 +0100 Subject: [PATCH 08/14] fix request streaming api --- src/app/http/api.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/http/api.py b/src/app/http/api.py index 102f388..55510b5 100644 --- a/src/app/http/api.py +++ b/src/app/http/api.py @@ -360,12 +360,12 @@ def request_streaming(self, identifiant: str = '', st_type: str = 'track'): track_token = t_data['TRACK_TOKEN'] track_token_expiry = t_data['TRACK_TOKEN_EXPIRE'] format = self.available_formats[-1] - md5_origin = t_data['MD5_ORIGIN'] + md5_origin = t_data.get('MD5_ORIGIN') media_version = t_data['MEDIA_VERSION'] - if format in ('MP3_320', 'FLAC'): - url = self.get_track_url(id, track_token, track_token_expiry, format) - else: + if format not in ('MP3_320', 'FLAC') and md5_origin: url = self.get_legacy_track_url(md5_origin, format, id, media_version) + else: + url = self.get_track_url(id, track_token, track_token_expiry, format) return url From b1d5b5624a63b6ca323ae3b3f8bb89599f2eb439 Mon Sep 17 00:00:00 2001 From: davy39 Date: Sat, 11 Jan 2025 13:50:32 +0100 Subject: [PATCH 09/14] update repos 3.0.1 --- CHANGELOG.md | 7 +++++++ addons.xml | 2 +- addons.xml.md5 | 2 +- plugin.audio.deezer/addon.xml | 2 +- .../plugin.audio.deezer-3.0.0.zip.md5 | 1 - ....0.0.zip => plugin.audio.deezer-3.0.1.zip} | Bin 862484 -> 862498 bytes .../plugin.audio.deezer-3.0.1.zip.md5 | 1 + src/addon.xml | 2 +- 8 files changed, 12 insertions(+), 5 deletions(-) delete mode 100644 plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip.md5 rename plugin.audio.deezer/{plugin.audio.deezer-3.0.0.zip => plugin.audio.deezer-3.0.1.zip} (98%) create mode 100644 plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip.md5 diff --git a/CHANGELOG.md b/CHANGELOG.md index cccc490..f8e4435 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Changelog +## v3.0.1 + +### [Fix] + +- Fixed streaming 128kbps when no MD5 for legacy + + ## v3.0.0 ### [Breaking changes] diff --git a/addons.xml b/addons.xml index 0e011ff..da5c623 100644 --- a/addons.xml +++ b/addons.xml @@ -1,5 +1,5 @@ - + diff --git a/addons.xml.md5 b/addons.xml.md5 index 86a757d..f5b4a94 100644 --- a/addons.xml.md5 +++ b/addons.xml.md5 @@ -1 +1 @@ -2989e88c3ea817789bdc57d7876af8b6 addons.xml +c4d1aeb765c15779a41f8bf83930c582 addons.xml diff --git a/plugin.audio.deezer/addon.xml b/plugin.audio.deezer/addon.xml index bd30582..12f5029 100644 --- a/plugin.audio.deezer/addon.xml +++ b/plugin.audio.deezer/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip.md5 b/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip.md5 deleted file mode 100644 index 1d04213..0000000 --- a/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip.md5 +++ /dev/null @@ -1 +0,0 @@ -85b9e2811905957f84d7d853bf5b95c4 *plugin.audio.deezer-3.0.0.zip diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip b/plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip similarity index 98% rename from plugin.audio.deezer/plugin.audio.deezer-3.0.0.zip rename to plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip index 17f81eef4ed0c323961c0564c588f0bfef988eb7..1eb8b75c52edd78033656be72298f2d71117ccbe 100644 GIT binary patch delta 6209 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 delta 6132 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 diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip.md5 b/plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip.md5 new file mode 100644 index 0000000..6b347c0 --- /dev/null +++ b/plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip.md5 @@ -0,0 +1 @@ +db45da413a03c467e5299fa14b0aec65 *plugin.audio.deezer-3.0.1.zip diff --git a/src/addon.xml b/src/addon.xml index bd30582..12f5029 100755 --- a/src/addon.xml +++ b/src/addon.xml @@ -1,5 +1,5 @@ - + From ab44d96816e7983ddd42364ead83199213bd6da1 Mon Sep 17 00:00:00 2001 From: davy39 Date: Sat, 11 Jan 2025 18:14:11 +0100 Subject: [PATCH 10/14] add mp3 extension to tmp file --- src/app/actions/tracks_actions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/actions/tracks_actions.py b/src/app/actions/tracks_actions.py index d1d70aa..12e6168 100644 --- a/src/app/actions/tracks_actions.py +++ b/src/app/actions/tracks_actions.py @@ -21,7 +21,7 @@ def play(cls, identifiant): url = Api.instance().request_streaming(identifiant) if url.startswith('http'): # Create a path to download stream - path = xbmcvfs.translatePath(f'special://temp/{identifiant}') + path = xbmcvfs.translatePath(f'special://temp/deezer-temp.mp3') # Download and decrypt stream Api.instance().dl_track(identifiant, url, path) # Create an item to give to kodi's player From b75ce1abf08720b8b21baf6463f1116923fed1f5 Mon Sep 17 00:00:00 2001 From: davy39 Date: Sat, 11 Jan 2025 18:21:55 +0100 Subject: [PATCH 11/14] change temp file path --- CHANGELOG.md | 7 +++++++ addons.xml | 2 +- addons.xml.md5 | 2 +- plugin.audio.deezer/addon.xml | 2 +- .../plugin.audio.deezer-3.0.1.zip.md5 | 1 - ....0.1.zip => plugin.audio.deezer-3.0.2.zip} | Bin 862498 -> 862505 bytes .../plugin.audio.deezer-3.0.2.zip.md5 | 1 + src/addon.xml | 2 +- 8 files changed, 12 insertions(+), 5 deletions(-) delete mode 100644 plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip.md5 rename plugin.audio.deezer/{plugin.audio.deezer-3.0.1.zip => plugin.audio.deezer-3.0.2.zip} (99%) create mode 100644 plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip.md5 diff --git a/CHANGELOG.md b/CHANGELOG.md index f8e4435..7ba0c10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## v3.0.2 + +### [Fix] + +- Temporary muzic file is now special://temp/deezer-temp.mp3 + + ## v3.0.1 diff --git a/addons.xml b/addons.xml index da5c623..3a56448 100644 --- a/addons.xml +++ b/addons.xml @@ -1,5 +1,5 @@ - + diff --git a/addons.xml.md5 b/addons.xml.md5 index f5b4a94..0cd3da0 100644 --- a/addons.xml.md5 +++ b/addons.xml.md5 @@ -1 +1 @@ -c4d1aeb765c15779a41f8bf83930c582 addons.xml +a974d39547e3ed8f40b8732817562edd addons.xml diff --git a/plugin.audio.deezer/addon.xml b/plugin.audio.deezer/addon.xml index 12f5029..8a3b377 100644 --- a/plugin.audio.deezer/addon.xml +++ b/plugin.audio.deezer/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip.md5 b/plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip.md5 deleted file mode 100644 index 6b347c0..0000000 --- a/plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip.md5 +++ /dev/null @@ -1 +0,0 @@ -db45da413a03c467e5299fa14b0aec65 *plugin.audio.deezer-3.0.1.zip diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip b/plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip similarity index 99% rename from plugin.audio.deezer/plugin.audio.deezer-3.0.1.zip rename to plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip index 1eb8b75c52edd78033656be72298f2d71117ccbe..5abc965f1468ae61cbabf9042059f00051d6815d 100644 GIT binary patch delta 1552 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 diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip.md5 b/plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip.md5 new file mode 100644 index 0000000..cf87db4 --- /dev/null +++ b/plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip.md5 @@ -0,0 +1 @@ +e92c92efdb6da7448774f63f3dc4ce0a *plugin.audio.deezer-3.0.2.zip diff --git a/src/addon.xml b/src/addon.xml index 12f5029..8a3b377 100755 --- a/src/addon.xml +++ b/src/addon.xml @@ -1,5 +1,5 @@ - + From a52d24b75a779ff59d65bc5654dd40a1392b264e Mon Sep 17 00:00:00 2001 From: davy39 Date: Sun, 12 Jan 2025 12:54:51 +0100 Subject: [PATCH 12/14] change pickle path --- CHANGELOG.md | 10 +++++ addons.xml | 16 +++---- addons.xml.md5 | 2 +- plugin.audio.deezer/addon.xml | 42 ------------------ .../plugin.audio.deezer-3.0.2.zip.md5 | 1 - ....0.2.zip => plugin.audio.deezer-3.0.3.zip} | Bin 862505 -> 862489 bytes .../plugin.audio.deezer-3.0.3.zip.md5 | 1 + src/addon.xml | 16 +++---- src/app/http/api.py | 2 +- 9 files changed, 29 insertions(+), 61 deletions(-) delete mode 100644 plugin.audio.deezer/addon.xml delete mode 100644 plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip.md5 rename plugin.audio.deezer/{plugin.audio.deezer-3.0.2.zip => plugin.audio.deezer-3.0.3.zip} (98%) create mode 100644 plugin.audio.deezer/plugin.audio.deezer-3.0.3.zip.md5 diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ba0c10..f3dd8df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog + + +## v3.0.3 + +### [Fix] + +- Change pickle path to addon directory + + + ## v3.0.2 ### [Fix] diff --git a/addons.xml b/addons.xml index 3a56448..a033baf 100644 --- a/addons.xml +++ b/addons.xml @@ -1,5 +1,5 @@ - + @@ -10,17 +10,17 @@ audio - + - https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml - https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml.md5 + https://raw.githubusercontent.com/Davy39/DeezerKodi/master/addons.xml + https://raw.githubusercontent.com/Davy39/DeezerKodi/master/addons.xml.md5 md5 This addon allows you to listen to music from Deezer. - This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. A premium account is REQUIRED. + This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. This addon was not provided by Deezer. - Fixed login and streaming (2024) @@ -29,9 +29,9 @@ all en GPL-3.0 - https://github.com/Valentin271/DeezerKodi/issues - https://github.com/Valentin271/DeezerKodi - https://github.com/Valentin271/DeezerKodi/tree/master/src + https://github.com/Davy39/DeezerKodi/issues + https://github.com/Davy39/DeezerKodi + https://github.com/Davy39/DeezerKodi/tree/master/src resources/icon.png diff --git a/addons.xml.md5 b/addons.xml.md5 index 0cd3da0..2bfeeea 100644 --- a/addons.xml.md5 +++ b/addons.xml.md5 @@ -1 +1 @@ -a974d39547e3ed8f40b8732817562edd addons.xml +efc6a4a4587c89b4a63b5e3f5b182f77 addons.xml diff --git a/plugin.audio.deezer/addon.xml b/plugin.audio.deezer/addon.xml deleted file mode 100644 index 8a3b377..0000000 --- a/plugin.audio.deezer/addon.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - audio - - - - - https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml - https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml.md5 - md5 - - - - - This addon allows you to listen to music from Deezer. - This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. A premium account is REQUIRED. - This addon was not provided by Deezer. - -- Fixed login and streaming (2024) - - - all - en - GPL-3.0 - https://github.com/Valentin271/DeezerKodi/issues - https://github.com/Valentin271/DeezerKodi - https://github.com/Valentin271/DeezerKodi/tree/master/src - - - resources/icon.png - resources/fanart.jpg - - - - diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip.md5 b/plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip.md5 deleted file mode 100644 index cf87db4..0000000 --- a/plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip.md5 +++ /dev/null @@ -1 +0,0 @@ -e92c92efdb6da7448774f63f3dc4ce0a *plugin.audio.deezer-3.0.2.zip diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip b/plugin.audio.deezer/plugin.audio.deezer-3.0.3.zip similarity index 98% rename from plugin.audio.deezer/plugin.audio.deezer-3.0.2.zip rename to plugin.audio.deezer/plugin.audio.deezer-3.0.3.zip index 5abc965f1468ae61cbabf9042059f00051d6815d..4a67eb8c20c388d673f074ffae1abd3460ca913f 100644 GIT binary patch delta 5620 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 diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.3.zip.md5 b/plugin.audio.deezer/plugin.audio.deezer-3.0.3.zip.md5 new file mode 100644 index 0000000..3b1132e --- /dev/null +++ b/plugin.audio.deezer/plugin.audio.deezer-3.0.3.zip.md5 @@ -0,0 +1 @@ +b0bb12f516eeceefcbded200ddd2ea2f *plugin.audio.deezer-3.0.3.zip diff --git a/src/addon.xml b/src/addon.xml index 8a3b377..6cd9cab 100755 --- a/src/addon.xml +++ b/src/addon.xml @@ -1,5 +1,5 @@ - + @@ -10,17 +10,17 @@ audio - + - https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml - https://raw.githubusercontent.com/Valentin271/DeezerKodi/master/addons.xml.md5 + https://raw.githubusercontent.com/Davy39/DeezerKodi/master/addons.xml + https://raw.githubusercontent.com/Davy39/DeezerKodi/master/addons.xml.md5 md5 This addon allows you to listen to music from Deezer. - This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. A premium account is REQUIRED. + This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. This addon was not provided by Deezer. - Fixed login and streaming (2024) @@ -29,9 +29,9 @@ all en GPL-3.0 - https://github.com/Valentin271/DeezerKodi/issues - https://github.com/Valentin271/DeezerKodi - https://github.com/Valentin271/DeezerKodi/tree/master/src + https://github.com/Davy39/DeezerKodi/issues + https://github.com/Davy39/DeezerKodi + https://github.com/Davy39/DeezerKodi/tree/master/src resources/icon.png diff --git a/src/app/http/api.py b/src/app/http/api.py index 55510b5..bad2341 100644 --- a/src/app/http/api.py +++ b/src/app/http/api.py @@ -30,7 +30,7 @@ class Api(object): _API_BASE_GW_URL = 'https://www.deezer.com/ajax/gw-light.php' _CLIENT_ID = "447462" _CLIENT_SECRET = "a83bf7f38ad2f137e444727cfc3775cf" - __CACHE_FILE = xbmcvfs.translatePath('special://temp/deezer-api.pickle') + __CACHE_FILE = xbmcvfs.translatePath('special://home/addons/plugin.audio.deezer/deezer-api.pickle') __INSTANCE = None From 6339df036fdebffd55c6869549d47723e24e6937 Mon Sep 17 00:00:00 2001 From: davy39 Date: Sun, 12 Jan 2025 12:57:25 +0100 Subject: [PATCH 13/14] repos --- plugin.audio.deezer/addon.xml | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 plugin.audio.deezer/addon.xml diff --git a/plugin.audio.deezer/addon.xml b/plugin.audio.deezer/addon.xml new file mode 100644 index 0000000..6cd9cab --- /dev/null +++ b/plugin.audio.deezer/addon.xml @@ -0,0 +1,42 @@ + + + + + + + + + + audio + + + + + https://raw.githubusercontent.com/Davy39/DeezerKodi/master/addons.xml + https://raw.githubusercontent.com/Davy39/DeezerKodi/master/addons.xml.md5 + md5 + + + + + This addon allows you to listen to music from Deezer. + This addon allows you to stream music from Deezer. You can browse your playlists and loved tracks, search for tracks, artists and albums. + This addon was not provided by Deezer. + +- Fixed login and streaming (2024) + + + all + en + GPL-3.0 + https://github.com/Davy39/DeezerKodi/issues + https://github.com/Davy39/DeezerKodi + https://github.com/Davy39/DeezerKodi/tree/master/src + + + resources/icon.png + resources/fanart.jpg + + + + From 04281f0ef787e52b3843df1c635f2c0c16ee56c3 Mon Sep 17 00:00:00 2001 From: davy39 Date: Sun, 12 Jan 2025 13:01:54 +0100 Subject: [PATCH 14/14] pickle path to addon_data --- .../plugin.audio.deezer-3.0.3.zip | Bin 862489 -> 862496 bytes .../plugin.audio.deezer-3.0.3.zip.md5 | 2 +- src/app/http/api.py | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.audio.deezer/plugin.audio.deezer-3.0.3.zip b/plugin.audio.deezer/plugin.audio.deezer-3.0.3.zip index 4a67eb8c20c388d673f074ffae1abd3460ca913f..4e664e4beb23f4df40325dce222fad651ead9791 100644 GIT binary patch delta 5393 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 IQ2ciO59pKgLI3~& delta 5373 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