From ff2b5ac70453c86580956b4e0f6b16bb514c9566 Mon Sep 17 00:00:00 2001 From: Itay Shechter Date: Wed, 2 Aug 2017 19:07:26 +0300 Subject: [PATCH] updates fetched from Aciidisco updated code based on AciiDisco (19/7/2017) --- README.md | 16 +++++-- addon.xml | 16 ++++--- resources/language/Dutch/strings.po | 2 +- resources/language/English/strings.po | 2 +- resources/language/German/strings.po | 2 +- resources/language/Hebrew/strings.po | 2 +- resources/language/Polish/strings.po | 8 ++-- resources/language/Portugese/strings.po | 2 +- resources/language/Slovak/strings.po | 12 ++--- resources/language/Spanish/strings.po | 2 +- resources/language/Swedish/strings.po | 28 ++++++------ resources/lib/KodiHelper.py | 6 ++- .../lib/NetflixHttpSubRessourceHandler.py | 2 + resources/lib/NetflixSession.py | 44 ++++++++++--------- resources/lib/utils.py | 19 ++++++++ resources/settings.xml | 1 + 16 files changed, 103 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index ce3656c..0eae3a0 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ ## Netflix Plugin for Kodi 18 +Bitcoin donate button + Disclaimer ------------- This plugin is not officially commisioned/supported by Netflix. @@ -10,9 +12,9 @@ The trademark "Netflix" is registered by "Netflix, Inc." Prerequisites ------------- -- Kodi 18 [agile build](https://github.com/FernetMenta/kodi-agile) +- Kodi 18 [nightlybuild](http://mirrors.kodi.tv/nightlies/) - Libwidevine 1.4.8.962 (A german description how to get/install it, can be found [here](https://www.kodinerds.net/index.php/Thread/51486-Kodi-17-Inputstream-HowTo-AddOns-f%C3%BCr-Kodi-17-ab-Beta-6-aktuelle-Git-builds-Updat/)) -- Inputstream.adaptive [agile branch build](https://github.com/liberty-developer/inputstream.adaptive/tree/agile) +- Inputstream.adaptive [v2.0.4](https://github.com/peak3d/inputstream.adaptive) FAQ --- @@ -54,12 +56,18 @@ If something doesn't work for you, please: - Enable verbose logging in the plugin settings - Enable the Debug log in you Kodi settings - Open an issue with a titles that summarises your problems and include: - - Kodi version (git sha as long as we´re on agile only) - - Inputstream.adaptive version (git sha as long as we´re on the agile branch) + - Kodi version (git sha if possible) + - Inputstream.adaptive version (git sha if possible) - Your OS and OS version - Libwedevine version - A Kodi debug log that represents your issue +Donate +------ + +If you like this project feel free to buy us some cups of coffee. +Our bitcoin address is: 1DHGftMkFXXsDY7UnqQuatWwxQzKVu88sF + Licence ------- diff --git a/addon.xml b/addon.xml index 6fb3a89..4d56cb4 100644 --- a/addon.xml +++ b/addon.xml @@ -1,5 +1,5 @@ - + @@ -28,7 +28,16 @@ MIT http://www.kodinerds.net/index.php/Thread/55607-Inputstream-Agile-Betatest-Netflix/ https://github.com/asciidisco/plugin.video.netflix - v0.11.14 (2017-07-02) + v0.11.16 (2017-07-19) + - Fix error on *nix devices + + v0.11.15 (2017-07-19) + - Fix issue with Slovak, Polish & Swedish language files + - Add calculation of ESN for Android + - Logout in settings now also deletes Manifest data + - Add hidden ESN field in config & delete Manifest data if it doesn't fit the public one + + v0.11.14 (2017-07-02) - Fix issue with Unicode escaping v0.11.13 (2017-07-02) @@ -46,9 +55,6 @@ v0.11.10 (2017-4-10) - Adds subtitle support - Polish translations - - v0.11.9 (2017-4-5) - - Fix issues with persisted msl manifests diff --git a/resources/language/Dutch/strings.po b/resources/language/Dutch/strings.po index 962d907..8bc942b 100644 --- a/resources/language/Dutch/strings.po +++ b/resources/language/Dutch/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.14 +# Addon version: 0.11.18 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/English/strings.po b/resources/language/English/strings.po index 6779545..d8df2d7 100644 --- a/resources/language/English/strings.po +++ b/resources/language/English/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.14 +# Addon version: 0.11.18 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/German/strings.po b/resources/language/German/strings.po index 76decf5..1e9f74b 100644 --- a/resources/language/German/strings.po +++ b/resources/language/German/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.14 +# Addon version: 0.11.18 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/Hebrew/strings.po b/resources/language/Hebrew/strings.po index 16cfd80..9472edc 100644 --- a/resources/language/Hebrew/strings.po +++ b/resources/language/Hebrew/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.14 +# Addon version: 0.11.18 # Addon Provider: libdev + jojo + asciidisco # Translated by: Itayshechter msgid "" diff --git a/resources/language/Polish/strings.po b/resources/language/Polish/strings.po index 4ac70c8..05cd786 100644 --- a/resources/language/Polish/strings.po +++ b/resources/language/Polish/strings.po @@ -1,14 +1,14 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.14 +# Addon version: 0.11.18 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: 2017-04-13 17:05+0200\n" +"PO-Revision-Date: 2017-07-17 20:27+0200\n" "Last-Translator: Marcin W.\n" "Language: pl\n" "Language-Team: Polish (Poland) (http://www.transifex.com/teamxbmc/kodi-main/language/pl_PL/)\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.0.1\n" +"X-Generator: Poedit 2.0.2\n" msgctxt "Addon Summary" msgid "Netflix" @@ -136,7 +136,7 @@ msgstr "Błąd odtwarzania" msgctxt "#30029" msgid "Missing Inputstream addon" -msgstr "Brakuje zainstalowanej wtyczki strumieniowej" +msgstr "Brakuje wtyczki strumieniowej InputStream Adaptive" msgctxt "#30030" msgid "Remove from library" diff --git a/resources/language/Portugese/strings.po b/resources/language/Portugese/strings.po index 0bca0c4..3f0f813 100644 --- a/resources/language/Portugese/strings.po +++ b/resources/language/Portugese/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.14 +# Addon version: 0.11.18 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/Slovak/strings.po b/resources/language/Slovak/strings.po index cf87ce2..ee553e4 100644 --- a/resources/language/Slovak/strings.po +++ b/resources/language/Slovak/strings.po @@ -1,14 +1,14 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.14 +# Addon version: 0.11.18 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2017-01-01 12:00+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2017-05-14 19:55+0000\n" "Last-Translator: Matej Moško \n" "Language-Team: Slovak\n" "MIME-Version: 1.0\n" @@ -19,11 +19,11 @@ msgstr "" msgctxt "Addon Summary" msgid "Netflix" -msgstr "Netlflix" +msgstr "Netflix" msgctxt "Addon Description" msgid "Netflix VOD Services Addon" -msgstr "Doplnok služby Netflix" +msgstr "Doplnok na prehrávanie obsahu služby Netflix" msgctxt "Addon Disclaimer" msgid "Some parts of this addon may not be legal in your country of residence - please check with your local laws before installing." @@ -135,7 +135,7 @@ msgstr "Chyba prehrávania" msgctxt "#30029" msgid "Missing Inputstream addon" -msgstr "Nenašiel sa doplnok Inputstream" +msgstr "Nepodarilo sa nájsť doplnok Inputstream" msgctxt "#30030" msgid "Remove from library" @@ -155,7 +155,7 @@ msgstr "Použiť Dolby Sound" msgctxt "#30034" msgid "ESN (set automatically, can be changed manually)" -msgstr "ESN (nastavené automaticky, môžete to ručne zmeniť" +msgstr "ESN (nastavené automaticky, môžete to ručne zmeniť)" msgctxt "#30035" msgid "Inputstream Addon Settings..." diff --git a/resources/language/Spanish/strings.po b/resources/language/Spanish/strings.po index d019e8a..902eb9b 100644 --- a/resources/language/Spanish/strings.po +++ b/resources/language/Spanish/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.14 +# Addon version: 0.11.18 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/Swedish/strings.po b/resources/language/Swedish/strings.po index 540fc1d..04d3090 100644 --- a/resources/language/Swedish/strings.po +++ b/resources/language/Swedish/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.14 +# Addon version: 0.11.18 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" @@ -23,11 +23,11 @@ msgstr "Netflix" msgctxt "Addon Description" msgid "Netflix VOD Services Addon" -msgstr "Netflix VOD Service Addon" +msgstr "Netflix VOD-tjänstetillägg" msgctxt "Addon Disclaimer" msgid "Some parts of this addon may not be legal in your country of residence - please check with your local laws before installing." -msgstr "Vissa delar av detta addon kanske inte är fullt lagliga att använda i ditt land - kontrollera dina lokala lagar innan du installerar." +msgstr "Vissa delar av detta tillägg kanske inte är fullt lagliga att använda i ditt land - kontrollera dina lokala lagar innan du installerar." msgctxt "#30001" msgid "Recommendations" @@ -35,7 +35,7 @@ msgstr "Rekommendationer" msgctxt "#30002" msgid "Adult Pin" -msgstr "Vuxen-pinkod" +msgstr "Barnskydd" msgctxt "#30003" msgid "Search term" @@ -51,15 +51,15 @@ msgstr "E-post" msgctxt "#30006" msgid "Adult verification failed" -msgstr "Vuxen-pinkod verifiering misslyckades" +msgstr "Verifiering av barnskyddet misslyckades" msgctxt "#30007" msgid "Please Check your adult pin" -msgstr "Kontrollera din Vuxen-pinkod" +msgstr "Kontrollera koden till barnskyddet" msgctxt "#30008" msgid "Login failed" -msgstr "Inloggning misslyckades" +msgstr "Inloggningen misslyckades" msgctxt "#30009" msgid "Please Check your credentials" @@ -115,7 +115,7 @@ msgstr "Expert" msgctxt "#30024" msgid "SSL verification" -msgstr "SSL kontroll" +msgstr "SSL-kontroll" msgctxt "#30025" msgid "Library" @@ -127,15 +127,15 @@ msgstr "Aktivera anpassad biblioteksmapp" msgctxt "#30027" msgid "Custom library path" -msgstr "Ändra bibliotek genväg" +msgstr "Anpassad bibliotekssökväg" msgctxt "#30028" msgid "Playback error" -msgstr "Uppspelnings error" +msgstr "Uppspelningsfel" msgctxt "#30029" msgid "Missing Inputstream addon" -msgstr "Saknar 'InputStream' addon" +msgstr "Saknar tillägget InputStream" msgctxt "#30030" msgid "Remove from library" @@ -143,7 +143,7 @@ msgstr "Ta bort från biblioteket" msgctxt "#30031" msgid "Change library title" -msgstr "Ändra bibliotektiteln" +msgstr "Ändra bibliotekstiteln" msgctxt "#30032" msgid "Tracking" @@ -151,7 +151,7 @@ msgstr "Spårning" msgctxt "#30033" msgid "Use Dolby Sound" -msgstr "Använd Dolby Digital ljud" +msgstr "Använd Dolby Digital-ljud" msgctxt "#30034" msgid "ESN (set automatically, can be changed manually)" @@ -159,4 +159,4 @@ msgstr "ESN (ändra automatiskt, kan ändras manuellt)" msgctxt "#30035" msgid "Inputstream Addon Settings..." -msgstr "InputStream Addon inställningar..." +msgstr "Inställningar för tillägget InputStream..." diff --git a/resources/lib/KodiHelper.py b/resources/lib/KodiHelper.py index a75f2e7..7e18113 100644 --- a/resources/lib/KodiHelper.py +++ b/resources/lib/KodiHelper.py @@ -13,6 +13,7 @@ from os.path import join, isfile from urllib import urlencode from xbmcaddon import Addon from uuid import uuid4 +from utils import get_user_agent_for_current_platform from UniversalAnalytics import Tracker try: import cPickle as pickle @@ -204,7 +205,7 @@ class KodiHelper: """ Returns the esn from settings """ - stored_esn = self.get_esn() + stored_esn = self.get_esn() if not stored_esn and esn: self.set_setting('esn', esn) self.delete_manifest_data() @@ -693,6 +694,9 @@ class KodiHelper: # inputstream addon properties msl_service_url = 'http://localhost:' + str(addon.getSetting('msl_service_port')) play_item = xbmcgui.ListItem(path=msl_service_url + '/manifest?id=' + video_id) + play_item.setContentLookup(False) + play_item.setMimeType('application/dash+xml') + play_item.setProperty(inputstream_addon + '.stream_headers', 'user-agent=' + get_user_agent_for_current_platform()) play_item.setProperty(inputstream_addon + '.license_type', 'com.widevine.alpha') play_item.setProperty(inputstream_addon + '.manifest_type', 'mpd') play_item.setProperty(inputstream_addon + '.license_key', msl_service_url + '/license?id=' + video_id + '||b{SSM}!b{SID}|') diff --git a/resources/lib/NetflixHttpSubRessourceHandler.py b/resources/lib/NetflixHttpSubRessourceHandler.py index 55d95ca..43eb537 100644 --- a/resources/lib/NetflixHttpSubRessourceHandler.py +++ b/resources/lib/NetflixHttpSubRessourceHandler.py @@ -74,6 +74,8 @@ class NetflixHttpSubRessourceHandler: """ self.profiles = [] self.credentials = {'email': '', 'password': ''} + # delete esn data + self.kodi_helper.delete_manifest_data() return self.netflix_session.logout() def login (self, params): diff --git a/resources/lib/NetflixSession.py b/resources/lib/NetflixSession.py index d2be1cd..dd81914 100644 --- a/resources/lib/NetflixSession.py +++ b/resources/lib/NetflixSession.py @@ -10,7 +10,7 @@ from urllib import quote, unquote from time import time from base64 import urlsafe_b64encode from bs4 import BeautifulSoup, SoupStrainer -from utils import noop +from utils import noop, get_user_agent_for_current_platform try: import cPickle as pickle except: @@ -103,7 +103,7 @@ class NetflixSession: # start session, fake chrome on the current platform (so that we get a proper widevine esn) & enable gzip self.session = session() self.session.headers.update({ - 'User-Agent': self._get_user_agent_for_current_platform(), + 'User-Agent': get_user_agent_for_current_platform(), 'Accept-Encoding': 'gzip' }) @@ -1880,24 +1880,6 @@ class NetflixSession: """ return urlsafe_b64encode(account['email']) - def _get_user_agent_for_current_platform (self): - """Determines the user agent string for the current platform (to retrieve a valid ESN) - - Returns - ------- - :obj:`str` - User Agent for platform - """ - import platform - self.log(msg='Building User Agent for platform: ' + str(platform.system()) + ' - ' + str(platform.machine())) - if platform.system() == 'Darwin': - return 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36' - if platform.system() == 'Windows': - return 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36' - if platform.machine().startswith('arm'): - return 'Mozilla/5.0 (X11; CrOS armv7l 7647.78.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36' - return 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36' - def _session_post (self, component, type='document', data={}, headers={}, params={}): """Executes a get request using requests for the current session & measures the duration of that request @@ -2299,11 +2281,31 @@ class NetflixSession: :obj:`str` of :obj:`str ESN, something like: NFCDCH-MC-D7D6F54LOPY8J416T72MQXX3RD20ME """ - esn = '' + # we generate an esn from device strings for android + import subprocess + try: + manufacturer = subprocess.check_output(["/system/bin/getprop", "ro.product.manufacturer"]) + if manufacturer: + esn = 'NFANDROID1-PRV-' + input = subprocess.check_output(["/system/bin/getprop", "ro.nrdp.modelgroup"]) + if not input: + esn = esn + 'T-L3-' + else: + esn = esn + input.strip(' \t\n\r') + '-' + esn = esn + '{:5}'.format(manufacturer.strip(' \t\n\r').upper()) + input = subprocess.check_output(["/system/bin/getprop" ,"ro.product.model"]) + esn = esn + input.strip(' \t\n\r').replace(' ', '=').upper() + self.log(msg='Android generated ESN:' + esn) + return esn + except OSError as e: + self.log(msg='Ignoring exception for non Android devices') + # values are accessible via dict (sloppy parsing successfull) if type(netflix_page_data) == dict: return netflix_page_data.get('esn', '') + esn = '' + # values are stored in lists (returned from JS parser) for item in netflix_page_data: if 'esnGeneratorModel' in dict(item).keys(): diff --git a/resources/lib/utils.py b/resources/lib/utils.py index afb056f..a1b1a2d 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -3,6 +3,8 @@ # Module: utils # Created on: 13.01.2017 +import platform + # Takes everything, does nothing, classic no operation function def noop (**kwargs): return True @@ -27,3 +29,20 @@ def log(f, name=None): return result wrapped.__doc__ = f.__doc__ return wrapped + +def get_user_agent_for_current_platform(): + """Determines the user agent string for the current platform (to retrieve a valid ESN) + + Returns + ------- + :obj:`str` + User Agent for platform + """ + system = platform.system() + if system == 'Darwin': + return 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' + if system == 'Windows': + return 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' + if platform.machine().startswith('arm'): + return 'Mozilla/5.0 (X11; CrOS armv7l 7647.78.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' + return 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' diff --git a/resources/settings.xml b/resources/settings.xml index 5c0faab..bd9b27a 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -15,6 +15,7 @@ + -- 2.30.2