## Netflix Plugin for Kodi 18
-###Disclaimer
+Disclaimer
-------------
This plugin is not officially commisioned/supported by Netflix.
The trademark "Netflix" is registered by "Netflix, Inc."
-###Prerequisites
-----------------
+Prerequisites
+-------------
- Kodi 18 [agile build](https://github.com/FernetMenta/kodi-agile)
- 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)
-###Functionality
-----------------
+FAQ
+---
+
+- [Does it work with Kodi 17](https://github.com/asciidisco/plugin.video.netflix/issues/25)
+- [Does it work on a RPI](https://github.com/asciidisco/plugin.video.netflix/issues/28)
+- [Which video resolutions are supported](https://github.com/asciidisco/plugin.video.netflix/issues/27)
+
+Functionality
+-------------
- Multiple profiles
- Search Netflix (incl. suggestions)
- Netflix categories, recommendations, "my list" & continue watching
- Add & remove to/from "my list"
- Export of complete shows & movies in local database (custom library folder can be configured, by default the .strm files are stored in `userdata/addon_data/plugin.video.netflix` )
-###ToDo
-----------------
+ToDo
+----
> Note: Those Todos are considered enhancements, they´re not issues, nor they prevent the usage of the plugin for everyday business
- [ ] If a new user has been created, they need to select their movie/show preferences to actually get started, we could provide the same mechanisms in Kodi
- [ ] Enable aggressive fetching of data in background (maybe using Futures), like the Netflix website does, to enhance the speed and the user experience when browsing the frontend
-###Something doesn't work
--------------------------
+Something doesn't work
+----------------------
If something doesn't work for you, please:
- Libwedevine version
- A Kodi debug log that represents your issue
-###Licence
------------------
+Licence
+-------
Licenced under The MIT License.
Includes [pyjsparser](https://github.com/PiotrDabkowski/pyjsparser) by [Piotr Dabkowski](https://github.com/PiotrDabkowski)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.netflix" name="Netflix" version="0.11.8" provider-name="libdev + jojo + asciidisco">
+<addon id="plugin.video.netflix" name="Netflix" version="0.11.9" provider-name="libdev + jojo + asciidisco">
<requires>
<import addon="xbmc.python" version="2.24.0"/>
<import addon="script.module.beautifulsoup4" version="4.3.2"/>
# Kodi Media Center language file
# Addon Name: Netflix
# Addon id: plugin.video.netflix
-# Addon version: 0.11.8
+# Addon version: 0.11.9
# Addon Provider: libdev + jojo + asciidisco
msgid ""
msgstr ""
# Kodi Media Center language file
# Addon Name: Netflix
# Addon id: plugin.video.netflix
-# Addon version: 0.11.8
+# Addon version: 0.11.9
# Addon Provider: libdev + jojo + asciidisco
msgid ""
msgstr ""
--- /dev/null
+# Kodi Media Center language file
+# Addon Name: Netflix
+# Addon id: plugin.video.netflix
+# Addon version: 0.11.8
+# 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-03-24 22:00+0100\n"
+"Last-Translator: Marcin W.\n"
+"Language: pl\n"
+"Language-Team: Polish (Poland) (http://www.transifex.com/teamxbmc/kodi-main/language/pl_PL/)\n"
+"MIME-Version: 1.0\n"
+"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 1.8.12\n"
+
+msgctxt "Addon Summary"
+msgid "Netflix"
+msgstr "Netflix"
+
+msgctxt "Addon Description"
+msgid "Netflix VOD Services Addon"
+msgstr "Wtyczka dla usług VOD serwisu 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."
+msgstr "Niektóre części tego dodatku mogą być nielegalne w Twoim kraju zamieszkania - sprawdź, przed instalacją, czy nie jest w niezgodnem z lokalnym prawem."
+
+msgctxt "#30001"
+msgid "Recommendations"
+msgstr "Polecane"
+
+msgctxt "#30002"
+msgid "Adult Pin"
+msgstr "Kod kontroli rodzicielskiej"
+
+msgctxt "#30003"
+msgid "Search term"
+msgstr "Szukane wyrażenie"
+
+msgctxt "#30004"
+msgid "Password"
+msgstr "Hasło"
+
+msgctxt "#30005"
+msgid "E-mail"
+msgstr "Adres e-mail"
+
+msgctxt "#30006"
+msgid "Adult verification failed"
+msgstr "Nieudana weryfikacja kontroli rodzicielskiej"
+
+msgctxt "#30007"
+msgid "Please Check your adult pin"
+msgstr "Zweryfikuj poprawność kodu kontroli rodzicielskiej"
+
+msgctxt "#30008"
+msgid "Login failed"
+msgstr "Nieudane logowanie"
+
+msgctxt "#30009"
+msgid "Please Check your credentials"
+msgstr "Zweryfikuj poprawność wprowadzonych danych"
+
+msgctxt "#30010"
+msgid "Genres"
+msgstr "Gatunki"
+
+msgctxt "#30011"
+msgid "Search"
+msgstr "Szukaj"
+
+msgctxt "#30012"
+msgid "No seasons available"
+msgstr "Brak dostępnych sezonów"
+
+msgctxt "#30013"
+msgid "No matches found"
+msgstr "Brak pasujących wyników"
+
+msgctxt "#30014"
+msgid "Account"
+msgstr "Konto"
+
+msgctxt "#30017"
+msgid "Logout"
+msgstr "Wyloguj"
+
+msgctxt "#30018"
+msgid "Export to library"
+msgstr "Eksportuj do biblioteki"
+
+msgctxt "#30019"
+msgid "Rate on Netflix"
+msgstr "Oceń w serwisie Netflix"
+
+msgctxt "#30020"
+msgid "Remove from 'My list'"
+msgstr "Usuń z 'Moja lista'"
+
+msgctxt "#30021"
+msgid "Add to 'My list'"
+msgstr "Dodaj do 'Moja lista'"
+
+msgctxt "#30022"
+msgid "(between 0 & 10)"
+msgstr "(między 0 a 10)"
+
+msgctxt "#30023"
+msgid "Expert"
+msgstr "Eksperckie"
+
+msgctxt "#30024"
+msgid "SSL verification"
+msgstr "Weryfikacja certyfikatu SSL"
+
+msgctxt "#30025"
+msgid "Library"
+msgstr "Biblioteka"
+
+msgctxt "#30026"
+msgid "Enable custom library folder"
+msgstr "Używaj niestandardowego folderu biblioteki"
+
+msgctxt "#30027"
+msgid "Custom library path"
+msgstr "Folder niestandardowy"
+
+msgctxt "#30028"
+msgid "Playback error"
+msgstr "Błąd odtwarzania"
+
+msgctxt "#30029"
+msgid "Missing Inputstream addon"
+msgstr "Brakuje wtyczki strumieniowej InputStream Adaptive"
+
+msgctxt "#30030"
+msgid "Remove from library"
+msgstr "Usuń z biblioteki"
+
+msgctxt "#30031"
+msgid "Change library title"
+msgstr "Zmień tytuł"
+
+msgctxt "#30032"
+msgid "Tracking"
+msgstr "Śledzenie"
+
+msgctxt "#30033"
+msgid "Use Dolby Sound"
+msgstr "Używaj ścieżek Dolby Sound"
+
+msgctxt "#30034"
+msgid "ESN (set automatically, can be changed manually)"
+msgstr "ESN (ustawiany automatycznie, z możliwością zmiany)"
+
+msgctxt "#30035"
+msgid "Inputstream Addon Settings..."
+msgstr "Ustawienia wtyczki strumieniowej..."
# Kodi Media Center language file
# Addon Name: Netflix
# Addon id: plugin.video.netflix
-# Addon version: 0.11.8
+# Addon version: 0.11.9
# Addon Provider: libdev + jojo + asciidisco
msgid ""
msgstr ""
# Kodi Media Center language file
# Addon Name: Netflix
# Addon id: plugin.video.netflix
-# Addon version: 0.11.8
+# Addon version: 0.11.9
# Addon Provider: libdev + jojo + asciidisco
msgid ""
msgstr ""
--- /dev/null
+# Kodi Media Center language file
+# Addon Name: Netflix
+# Addon id: plugin.video.netflix
+# Addon version: 0.11.8
+# 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"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+msgctxt "Addon summering"
+msgstr "Netflix"
+msgstr ""
+
+msgctxt "Addon beskrivning"
+msgstr "Netflix VOD Service Addon"
+msgstr ""
+
+msgctxt "Addon förbehåll"
+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 ""
+
+msgctxt "# 30001"
+msgid "Rekommendationer"
+msgstr ""
+
+msgctxt "# 30002"
+msgstr "Vuxen-pinkod"
+msgstr ""
+
+msgctxt "# 30003"
+msgstr "Sökord"
+msgstr ""
+
+msgctxt "# 30004"
+msgstr "Lösenord"
+msgstr ""
+
+msgctxt "# 30005"
+msgstr "E-post"
+msgstr ""
+
+msgctxt "# 30006"
+msgstr "Vuxen-pinkod verifiering misslyckades"
+msgstr ""
+
+msgctxt "# 30007"
+msgstr "Kontrollera din Vuxen-pinkod"
+msgstr ""
+
+msgctxt "# 30008"
+msgstr "Inloggning misslyckades"
+msgstr ""
+
+msgctxt "# 30009"
+msgstr "Kontrollera dina inloggninguppgifter"
+msgstr ""
+
+msgctxt "# 30010"
+msgid "Genrer"
+msgstr ""
+
+msgctxt "# 30011"
+msgstr "Sök"
+msgstr ""
+
+msgctxt "# 30012"
+msgstr "Inga säsonger tillgängliga"
+msgstr ""
+
+msgctxt "# 30013"
+msgstr "Inga träffar"
+msgstr ""
+
+msgctxt "# 30014"
+msgid "Konto"
+msgstr ""
+
+msgctxt "# 30017"
+msgstr "Logga ut"
+msgstr ""
+
+msgctxt "# 30018"
+msgstr "Exportera till biblioteket"
+msgstr ""
+
+msgctxt "# 30019"
+msgstr "Betygsätt på Netflix"
+msgstr ""
+
+msgctxt "# 30020"
+msgstr "Ta bort från 'Min lista'"
+msgstr ""
+
+msgctxt "# 30021"
+msgstr "Lägg till 'Min lista'"
+msgstr ""
+
+msgctxt "# 30022"
+msgid "(mellan 0 & 10)"
+msgstr ""
+
+msgctxt "# 30023"
+msgid "Expert"
+msgstr ""
+
+msgctxt "# 30024"
+msgstr "SSL kontroll"
+msgstr ""
+
+msgctxt "# 30025"
+msgstr "Bibliotek"
+msgstr ""
+
+msgctxt "# 30026"
+msgstr "Aktivera anpassad biblioteksmapp"
+msgstr ""
+
+msgctxt "# 30027"
+msgid "Ändra bibliotek genväg"
+msgstr ""
+
+msgctxt "# 30028"
+msgid "Uppspelnings error"
+msgstr ""
+
+msgctxt "# 30029"
+msgid "Saknar 'InputStream' addon"
+msgstr ""
+
+msgctxt "# 30030"
+msgstr "Ta bort från biblioteket"
+msgstr ""
+
+msgctxt "# 30031"
+msgstr "Ändra bibliotektiteln"
+msgstr ""
+
+msgctxt "# 30032"
+msgstr "Spårning"
+msgstr ""
+
+msgctxt "# 30033"
+msgstr "Använd Dolby Digital ljud"
+msgstr ""
+
+msgctxt "# 30034"
+msgstr "ESN (ändra automatiskt, kan ändras manuellt)"
+msgstr ""
+
+msgctxt "# 30035"
+msgid "InputStream Addon inställningar..."
+msgstr ""
import pprint
import random
from StringIO import StringIO
+
+from datetime import datetime
import requests
import zlib
segment_base = ET.SubElement(rep, 'SegmentBase', indexRange="0-"+str(init_length), indexRangeExact="true")
ET.SubElement(segment_base, 'Initialization', range='0-'+str(init_length))
- # Multiple Adaption Set for subtiles
+ # Multiple Adaption Sets for subtiles
for text_track in manifest['textTracks']:
- print text_track
if 'downloadables' not in text_track or text_track['downloadables'] is None:
continue
subtiles_adaption_set = ET.SubElement(period, 'AdaptationSet',
lang=text_track['bcp47'],
+ codecs='stpp',
contentType='text',
- mimeType='text/ttml')
+ mimeType='application/ttml+xml')
for downloadable in text_track['downloadables']:
rep = ET.SubElement(subtiles_adaption_set, 'Representation',
- bandwidth='0',
nflxProfile=downloadable['contentProfile']
)
- print downloadable['urls']
ET.SubElement(rep, 'BaseURL').text = self.__get_base_url(downloadable['urls'])
-
-
-
xml = ET.tostring(root, encoding='utf-8', method='xml')
xml = xml.replace('\n', '').replace('\r', '')
return xml
def __load_msl_data(self):
msl_data = json.JSONDecoder().decode(self.load_file(self.kodi_helper.msl_data_path, 'msl_data.json'))
+ #Check expire date of the token
+ master_token = json.JSONDecoder().decode(base64.standard_b64decode(msl_data['tokens']['mastertoken']['tokendata']))
+ valid_until = datetime.utcfromtimestamp(int(master_token['expiration']))
+ present = datetime.now()
+ difference = valid_until - present
+ difference = difference.total_seconds() / 60 / 60
+ # If token expires in less then 10 hours or is expires renew it
+ if difference < 10:
+ self.__load_rsa_keys()
+ self.__perform_key_handshake()
+ return
+
self.__set_master_token(msl_data['tokens']['mastertoken'])
self.encryption_key = base64.standard_b64decode(msl_data['encryption_key'])
self.sign_key = base64.standard_b64decode(msl_data['sign_key'])