diff --git a/vinetrimmer/key_store.db b/vinetrimmer/key_store.db index d127a05..133f37a 100644 Binary files a/vinetrimmer/key_store.db and b/vinetrimmer/key_store.db differ diff --git a/vinetrimmer/parsers/m3u8.py b/vinetrimmer/parsers/m3u8.py index 9cc1262..c6aebb0 100644 --- a/vinetrimmer/parsers/m3u8.py +++ b/vinetrimmer/parsers/m3u8.py @@ -37,40 +37,14 @@ def parse(master, source=None): # uses master.session_keys instead of master.keys as master.keys is ONLY EXT-X-KEYS and # doesn't include EXT-X-SESSION-KEYS which is whats used for variant playlist M3U8. try: - psshPR = [ - session_key.uri.split(",")[-1] - for session_key in master.session_keys - if ( - session_key.keyformat.lower() == "com.microsoft.playready" - and - source == "DSNP" - and - x.stream_info.characteristics.lower().replace('"', "") in session_key.characteristics.lower().split(",") - ) - ][0] - except: - try: - psshPR = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "com.microsoft.playready"][0] - except IndexError: - psshPR = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "com.microsoft.playready"] + psshPR = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "com.microsoft.playready"][0] + except IndexError: + psshPR = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "com.microsoft.playready"] try: - psshWV = [ - session_key.uri.split(",")[-1] - for session_key in master.session_keys - if ( - session_key.keyformat.lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" - and - source == "DSNP" - and - x.stream_info.characteristics.lower().replace('"', "") in session_key.characteristics.lower().split(",") - ) - ][0] + psshWV = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"][0] except IndexError: - try: - psshWV = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"][0] - except IndexError: - psshWV = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"] + psshWV = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"] # if pssh: # pssh = base64.b64decode(pssh) # # noinspection PyBroadException @@ -108,8 +82,24 @@ def parse(master, source=None): descriptor=Track.Descriptor.M3U, # decryption encrypted=bool(master.keys or master.session_keys), - psshWV=psshWV, - psshPR=psshPR, + psshWV= [ + session_key.uri.split(",")[-1] + for session_key in master.session_keys + if ( + session_key.keyformat.lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" + and + x.stream_info.characteristics.lower().replace('"', "") in session_key.characteristics.lower().split(",") + ) + ][0] if source == "DSNP" else (psshWV if psshWV != [] else None), + psshPR=[ + session_key.uri.split(",")[-1] + for session_key in master.session_keys + if ( + session_key.keyformat.lower() == "com.microsoft.playready" + and + x.stream_info.characteristics.lower().replace('"', "") in session_key.characteristics.lower().split(",") + ) + ][0] if source == "DSNP" else (psshPR if psshPR != [] else None), # extra extra=x ) for x in master.playlists], diff --git a/vinetrimmer/services/appletvplus.py b/vinetrimmer/services/appletvplus.py index a98e7e2..01fea51 100644 --- a/vinetrimmer/services/appletvplus.py +++ b/vinetrimmer/services/appletvplus.py @@ -106,7 +106,7 @@ class AppleTVPlus(BaseService): id_=self.title, type_=Title.Types.MOVIE, name=title_information["title"], - #year=datetime.utcfromtimestamp(title_information["releaseDate"] / 1000).year, + year=datetime.utcfromtimestamp(title_information["releaseDate"] / 1000).year, original_lang=title_information["originalSpokenLanguages"][0]["locale"], source=self.ALIASES[0], service_data=title_information @@ -117,8 +117,8 @@ class AppleTVPlus(BaseService): id_=self.title, type_=Title.Types.MOVIE, name=title_information["title"], - #year=datetime.utcfromtimestamp(title_information["releaseDate"] / 1000).year, - #original_lang=title_information["originalSpokenLanguages"][0]["locale"], + year=datetime.utcfromtimestamp(title_information["releaseDate"] / 1000).year, + original_lang=title_information["originalSpokenLanguages"][0]["locale"], source=self.ALIASES[0], service_data=title_information ) @@ -243,13 +243,7 @@ class AppleTVPlus(BaseService): ) ]) except: - return Tracks([ - # multiple CDNs, only want one - x for x in tracks - #if any( - # cdn in as_list(x.url)[0].split("?")[1].split("&") for cdn in ["cdn=ak", "cdn=vod-ak-aoc.tv.apple.com"] - #) - ]) + return Tracks([x for x in tracks]) def get_chapters(self, title): return [] @@ -284,7 +278,10 @@ class AppleTVPlus(BaseService): if not e.response.text: raise self.log.exit(" - No license returned!") raise self.log.exit(f" - Unable to obtain license (error code: {e.response.json()['errorCode']})") - return base64.b64decode(res['streaming-response']['streaming-keys'][0]["license"]) + try: + return base64.b64decode(res['streaming-response']['streaming-keys'][0]["license"]) + except: + raise self.log.exit(res['streaming-response']) # Service specific functions diff --git a/vinetrimmer/vinetrimmer.yml b/vinetrimmer/vinetrimmer.yml index 700fccc..6ce06aa 100644 --- a/vinetrimmer/vinetrimmer.yml +++ b/vinetrimmer/vinetrimmer.yml @@ -8,6 +8,7 @@ aria2c: cdm: default: 'hisense_smarttv_he55a7000euwts_sl3000' Amazon: 'hisense_smarttv_he55a7000euwts_sl3000' + AppleTVPlus: 'mtc_mtc_atv_atv_sl3000' Hotstar: 'xiaomi_mi_a1_15.0.0_60ceee88_8159_l3' Jio: 'xiaomi_mi_a1_15.0.0_60ceee88_8159_l3' DisneyPlus: 'mtc_mtc_atv_atv_sl3000'