TV Senderliste bearbeiten

  • Hallo an Alle!

    Lang ist es her, dass ich mich mit AutoIT beschäftigt habe, nun ist es mal wieder soweit ^^ Wollte am Wochenende die Senderliste auf meinem Fernseher aktualisieren. Habe mir dazu eine fertige Liste runtergeladen und in den TV geschoben. Nun ist diese sehr lang und mit verschlüsselten als auch fremdsprachigen Sendern. Habe mir dann ein paar Programme gezogen, mit denen man Sender verschieben/löschen kann, aber das dauerte mir alles zu lange.

    Habe weiter gesucht und die Seite Satindex gefunden, auf der man sich Sender mit seinen Kriterien anzeigen lassen, aber keine Liste dazu downloaden kann. Jetzt würde mich interessieren, ob man sich z.B. von Satindex via Skript eine Liste mit den Namen erstellen kann und dann alles was nicht auf der Liste steht aus der Datei zeilenweise löscht. Vielleicht gibt es auch noch einen einfacheren Weg? :/ Danke schonmal...

    Habe die Liste auch mal angehängt. Die Originalendung lautet allerdings .SDX und lässt sich auch mit dem Notepad öffnen.

  • Also, du kannst natürlich die Webseite herunterladen (rechtsklick, speichern), dort hast du alle Informationen in der html, die du auch im Browser angezeigt bekommst.

    Die müsstest du dann natürlich durch ackern.

    Das ist jedoch der unschöne und teil-manuelle Weg.

    Es gibt jedoch auch UDF's für Chrome um die Webseiten-Daten auszulesen. Damit habe ich mich persönlich jedoch nicht beschäftigt, müsste aber dir die Möglichkeit geben darüber die Daten evtl. zu holen.

  • Sicher das die Liste korrekt ist? Das sieht etwas durcheinander aus

  • Danke für eure Antworten :)

    Moombas

    Dachte an _INetGetSource und StringRegExp, funktioniert aber noch nicht so recht.

    AutoIt
    #include <String.au3>
    #include <Array.au3>
    #include <Inet.au3>
    
    $sSource = _INetGetSource("https://www.satindex.de/tv/1/1/0/")
    $aRegEx = StringRegExp($sSource, '<div class="col freqx_1">(.*?)</div>', 3) ; unter col freqx_1 sind die Sendernamen gelistet
    _ArrayDisplay($aRegEx)

    Denke am StringRegExp passt etwas noch nicht, da der Quellcode mit ConsoleWrite($sSource) angezeigt wird.

    BugFix

    Ja, die ist leider richtig (schei*e) ... X/ im TV funktioniert sie.

    Einmal editiert, zuletzt von dieselwiesel (13. Dezember 2022 um 10:07)

  • Bin nicht besonders gut in regex aber probier es mal so: \<div class\=\"col freqx_1\"\>(.{0,})\<\/div\> bzw. wenn du auch die anderen haben willst: \<div class\=\"col\d? freqx_\d\"\>(.{0,})\<\/div\>

    Testen kannst du gut hier: https://regex101.com/

    2 Mal editiert, zuletzt von Moombas (13. Dezember 2022 um 10:18)

  • Moin,

    beim Regex fehlt ein Leerzeichen: <div class="col freqx_1" >

    Wenn Du nur die Namen haben willst, kannst Du das mal probieren:

  • Denke am StringRegExp passt etwas noch nicht, ...

    beim Regex fehlt ein Leerzeichen: <div class="col freqx_1" >

    Wie kommst du darauf? Bei mir ist dort kein Leerzeichen.

    Moombas :

    Velted hat recht - es fehlt bei freqx_1"> das Leerzeichen, also freqx_1" >

    Beispiel (jeweiliges Pattern 'einkommentieren') :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Dachte an _INetGetSource und StringRegExp, funktioniert aber noch nicht so recht.

    Entspricht diese Darstellung der Senderliste deinen Vorstellungen ?

    AutoIt
    #include <Array.au3>
    #include <Inet.au3>
    Local $sSource = BinaryToString(_INetGetSource("https://www.satindex.de/tv/1/1/0/", 0), 4) ; UTF8
    Local $sPattern = '<div class="col freqx_1" >.*?">(.*?)</a></div>'
    
    $aRegEx = StringRegExp($sSource, $sPattern, 3)
    _ArrayDisplay($aRegEx)

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hast du schon mal den ChanSort probiert?

    Mit dem kannst du bequem deine Sender listen bearbeiten, auch SDX Sender listen ohne Installation.

    Download bei Winfuture

    Vollständige Übersicht bei Github

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Danke für eure Unterstützung! :thumbup: Das mit dem fehlenden Leerzeichen war natürlich wieder so ein Anfängerfehler von mir :Face:

    Velted

    Leider funktioniert dein Skript bei mir nicht, es bringt folgenden Fehler in SciTE...

    $oNodeList = $oHtmlDoc.querySelectorAll('a[title^="Senderdaten"]')

    $oNodeList = $oHtmlDoc^ ERROR

    Dennoch Danke für den Hinweis mit dem Leerzeichen!

    Musashi

    Was soll ich sagen? Wer kann, der kann, sogar mit Umlauten :) Danke!

    oh-ha

    Kenn ich, dass war u.a. der Anlass nach etwas anderem zu suchen :D Das Programm lädt die Liste, aber ich weiß nicht welche Programme frei und in deutsch sind. Man müsste sie entweder im TV ausprobieren, oder mit der Satindex Liste abgleichen. Dauert Stunden...


    Der Teil mit den Sendern ist gelöst. Jetzt möchte ich alles was dort nicht gelistet ist aus der .SDX Datei entfernt haben. Dummerweise sind die jeweiligen Sendernamen gesplittet. Kann man die SDX z.B. mit FileReadToArray Zeilenweise einlesen und dann per Suchmuster die Zeilen löschen wo es nicht passt? Vielleicht hat einer 1-2 Suchbegriffe, damit ich das Board mal durchsuchen kann.

  • Kann man die SDX ... einlesen und dann per Suchmuster die Zeilen löschen wo es nicht passt?

    Nur zum Verständnis :

    Du möchtest aus der Fernsehliste.sdx alle Zeilen entfernen, die nicht in der Liste der Sendernamen (also der HTML-Liste) enthalten sind , korrekt ?

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Kann man die SDX z.B. mit FileReadToArray zeilenweise einlesen und dann per Suchmuster die Zeilen löschen wo es nicht passt?

    Eine Möglichkeit wäre z.B. , die Daten beider Arrays abzugleichen, die Treffer in ein neues Array einzufügen und dieses zu speichern.

    Ein mögliches Problem ist, dass die Funktion _FileWriteFromArray als Zeilenabschluss @CRLF anhängt.

    Falls nur ein @LF zulässig sein sollte, muss das neue Array manuell gespeichert werden.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Musashi : Ich weiß ja nicht, ob es einen Unterschied zwischen den Daten gibt (nicht geprüft), wenn man das mit inetgetsource ausließt und wenn man die Webseite per Rechtsklick speichert aber bei mir (Speichern) ist dort kein Leerzeichen und damit passt das Regex dort (mit Lerrzeichen) nicht. Geprüft auf der oben angegebenen Seite. Im Anhang meine HTML und auch die jeweiligen Prüfungen.

    Noch deutlicher wird es wenn ich nur "<div class="col freqx_1">" als Regex nehme, ohne Leerzeichen 247 Matches, mit Leerzeichen keins.

    Macht Inetgetsource also etwas anders?

  • Ein mögliches Problem ist, dass die Funktion _FileWriteFromArray als Zeilenabschluss @CRLF anhängt.

    Falls nur ein @LF zulässig sein sollte, muss das neue Array manuell gespeichert werden.

    Dazu einfach in der Funktion _FileWriteFromArray() (erreichbar in Scite über CTRL-J ) das @CRLF nur durch ein @LF austauschen. Falls das nötig sein sollte....ansonsten die Funktion anpassen bzw. auf eigene Bedürfnisse umschreiben.

  • Ich weiß ja nicht, ob es einen Unterschied zwischen den Daten gibt (nicht geprüft), wenn man das mit inetgetsource ausließt und wenn man die Webseite per Rechtsklick speichert

    InetRead und _InetGetSource geben die Daten zurück die der Server direkt liefert - also auch das was der Browser als Ausgangsmaterial erhält.

    Der Rechtsklick - speichern unter enthält hingegen den HTML-Zustand der Seite wie sie gerade im Browser angezeigt wird.

    Z.b. kann Javascript-Code Elemente hinzufügen, ändern etc. Dies wäre im InetRead-Code nicht mit drin da der JS-Code ja nie ausgeführt wird.

    Und offensichtlich räumt der Browser den Code auch noch etwas auf und entfernt wohl in diesem Zusammenhang auch unsinnige Leerzeichen.

    Im Übrigen ist BinaryToString(_INetGetSource("...", 0), 4) ein bisschen künstlich umständlich.
    Im Prinzip ist _InetGetSource mit dem 2. Parameter auf 0 nur ein reines InetRead.
    Von daher kann man auch gleich BinaryToString(InetRead("https://www.satindex.de/tv/1/1/0/"), 4) verwenden und braucht dann nicht extra eine UDF hierfür einzubinden.

  • Hi Moombas :

    Deine Frage, ob sich InetRead  bzw. _InetGetSource anders verhalten als Rechtsklick - Speichern hat AspirinJunkie ja bereits beantwortet.

    (war auch keine Unterstellung, dass Du Deine RegEx nicht geprüft hättest ;) )

    Dazu einfach in der Funktion _FileWriteFromArray() (erreichbar in Scite über CTRL-J ) das @CRLF nur durch ein @LF austauschen. Falls das nötig sein sollte....ansonsten die Funktion anpassen bzw. auf eigene Bedürfnisse umschreiben.

    Sehe ich auch so, Ich wollte dieselwiesel nur nicht vorschlagen, die Standard-UDF diesbzgl. zu ändern.

    Am Besten wäre es natürlich, wenn die Entwickler das per Parameter geregelt hätten. Gleiches gilt auch dafür, ob der letzten Zeile eine Umbruchssequenz angefügt wird oder nicht.

    (Es ist bald Weihnachten - da darf sich man so etwas ja mal wünschen ^^ )

    dieselwiesel :

    Falls @CRLF zu Problemen führt, kannst Du, wie von Andy vorgeschlagen, eine modifizierte Variante, z.B. mit einem Funktionsnamen wie _FileWriteFromArrayMod() in Dein Skript einfügen.

    Alternativ kannst Du das neue Array auch mit FileOpen -> Zeilen mit FileWrite in eine Datei schreiben.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Musashi

    TOP! :thumbup: Alles raus was (für mich) unnütz ist. Gibt noch einen kleines Problem. Wenn ich die neue Liste in den TV einspeise, kommt er nur bis #26, ein Sender mit Umlaut (siehe Bild). Obwohl der Line-Vergleich (alt/neu) im Notepad++ völlig identisch ist, hat der TV wohl ein Problem damit. Auch im ChanSort werden einige Sender mit fehlerhaften Werten dargestellt, auch hier sind es nur Sender mit Umlauten :/