LazyFilms - RegEx für Autotimer

  • Die hier erklärten Beispiele habe ich mittlerweile in ein Tool gepackt

    Zu finden ->LazyTools

    Ziel:
    Autotimer so zu programmieren, dass bestimmte Filme automatisch aufgenommen werden, wenn sie nicht bereits in der Sammlung sind. Dazu sollten Daten von IMDB genutzt werden.


    Ansätze:
    Unterschiedliche Filter um Filme automatisiert aufzunehmen:
    - Top250 Filme
    - nach Erscheinungsjahr (z.B. ab 1980 o.ä.)
    - nach Schauspieler (für Fans)
    - nach Genre
    - nach Bewertung (z.B. alles ab einer Bewertung von 7)
    - nach Filmpreise (z.B. Oscar, Golden Globe)
    - nach Land
    - HD, oder SD Aufnahme
    - beliebige Kombination aus verschiedene Filter
    - Erkennung anhand der eindeutigen ID ttxxxxxx
    - Komplette Filmreihen programmieren


    Beispiel: Total Recall aufnehmen, aber nur das Original aus 1990 und dann noch in HD, oder alle Filme der Reihe "Fluch der Karibik"


    Leider stoße ich bei IMDB & Co. auf Nutzungsbedingungen, die mir nicht ganz koscher sind. Deshalb möchte ich Euch zeigen, wie Ihr die meisten o.g. Ansätze mit Autotimer realisieren könnt.


    Dazu nutzen wir RegEx, was von Autotimer unterstützt wird und komplexe Regeln ermöglicht


    TIPP:
    IMDB:
    Top 250 Filme http://www.imdb.com/chart/top?ref_=nv_ch_250_4
    themoviedb.org: Best bewertet https://www.themoviedb.org/movie/top-rated?page=1


    Damit habt Ihr schon mal eine (RIESIGE) Auswahl an Futter für Autotimer :winking_face:


    Weitere Tipps findet Ihr im Beitrag "Trick 17"


    Da Autotimer anscheinend im Standard Suchfeld kein RegEx unterstützt, nutzen wir einen kleinen Trick um nicht von einem Titel abhängig zu sein.


    Grundgerüst, Autotimer-Eintrag:
    1. Autotimereintrag erstellen
    2. Im "Finde in Titel" ein EIN LEERZEICHEN eintragen.
    3. Suchtyp: Übereinstimmung in der Beschreibung. Wir gehen einfach mal davon aus, dass in der Beschreibung mindestens ein Leerzeichen vorhanden ist :winking_face:


    Ab hier könnt Ihr diese Beispiele nutzen


    ACHTUNG! Je nach Anzahl der Sender, EPG Daten und Treffer, kann die Verarbeitung recht lange dauern und Eure Kiste in die Knie zwingen. Zum Testen solltet Ihr also die Sender begrenzen :winking_face:


    Beispiel 1, Alle Filme mit einem bestimmten Schauspieler aufnehmen (Bruce Willis):
    1. Autotimer-Eintrag erstellen, wie oben angegeben.
    2. Filter hinzufügen, Einschließen, in der Beschreibung
    3. Bruce Willis eintragen


    Treffer am heutigen Tag: Last Man Standing und Tödliche Nähe
    Jetzt noch ORF als Sender austragen und fertig. :)


    Ok das war easy und hätte auch mit einer normalen Suche in der Beschreibung geklappt, es wird aber anspruchsvoller, versprochen!


    Beispiel 2, einen bestimmten Film, aber mit Angabe des Erscheinungjahres aufnehmen:
    Heute laufen 2 Filme:
    Last Man Standing 1996 (ORF)
    Last Samurai 2003 (Sat1)
    Diese Filme auseinander zu halten ist keine Herausforderung, allerdings möchte ich Euch zeigen, wie Ihr das Erscheinungsjahr für Eure Zwecke nutzen könnt.


    1. Autotimer-Eintrag erstellen, wie oben angegeben.
    2. Filter hinzufügen, Einschließen, im Titel
    3. .*Last.* eintragen. Damit liefern alle Titel, die irgendwo "Last" drin haben, einen Treffer
    Jetzt liefert Autotimer beide o.g. Filme als Treffer. Grenzen wir es ein.
    4. Filter hinzufügen, einschließen, in der Kurzbeschreibung
    5. \b1996 eintragen. Das Jahr steht im EPG für Last Man Standing. "\b" sorgt dafür, dass nur Treffer beachtet werden, wenn die Zahl im Text "frei" steht.


    Nun Liefert Autotimer auch NUR diesen einen Film!
    Das ist besonders nützlich bei Remakes, wenn man eine bestimmte Version haben möchte.


    Beispiel 3, noch anspruchsvoller. ODER (OR) Verknüpfung für Treffer:
    Autotimer unterstützt nur UND Verknüpfungen beim Einschließ-Filter. Möchte man jedoch eine "ODER"-Verknüpfung mit RegEx hinbekommen, kann man folgendes Beispiel nutzen.


    1. Autotimer-Eintrag erstellen, wie oben angegeben.
    2. Filter hinzufügen, Einschließen, im Titel
    3. (?i).*Geschichte.*|.*LAST.*|.*Börse.*
    Ok, eine völlig sinnlose Kombination, dient aber der Veranschaulichung
    (?i) ignoriert Groß- Kleinschreibung
    .* bedeutet beliebiges Zeichen, beliebig oft wiederholt
    | ist das Zeichen für ODER


    Ergebnis:
    Last Man Standing ProSieben MAXX 6/11/2015 8:4 6/11/2015 9:18
    Wirtschaft und Börse N24 6/11/2015 8:16 6/11/2015 8:37
    Telebörse n-tv 6/11/2015 8:32 6/11/2015 9:8
    Mythen der Geschichte - Wissen aus dem Jenseits n-tv 6/12/2015 2:57 6/12/2015 3:53
    usw.


    Beispiel 4, eine Epoche (Jahreszahlen) definieren, einfache Version (Einschließen-Filter auf Kurzbeschreibung):
    Will man Epochen definieren, kann man eine "ODER-Verknüpfung" nutzen und die gewünschten Jahre einzutragen, wenn es nicht zu viele sind. Eine andere Möglichkeit findet Ihr im Beispiel 8 und Beitrag "Trick17".
    \b(1987|1988|1989|1990) Findet alle Jahre zwischen 1987-1990


    Beispiel 5, Genre definieren (ODER-Verknüpft, Einschließen-Filter auf Kurzbeschreibung):
    Nach dem gleichen Prinzip kann man Genres definieren. Sicherheitshalber sorgen wir dafür, dass Groß- Kleinschreibung ignoriert wird. Man kann natürlich auch nur einen Eintrag nutzen.
    (?i)(Komödie|Zeichentrickserie|Spielfilm|Sitcom)


    Beispiel 6, Genre mit Jahreszahl kombinieren (einfache Version, Einschließen-Filter auf Kurzbeschreibung)):
    Jahreszahlen tauchen im EPG nach Genre auf.
    Als Beispiel: Der Club der Teufelinnen Komödie, USA 1996
    Der Filter (?i)Komödie.*\b1996 würde dann einen Treffer erzeugen Logik: "Genre Komödie gefolgt von Zahl 1996"


    Beispiel 7, Produktionsland ( Einschließen-Filter auf Kurzbeschreibung):
    Wieder als Beispiel: Der Club der Teufelinnen Komödie, USA 1996
    (?i)\bUSA\b würde dann einen Treffer erzeugen. Sicherheitshalber sorgen wir wieder dafür, dass Groß- Kleinschreibung ignoriert wird. Außerdem sorgen wir mit \b dafür, dass nur "USA" einen Treffer erzeugt und kein anderes Wort, dass zufällig diese Buchstaben beinhaltet


    Beispiel 8, Filter auf aktuelle Filme (Einschließen-Filter auf Kurzbeschreibung)):
    \b(20[1-9][1-9]) Erlaubt nur Jahreszahlen 2011-2099. Das ergibt sich aus den ersten beiden Ziffern 20, dann die Ziffer 1-9 (Zahl 201-209), dann Ziffer 1-9 ( Zahl 2011-2099).


    Beispiel 9, Filter kombinieren:
    Wenn man einen weiteren Einschließen-Filter im Autotimer anlegt, dann sind sie UND verknüpft. D.h beide Filter müssen einen Treffer erzeugen.
    Filter 1, Einschließen-Filter auf Kurzbeschreibung: (?i)(Komödie|Zeichentrickserie|Spielfilm|Sitcom)
    Filter 2, Einschließen-Filter auf Kurzbeschreibung: \b(1987|1988|1989|1990)


    Diese Kombination findet alle Angegebenen Genre, die in den angegebenen Jahren erschienen sind. Dabei sind die Filter selbst ODER und zueinander UND verknüpft.


    Das Ganze funktioniert natürlich auch als Ausschluß-Filter. Allerdings sind Ausschluß-Filter seitens Autotimer ODER verknüpft. Wenn also auch nur ein Filter einen Treffer meldet, ist die Bedingung bereits erfüllt.


    Jetzt kommt der Knaller::firedevil:
    Ob diese Kombi einen sinnvollen Treffer erzeugt, sei mal dahin gestellt, aber wir können es tun, also tun wir es auch!!
    Filter 1, Einschließen-Filter auf Kurzbeschreibung: (?i)(Komödie|Spielfilm|Action Film)
    Filter 2, Einschließen-Filter auf Kurzbeschreibung: (?i)\bUSA\b
    Filter 3, Einschließen-Filter auf Beschreibung: (?i)bruce willis
    Filter 4, Einschließen-Filter auf Kurzbeschreibung: \b(20[0-9][0-9])
    Filter 5, Ausschluß-Filter auf Beschreibung: (?i)Schauspieler XY


    Wenn alles gut läuft und EPG-Daten geliefert werden, sollten wir folgendes erhalten:
    - Alle Filme mit Bruce Willis
    - aus den Genres "Spielfilm, Komödie, Action Film"
    - die zwischen Jahr 2000 - 2099 produziert wurden/werden
    - und zwar in USA
    - und in denen der Schauspieler XY NICHT mitspielt


    IST DAS NICHT COOL?





    Gute Anlaufstellen um RegEx zu lernen/testen:
    http://www.regular-expressions.info/
    https://regex101.com/


    Herzlichen Dank an betonme, der mich auf die Idee gebracht hat mit RegEx zu experimentieren!

    MANAREC
    LazyTools Schaltzentrale für den Film-/Seriensammler
    LazyCall FritzBox Callmonitor (Lautstärkenregelung/Timeshift)
    LazyServer WebServer für E2

    34 Mal editiert, zuletzt von Microdevil ()

  • Weitere RegEx Regeln, die nützlich sein könnten.


    Nochmal zur Erinnerung: Die ganze Bastelei steht und fällt mit der Qualität und Inhalt der EPG-Daten!
    Diese Tipps sind Ansätze und durchaus optimierbar. Es wird sicher Fälle geben, in denen man die Einträge noch optimieren, oder durch zusätzliche Filter verfeinern muss.
    Immer beachten: Einschließfilter sind immer UND verknüpft, Ausschlussfilter sind aber ODER verknüpft!


    Wo stehen die Infos im EPG?
    - Titel liefert natürlich den Titel und manchmal die Episodennummer bei Daily Soaps wie Verbotene Liebe (4662)
    - Kurzbeschreibung liefert Jahr, Genre, Land, Episode bei Serien
    - Beschreibung liefert Schauspieler


    Grundgerüst, Autotimer-Eintrag:
    Da Autotimer anscheinend im Standard Suchfeld kein RegEx unterstützt, nutzen wir einen kleinen Trick um nicht von einem Titel abhängig zu sein.
    1. Autotimereintrag erstellen
    2. Im "Finde in Titel" ein EIN LEERZEICHEN eintragen.
    3. Suchtyp: Übereinstimmung in der Beschreibung. *Wir gehen einfach mal davon aus, dass in der Beschreibung mindestens ein Leerzeichen vorhanden ist :winking_face:


    Nachfolgende Beispiele basieren auf dieses Grundgerüst!
    Ärgernis groß- KLEINSCHREIBUNG::firedevil:
    a ist nicht A! Um dieses Problem zu umgehen, empfehle ich Euch "(?i)" vor dem Suchtext zu setzen. Dadurch wird die Schreibweise ignoriert
    Filter: Einschließfilter auf Titel mit dem Inhalt (?i)gross
    Erklärung: Da die Schreibweise ignoriert wird, haben wir bei [g/G][r/R][o/O][s/S][s/S] immer einen Treffer im Titel.


    Allgemeiner Hinweis zu Regex-Zeichen:
    Bestimmte Zeichen werden bei RegEx als Befehl interpretiert. Dazu gehören z.B "\ $ ^ | ? . ( ) * /", um mal die Wichtigsten zu nennen. Will man diese Zeichen in einem Text suchen, muss man sie "Escapen", also ein zusätzliches "\" davor setzen.
    Suchtext: FIFA Frauen WM 2015: Deutschland - Norwegen / China
    Filter: Norwegen \/ China
    Erklärung: Mit dem Zeichen "\" vor "/" weiß Autotimer, dass das Zeichen "/" kein Befehl, sondern Inhalt des Treffers sein soll.


    Zwangsinhalt einer Jahreszahl:
    Beispiel: Bei den meisten Filmen wird die Jahreszahl angegeben. So kann man z.B. gleichnamige Serien ausblenden, die wiederum oft ohne Jahreszahl im EPG angegeben werden.
    Filter: Einschließfilter auf Kurzbeschreibung mit dem Inhalt \b([1-2][0-9][0-9][0-9])
    Erklärung: Wenn keine 4-stellige Zahl in der Kurzbeschreibung, dann kein Treffer. (Zahlen von 1000 - 2999)


    Komplette Filmreihe definieren (inkl. abweichende Titel): :firedevil:
    Beispiel: Manchmal haben Filmkollektionen keine Gemeinsamkeit im Namen. Hier ist das Beispiel um die gesamte Hannibal Lecter-Filmreihe zu programmieren.
    Filter: Einschließfilter auf Titel mit dem Inhalt (?i)(Blutmond|Das Schweigen der Lämmer|Hannibal|Roter Drache|Hannibal Rising - Wie alles begann)
    Erklärung: (?i) ignoriert Groß- Kleinschreibung, Die Gruppe in () ist durch | Zeichen getrennt, das "ODER" bedeutet. Sobald einer der Begriffe auftaucht, meldet Autotimer einen Treffer.
    Immer Ärger mit "ß"::firedevil:
    Beispiel: Unterschiedliche Schreibweise im EPG umgehen
    Filter:(?i)(Das gro(ß|ss)e etwas)
    Erklärung: (?i) ignoriert Groß- Kleinschreibung, Findet sowohl "ß", als auch "ss" unabhängig der Schreibweise


    Wort nur am Anfang erlaubt:
    Beispiel: Soll das gesuchte Wort nur am Anfang auftauchen dürfen, nutzt man das Zeichen ^
    Suchtext:
    1. Hätte, hätte, Fahrradkette
    2. Fahrradkette, das unterschätzte Beinkleidfressmonster
    Filter: (?i)^Fahrradkette
    Erklärung: (?i) ignoriert Groß- Kleinschreibung und liefert nur für Zeile 2 einen Treffer, da dort "Fahrradkette" am Anfang steht


    Wort nur am Ende erlaubt:
    Beispiel: Soll das gesuchte Wort nur am Ende auftauchen dürfen, nutzt man das Zeichen $
    Suchtext:
    1. Hätte, hätte, Fahrradkette
    2. Fahrradkette, das unterschätzte Beinkleidfressmonster
    Filter: (?i)Fahrradkette$
    Erklärung: (?i) ignoriert Groß- Kleinschreibung und liefert nur für Zeile 1 einen Treffer, da dort "Fahrradkette" am Ende steht


    Zahlenkolonnen:
    Beispiel: z.B. Jahreszahlen inkl. Unterbrechung
    Suchtext: 1980-1992 und 1995-2007
    Filter: \b(198[0-9]|199[0-2]|199[5-9]|200[0-7])
    Erklärung: \b sorgt dafür, dass die Zahl frei steht. 198[0-9]=1980-1989, 199[0-2]=1990-1992, 199[5-9]=1995-1999, 200[0-7]= 2000-2007. Da wir wieder eine "ODER" Verknüpfung erstellt haben, erzeugen Zahlen, die in diesen Bereichen liegen, einen Treffer bei Autotimer.


    Überall suchen:
    Beispiel: Sowohl "Zeichentrickserie", als auch "Serie", oder "Serien" finden
    Filter: (?i).*serie.*
    Erklärung: (?i) ignoriert Groß- Kleinschreibung .*serie.* findet diesen Text, egal wo dieses Wort auftaucht. Das Zeichen "." bedeutet beliebiges Zeichen und "*" bedeutet beliebig oft wiederholt


    "Frei"-stehenden Begriff suchen (Besonderheit):
    Beispiel: Nur das Wort "Heimat" finden, also NICHT Teil eines anderen Wortes
    Suchtext:
    1. Heimatnachrichten
    2. Heimat der Wiggles
    3. Ex-Heimat der Wiggles
    4 (Heimat)
    Filter: \bHeimat\b
    Erklärung:
    Treffer für Zeile 2, da Heimat vorne und hinten "frei" steht (zwischen zwei Leerzeichen)
    Treffer für Zeile 3+4, da "- ( )" keine Buchstaben sind, somit logisch korrekt
    Workaround: ([^()-]\bHeimat\b[^()-])
    Erklärung:
    ( ) definiert eine Gruppe
    [ ] definiert eine Liste von Zeichen
    ^ heisst NICHT, also Negation
    Treffer für Zeile 2, da hier Heimat frei steht und nicht von den Zeichen in der Liste umgeben ist, wie in Zeile 3,4
    Die Logik lautet: Finde eine Gruppe von Wörtern in der das freistehende Wort Heimat auftaucht, aber davor und dahinter nicht die Zeichen "( - )" auftauchen.


    Ich wünsche Euch viel Spaß beim Autotimern :winking_face:

    MANAREC
    LazyTools Schaltzentrale für den Film-/Seriensammler
    LazyCall FritzBox Callmonitor (Lautstärkenregelung/Timeshift)
    LazyServer WebServer für E2

    39 Mal editiert, zuletzt von Microdevil ()

  • *RESERVED*

    MANAREC
    LazyTools Schaltzentrale für den Film-/Seriensammler
    LazyCall FritzBox Callmonitor (Lautstärkenregelung/Timeshift)
    LazyServer WebServer für E2

    2 Mal editiert, zuletzt von Microdevil ()

  • In der Tat wäre ein WebIF ziemlich cool, allerdings hab ich absolut keinen Dunst, wie ich eine Seite ins Open WebIf einbinde. Ausserdem muss ich dann vermutlich noch Python für ein eventuelles Backend lernen :winking_face:


    Im Moment experimentiere ich noch mit weitere RegEx Regeln und mülle meinen armen Autotimer und die HDD voll. Funktioniert erstaunlich gut :369:

    MANAREC
    LazyTools Schaltzentrale für den Film-/Seriensammler
    LazyCall FritzBox Callmonitor (Lautstärkenregelung/Timeshift)
    LazyServer WebServer für E2

  • Ich habe die Hier erklärten Funktionen in eine UI gepackt -> LazyTools <-


    Viel Spaß!

    MANAREC
    LazyTools Schaltzentrale für den Film-/Seriensammler
    LazyCall FritzBox Callmonitor (Lautstärkenregelung/Timeshift)
    LazyServer WebServer für E2