Lieblingsserie(n): Keine Folge mehr verpassen

Begonnen von fhem_TS, 19 Januar 2018, 14:35:05

Vorheriges Thema - Nächstes Thema

fhem_TS

Hallo,

ich habe mich in letzter Zeit häufiger darüber geärgert, dass ich Neustarts von Serien/Staffeln im Fernsehen verpasst habe.
Damit mir das nicht mehr passiert habe ich versucht über Regex und diverse Seiten im Internet ein Benachrichtigungs-System aufzusetzen.

Ich bin noch nicht ganz zufrieden aber zumindest bekomme ich jetzt die Neustarts mit.
So habe ich das gelöst:


Zuerst ein HTTPMOD Device anlegen und darauf achten, dass das Gerät mit TV_ anfängt.
In meinem Beispiel habe ich eine Erinnerung für die Serie Lethal Weapon erstellt.
Als Informationsspender dient die Seite fernsehserien.de.

define TV_Lethal_Weapon HTTPMOD https://www.fernsehserien.de/lethal-weapon/sendetermine 86400
attr TV_Lethal_Weapon userattr reading01Name reading01OExpr reading01RegOpt reading01Regex readingMaxAge readingMaxAgeReplacementMode readingMaxAgeReplacementMode:text,reading,internal,expression,delete
attr TV_Lethal_Weapon disable 0
attr TV_Lethal_Weapon enableControlSet 1
attr TV_Lethal_Weapon reading01Name Staffel2
attr TV_Lethal_Weapon reading01OExpr $val
attr TV_Lethal_Weapon reading01RegOpt g
attr TV_Lethal_Weapon reading01Regex class="sendetermine-wochentag"[\w\W]*?2x01-(.*?)-\d*?"[\w\W]*?class="sendetermine-datum"[\w\W]*?;">(.*?)[<\td][\w\W]*?;">(\d{2}.*?)<[\w\W]*?class="sendetermine-sender"[\w\W]*?;">(.*?)[((<|<\td)]
attr TV_Lethal_Weapon readingMaxAge 172800
attr TV_Lethal_Weapon readingMaxAgeReplacementMode delete
attr TV_Lethal_Weapon room MediaCenter
attr TV_Lethal_Weapon stateFormat 2x01: Staffel2-4,Staffel2-3,Staffel2-2,Staffel2-1
attr TV_Lethal_Weapon verbose 0


Die Regex habe ist so angepasst, dass sie vier Informationen liefert: Start- und Endzeit der Folge, Name, Datum der Ausstrahlung und den Sender.
Die Formatierung ist noch sehr unschön aber das ist mir derzeit noch egal.
Mit dem HTTPMOD-Device rufe ich einmal täglich die Informationen ab, wird eine passende Sendung gefunden wird ein Event generiert.
Auf dieses Event wird mit einem DOIF reagiert welches dann eine E-Mail sendet mit der Information welche Serie ausgelöst hat.
Dafür muß DebianMail bereits in fhem eingebunden sein.

define DI_TV DOIF (["^TV_:Staffel"])\
({DebianMail('email@adresse.de','$DEVICE $EVENT!','Eintrag gefunden')})
attr DI_TV do always
attr DI_TV room MediaCenter


Für weitere Serien einfach den ersten Code-Abschnitt kopieren, umbenennen (muss mit TV_ anfangen), die Seite anpassen und die zu suchende Folge in der RegEx ändern. Siehe fette Stelle

class="sendetermine-wochentag"[\w\W]*?2x01-(.*?)-\d*?"[\w\W]*?class="sendetermine-datum"[\w\W]*?;">(.*?)[<\td][\w\W]*?;">(\d{2}.*?)<[\w\W]*?class="sendetermine-sender"[\w\W]*?;">(.*?)[((<|<\td)]
Das Format ist "Staffel x Folge": Also Staffel 2, Folge1 -> 2x01, Staffel3, Folge 11 -> 3x11.


Es gibt noch einiges was ich gerne verbessern würde aber vielleicht hilft es ja schon mal dem ein oder anderen Serienjunkie.

Vielleicht hat jemand eine Idee wie man das Ganze auf die deutschen Sender beschränken kann und wie man jeweils 3 der Readings zu einem zusammenfassen kann.

Grüße

Edit 22.01.18:
Änderung der RegEx und des stateFormats um Start- und Endezeit zu erhalten.
P.S: Ich triggere immer auf die nächste fehlende Folge. Also z.B. auf die erste Folge der nächsten Staffel oder auf die nächste Folge nach der Sendepause.
Wer lieber alle kommenden Folgen sehen will kann die RegEx wie in Beitrag #3 ändern.
fhem@RPi3
FS20 <-> Busware CUL
Homematic <-> HM-USB

Frank_Huber

#1
Funktioniert.

Wenn ich aber keine Folge verpassen will sollte es mir alle kommenden Ausstrahlungen anzeigen.
Im Beispiel ist ja eine spezielle Folge programmiert.
Und die Uhrzeit wäre noch ganz gut. ;-)


fischit

Gute Idee, guter Ansatz mit bestimmt noch Entwicklungsmöglichkeit.

*Merkzettel für mich

fhem_TS

Zitat von: Frank_Huber am 19 Januar 2018, 15:24:14
Funktioniert.

Wenn ich aber keine Folge verpassen will sollte es mir alle kommenden Ausstrahlungen anzeigen.
Im Beispiel ist ja eine spezielle Folge programmiert.
Und die Uhrzeit wäre noch ganz gut. ;-)

Ja, das ist richtig. Ich habe es immer so eingestellt, dass die erste Folge als Erinnerung kommt.
Die RegEx aus dem Beispiel muss für alle Folgen einer Staffel etwas geändert werden.
Aus dem 2x01 muss ein 2x[\d][\d] werden. 

Für die Uhrzeit brauche ich etwas länger um die RegEx rauszufinden.

Alternativ selbst probieren; ich teste das immer online, z.B. hier: https://regex101.com/.
Einfach oben die RegEx rein und unten den Quellcode der Seite.

Gruß
fhem@RPi3
FS20 <-> Busware CUL
Homematic <-> HM-USB

Nobby1805

www.Wunschliste.de bietet doch eigentlich schon was du suchst ... dann bleibt "nur" noch das Ergebnis in FHEM zu importieren
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

pataya

#5
Hab schon mal was ähnliches gebastelt, nur mit dem Unterschied die letzte gelaufene und nächste Folge anzuzeigen:
Beispiel mit Lethal Weapon

Im Format (zumindest wenn Daten vorhanden ::)):
S<xx>E<yy> - <Titel> | <Datum>

fischit

Zitat von: fhem_TS am 19 Januar 2018, 14:35:05
Vielleicht hat jemand eine Idee wie man das Ganze auf die deutschen Sender beschränken kann und wie man jeweils 3 der Readings zu einem zusammenfassen kann.

Ist zwar nicht besonders schön, aber ich habe die Idee für meine Zwecke angepasst.
Leider konnte ich die Regex dafür nicht verwenden - ich glaube jede Unterseite hat einen etwas anderen Aufbau.
Konkret geht es bei mir um Scorpion. Da die neuen Folgen auf SAT1 ausgestrahlt werden habe ich das auf SAT1 fixiert.
Da es mir ausreicht nur die nächste neue Folge zu sehen sieht mein Code wie folgt aus:

defmod tv_scorpion HTTPMOD https://www.fernsehserien.de/scorpion/sendetermine/sat1 86400
attr tv_scorpion userattr reading01Name reading01RecombineExpr reading01RegOpt reading01Regex reading02Name reading02RecombineExpr reading02RegOpt reading02Regex reading03Name reading03RecombineExpr reading03RegOpt reading03Regex reading04Name reading04RecombineExpr reading04RegOpt reading04Regex
attr tv_scorpion enableControlSet 1
attr tv_scorpion reading04Name Combined
attr tv_scorpion reading04RecombineExpr join " - ", @matchlist
attr tv_scorpion reading04Regex (\d{2}.\d{2}.)<\/td><td colspan="2" style="color:#\d{6};;" nowrap class="no-smartphone2" data-href="scorpion\/folgen\/4x\d{2}-.*?"scorpion\/folgen\/4x\d{2}-.*?" title="zur Episode" onclick="goToUrl\(this\);;"><span style="ccolor:#\d{6}"><\/span><\/td><td class="sendetermine-titel" data-href="scorpion\/folgen\/(4x\d{2})-.*?" title="zur Episode" onclick="goToUrl\(this\);;"><b style="">(.*?)<\/b>
attr tv_scorpion stateFormat Combined


Nicht besonders schön der reguläre Ausdruck aber ich glaube er tut was er soll.
Mit dem "reading**RecombineExpr join " - ", @matchlist" kannst du übrigens mehrere gefunden Matches in ein Reading zusammen fassen.

Eigentlich wollte ich zuerst auf die Website von pataya zurück greifen, aber ich glaube das Script schaut auf alle Sender und in diesem Fall sendet SAT1 komplett anders aus und daher passen die Ergebnisse leider nicht.

Vielleicht hilfts jemanden!

pataya

Genau, mein Script nimmt die Erstaustrahlung der nächsten Folge.

fhem_TS

Die Regex für Start und Endzeit lautet:

class="sendetermine-wochentag"[\w\W]*?2x13-(.*?)-\d*?"[\w\W]*?class="sendetermine-datum"[\w\W]*?;">(.*?)[<\td][\w\W]*?;">(\d{2}.*?)<[\w\W]*?class="sendetermine-sender"[\w\W]*?;">(.*?)[((<|<\td)]

Ich habe den Beitrag oben etwas angepasst
fhem@RPi3
FS20 <-> Busware CUL
Homematic <-> HM-USB

Morgennebel

Zu kompliziert :)

MythTV bietet dies als Funktion bei der Aufnahmeprogrammierung:


  • Suche auf allen Sendern nach Serie "%NAME%"
  • Nehme nur HD Sendungen
  • Nehme nur Sendungen, die noch nicht aufgenommen wurden (Titel und Beschreibung vergleichen)
  • Schneide dann die Werbung weg

Das Problem sind nur die Festplatten... Soviel Zeit zum gucken hat kaum jemand...

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA