Mediatheken-Plugin für Kodi
-
Hallo,
da mit der Zeit die von mir bisher verwendeten Mediatheken-Plugins in Kodi ihren Dienst quittiert hatten, habe ich mir dazu entschlossen selber ein kleines Plugin zu schreiben. Als Ziel hatte ich mir gesetzt, dass es auch auf einem Raspberry Pi 1 mit OpenELEC/Libreelec schnell genug läuft und gut per Fernbedienung gesteuert werden kann.
Das Plugin läd den Datensatz von MediathekView herunter und greift dannach nur noch auf den lokalen Index zu. Um nicht immer ~120 MB auf die Flashkarte/Festplatte des Mediacenters zu schreiben wird nur eine Teilmenge der Daten gespeichert (rund 10%.)Neu seit Okt. 2017 Das Plugin kann nun auch Suchanfragen direkt an MediathekviewWeb.de senden. Diese Variante sollte auf allen Kodi-Systemen laufen, da dann nicht auf das Binary zugegriffen werden muss. Das Feature befindet sich noch in der Testphase und muss in den Optionen explizit aktiviert werden.
Projektseite bei Github: https://github.com/YggdrasiI/plugin.video.simple_mediathek_de
Download des letzten Releases: plugin.video.simpleMediathek_de (Version 0.8.1) (Letzte Aktualisierung 08. Nov. 2017)Das Addon ist in keinen Addon-Repository enthalten. Daher kann man es bisher nur per Hand installieren. Installationsanleitung
Binaries für x86_64 (Linux) und armv6l/armv7l (Raspberry PI) sind im Anhang dieses Beitrags enthalten. Für andere Systeme muss man das CLI-Programm selber kompilieren.
- Kurzanleitung zum Kompilieren:
- Git-Repository klonen
- ‘make native’ baut (im Idealfall ;)) das CLI-Programm.
- ‘make addon’ erstellt das Addon-Zip für Kodi.
Fehlermeldungen und Feedback gerne hier oder auf Github. (Bei der Nachfrage nach Features bitte beachten, dass ich nicht plane, es zu einem „voll-umfänglichen Client“ auszubauen.)
Screenshots:
P.S. Das Erstellen des ersten ersten Filmliste auf dem RPi1 dauert systembedingt leider ~2 Minuten. Das liegt an der hohen CPU-Last, die vom Standard-Skin von Kodi erzeugt wird (ca. 40%). Führt man das Update über SSH aus, reduziert sich die Zeit auf die Hälfte. Auf schnelleren Systemen bewegt sich die Updatezeit, wenn die Internetleitung nicht blockiert, unter 5 Sekunden.
@MediathekView-Admins:
• Das Download-Skipt im Addon verteilt die Anfragen gemäß der Werte in der XML-Downloadliste.
• Diff-Updates werden unterstützt, wobei ich die exakten Regeln für deren Erstellung leider nicht mehr wiedergefunden habe -
Sehr cooles Projekt.
-
Es nutzt nicht die neue Webapi, sondern läd den Datensatz von MediathekView herunter und reduziert die Daten auf ein Minimalmaß.
Es gibt eine API? Genaugenommen gibt es eine, aber die ist (noch) nicht öffentlich.
Gerade für schwache Systeme wie dem Pi wäre es doch Ideal. Super schnell und zeitgleich Zugriff auf die volle Filmliste.Diff-Updates werden unterstützt, wobei ich die exakten Regeln für deren Erstellung leider nicht mehr wiedergefunden habe.
Du meinst damit
Filmliste-diff.xz
? Ansonsten könnte ich dir sagen, wie ich das mit MVW gelöst habe. -
@bagbag sagte in Mediatheken-Plugin für Kodi:
Es nutzt nicht die neue Webapi, sondern läd den Datensatz von MediathekView herunter und reduziert die Daten auf ein Minimalmaß.
Es gibt eine API? Genaugenommen gibt es eine, aber die ist (noch) nicht öffentlich.
Gerade für schwache Systeme wie dem Pi wäre es doch Ideal. Super schnell und zeitgleich Zugriff auf die volle Filmliste.Aha, die API deines Projektes ist noch nicht öffentlich (dokumentiert). Ja, wenn ihr so eine API später für alle zur Verfügnug stellt, und eure Server die Anfragen auch verarbeiten können, würde das für schwache Systeme + Kodi-Plugin die schnellste Lösung darstelllen.
(Jedenfalls theoretisch, denn auf meinem RPi gibt es genug Plugins die trotzdem recht gemächlich arbeiten, um es positiv auszudrücken, ;))
Ich wollte eigentlich nur ausdrücken, dass ich keine Anfragen an den/die MediathekViewWeb-Server sende, um die Suchanfragen zu verarbeiten. Diese Möglichkeit hatte ich bei der Erstellung des Plugins auch nicht in Erwägung gezogen, da ich die Seite da noch nicht kannte.Diff-Updates werden unterstützt, wobei ich die exakten Regeln für deren Erstellung leider nicht mehr wiedergefunden habe.
Du meinst damit
Filmliste-diff.xz
? Ansonsten könnte ich dir sagen, wie ich das mit MVW gelöst habe.Ja, die meinte ich. Nach meinem Wissensstand spielt
- Filmliste-akt.xz den Datenbestand gegen ca. 2 Uhr nachts wieder und Filmliste-diff.xz ein stündlich (zweistündlich?) aktualisierter Datensatz, der die Differenz zu Filmliste-akt.xz darstellt.
- Im Diff sind nicht nur neue Einträge sondern auch aktualisierte alte enthalten (ich behandle derzeit alle als neue). Ob ein Eintrag neu ist, wird mit der „neu-Spalte“ angegeben(?).
Unklar ist mir,
- was die zweite Spalte (2. Zeitstempel) und dritte Spalte (“3”) bedeuten.
- ob Filmliste-akt.xz bei Erstellung des Diffs auch neu erstellt wird und man bei einem
vollen Update nur diese benötigt. - Wie erkennt man, ohne Id, welcher Eintrag der vollen Liste überschrieben wurde? Ist eine Spaltenkombination Unique-Key?
-
Genau, sie ist implementiert, aber (noch) nicht dokumentiert. Falls du damit mal rumspielen möchtest, hier eine sehr simple JavaScript “Implementierung”: https://gist.github.com/bagbag/a2888478d27de0e989cf777f81fb33de (kannst du einfach als HTML speichern und im Browser öffnen). Die API wird sich aber vermutlich noch ein wenig ändern.
Für MVW nutze ich nur Filmliste-akt und erzeuge mir damit meine eigenen deltas (da meine Anforderung war, dass das auch funktionieren muss, wenn der Server über Tage keine neue mehr bekommen würde).
Ich extrahiere die für MVW relevanten Infos und lege für jeden Eintrag die Daten in einem Set(!! um doppelte zu vermeiden) an. Dieses Set wird nach dem indexieren jedoch nicht verworfen sondern behalten und beim nächsten Update dann mit dem erstellten Set der neuen Filmliste die Differenz in beiden Richtungen (neu -> alt, alt -> neu) erzeugt.
Meines Wissens nach ist der erste Zeitstempel die Lokalzeit (also in dem Falle GMT+1) und der zweite UTC.
Wofür die 3 Steht kann ich dir auch nicht verraten.
Die Filmliste-akt hat zu jeder Zeit den aktuellsten Stand. Die diffs werden nicht benötigt.
Ich habe das Anfangs über die URL versucht, diese ist jedoch nicht Unique. Als ID nutze ich einen Hash der für MVW relevanten Informationen. Im Falle, dass ein Eintrag doppelt vorhanden wäre (was er durch die Nutzung von Sets aber gar nicht könnte), hätte es also automatisch die selbe ID, wodurch ich mir darüber keine Gedanken machen muss.
-
Hast du die API mal probiert?
-
@bagbag sagte in Mediatheken-Plugin für Kodi:
Hast du die API mal probiert?
Nein, bisher noch nicht. Dazu bin ich derzeit mit der aktuellen Lösung noch zu zufrieden.
(Upload für Issue auf Github)
0_1491600164972_plugin.video.simple_mediathek_de.zip -
Hallo, ich habe heute eine neue Version veröffentlicht und im Startbeitrag verlinkt.
Da ich mich bisher nicht mit dem Thema der Kodi-Repositories auseinandergesetzt habe bleibt wie bisher aber nur die manuelle InstallationAddon:
• Suche direkt über MediathekViewWeb.de. (Siehe AddOn-Einstellungen)
Dadurch fällt die Erstellung eines lokalen Indexes weg und das Binary
wird nicht benötigt. Ein kleiner Nachteil ist (derzeit) die geringere Auswahl
an Filterkriterien.
• Änderungen bei der Suche mit lokalem Index:- ‘Thema’ - Angabe wird nun bei allen Einträgen berücksichtigt.
- Sortierung der Resultate nach Datum(TODO)
• Such-Eintrag für Livestreams direkt im Hauptmenü eingefügt.
• Die Ansicht kann jetzt in den Optionen vorgegeben werden (List, Wide List)
• Such-Parameter werden standardmäßig nur in die History übernommen,
wenn man ein Ergebnis auswählt.
• Für Lokalisierung notwendige Strings in xml-Dateien überführt.
Änderungen im CLI-Backend:
• Suche nach topic statt titel+topic mittels ‘-T/–topic’
• -r -Flag invertiert nun wie erwartet.
• Makefile wurde um ein paar Hilfsfunktionen erweitert:- ‘make download’ läd json-Datei
- ‘make server’ speichert xz-Dateien und startet Http-Server. Setzt man
DEBUG=1, greift simple_mediathek dann auf die lokalen Daten zu.
• ‘make tests’ startet eine Reihe von Tests.
-
Hallo, versuche momentan das Plugin unter OSMC auf einem RaspberryPI 3 zu nutzen, aber leider wird die Filmliste nicht geladen. Unter LibreELEC funktioniert es.
Hier mal ein Ausschnitt vom log:08:51:11.389 T:1615852528 WARNING: Previous line repeats 1 times. 08:51:11.389 T:1615852528 ERROR: GetDirectory - Error getting 08:51:13.592 T:1531180016 ERROR: Previous line repeats 6 times. 08:51:13.592 T:1531180016 ERROR: Plugin|plugin://plugin.video.simple_mediathek_de/ 08:51:23.375 T:1958723584 ERROR: GetDirectory - Error getting plugin://plugin.video.simple_mediathek_de/?j=%7b%22mode%22%3a%20%22update_db_over_gui%22%2c%20%22prev_mode%22%3a%20%22None%22%7d 08:51:23.376 T:1958723584 ERROR: CGUIMediaWindow::GetDirectory(plugin://plugin.video.simple_mediathek_de/?j=%7b%22mode%22%3a%20%22update_db_over_gui%22%2c%20%22prev_mode%22%3a%20%22None%22%7d) failed 08:51:25.232 T:1531180016 ERROR: Plugin|plugin://plugin.video.simple_mediathek_de/
Gibt es eine Idee, was ich versuchen könnte?
Im Anhang nochmal die gesamte log
Gruss Wolfgang[0_1509966440318_kodi.log](Lade 100% hoch) -
Hallo Wolfgang,
der Upload des gesamten Logs hat leider nicht geklappt. (Falls du Firefox benutzt: Dort scheint der Upload hier im Forum nicht zu klappen, ich musste dafür bisher immer auf Chrome ausweichen.)
Allerdings vermute ich, dass im Log nichts steht, was uns bei der Lösung weiter hilft.Bitte prüfe mal ob die Dateien
/home/osmc/.kodi/addons/plugin.video.simple_mediathek_de/root/bin/simple_mediathek und
/home/osmc/.kodi/addons/plugin.video.simple_mediathek_de/root/armv7l/bin/simple_mediathek.bin
ausführbar sind.
Edit: Bei meinem eigenem Test mit OSMC war es der Fall. Das initiale Update der Filmliste war ohne Fehler möglich.Falls das nicht hilft, aktiviere in den AddOn-Einstellungen (unter Lokale DB-Suche) die Debug-Ausgabe.
Dann sollten bei jedem Aufruf des Binaries unter /dev/shm/addon.stderr.[nummer] Textdateien angelegt werden.Ich installiere derweil mal OSMC auf einer SD-Karte und schaue mal, ob ich den Fehler reproduzieren kann.
Gruß Yggdrasil
-
@yggdrasil habe die 0.6. Version deinstalliert und dann die 0.8 installiert, funktioniert leider auch nicht. habe die debug-Funktion aktiviert, aber in /dev/shm/addon wurden leider keine Dateien angelegt…
Debug-Datei wurde jetzt angelegt:
Hochladen funktioniert irgendwie nicht oder ich bin zu blöd (angeblich funktionieren nur bestimmte Bilddateitypen)
deshalb hier der Link:
http://wheyden.de/jmp/log001
Vielleicht kannst Du damit ja was anfangen… -
Funktioniert das AddOn wenn du in seinen Einstellungen die Option “Suche per MediathekViewWeb.de” aktivierst?
Du könntest außerdem noch gucken, was passiert, wenn du das Programm über SSH ausführst:
ssh [osmc-rechner] cd $HOME/.kodi/addons/plugin.video.simple_mediathek_de/root/bin ./simple_mediathek -V
Standardmäßig speichert das Tool seine Daten nur im Ram. Will man die Dateien aktualisieren, auf die dann Kodi zugreift, ginge das folgendermaßen:
./simple_mediathek --folder $HOME/.kodi/userdata/addon_data/plugin.video.simple_mediathek_de update
-
@yggdrasil “Suche per MediathekViewWeb.de” funktioniert ebenfalls nicht.
Hier mal die Consolenausgabe Deiner Kommandozeilen : (über putty) Broken Pipe auf STDOUT ist schon seltsam, verwendet OSMC wirklich ein vollumfängliches Debian?
osmc@osmc:~/.kodi/addons/plugin.video.simple_mediathek_de/root/bin$ ./simple_mediathek -V
MediathekView data parser 0.8 (2b91c21)
osmc@osmc:~/.kodi/addons/plugin.video.simple_mediathek_de/root/bin$ ./simple_mediathek --folder $HOME/.kodi/userdata/addon_data/plugin.video.simple_mediathek_de update
converted ‘https://res.mediathekview.de/akt.xml’ (ANSI_X3.4-1968) -> ‘https://res.mediathekview.de/akt.xml’ (UTF-8)
–2017-11-07 21:05:53-- https://res.mediathekview.de/akt.xml
Resolving res.mediathekview.de (res.mediathekview.de)… 5.1.76.243, 2a00:f820:417::18e6:9ec3
Connecting to res.mediathekview.de (res.mediathekview.de)|5.1.76.243|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 808 [text/xml]
Saving to: ‘STDOUT’-
100%[=====================>] 808 --.-KB/s in 0s
2017-11-07 21:05:53 (2.88 MB/s) - written to stdout [808/808]
./simple_mediathek: line 216: xz: command not found
Mode: Indexing entries
Payload/Index folder: /home/osmc/.kodi/userdata/addon_data/plugin.video.simple_mediathek_de
Input file: -
Input stored as full update. Existing diff files will be removed.
{
“icreation”: 1510085153,
“creation”: “07. Nov. 2017 21:05”,
“ilistcreation”: -1,
“listcreation”: “01. Jan. 1970 00:59”,
“channels”: {}
}converted ‘http://verteiler1.mediathekview.de/Filmliste-akt.xz’ (ANSI_X3.4-1968) -> ‘http://verteiler1.mediathekview.de/Filmliste-akt.xz’ (UTF-8)
–2017-11-07 21:05:53-- http://verteiler1.mediathekview.de/Filmliste-akt.xz
Resolving verteiler1.mediathekview.de (verteiler1.mediathekview.de)… 5.1.76.111, 2a00:f820:417::4df6:1bf2
Connecting to verteiler1.mediathekview.de (verteiler1.mediathekview.de)|5.1.76.111|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 21238872 (20M) [application/octet-stream]
Saving to: ‘STDOUT’-
0%[ ] 0 --.-KB/s in 0s
Cannot write to ‘-’ (Broken pipe).
osmc@osmc:~/.kodi/addons/plugin.video.simple_mediathek_de/root/bin$ -
-
@yggdrasil was hat dieser Fehler zu bedeuten: (siehe Consolen-Log) und in Deiner debug-Datei ist der Fehler auch zu sehen; siehe vorvorige Mail und Link auf “OwnCloud”
./simple_mediathek: line 216: xz: command not found
Der Import der .xml-Datei scheint ja zu funktionieren…