Kanäle samt ServiceReference über script ermitteln

  • Hallo,


    ich würde gerne über ein Script die Kanäle samt deren ServiceReference über das WebIF von E2 ermitteln.


    Damit erhalte ich schon mal die Kanallisten samt der ServiceReference:


    wget -O- http://user:pass@ip/web/getservices


    Das brauche ich jetzt auch für die einzelnen Kanäle der Kanallisten.


    Ich habe versucht, bei der ServiceReference der Kanallisten die ":" durch "%3a" zu ersetzen und hiermit auszulesen:


    wget -O- http://user:pass@ip/web/getservices?ServiceListBrowse=$encodedRef


    Dabei kommt aber leider das Selbe raus wie beim ersten Befehl.



    Jemand eine Idee?

    MfG Ali

    DM8000 | DM8000 | DM500HD | DM500HD | DM7020S


    Bash
    #!/bin/sh
    while [ 1 ]
    do
    	echo "i love my dreams!!!"
    	sleep 1
    done
  • Die Liste, die Du mit /web/getservices bekommst, mußt Du nach den einzelnen e2servicereference-Einträgen parsen und dann jeden als Parameter sRef=... abfragen, also z. B.


    Code
    http://dm7025/web/getservices?sRef=1:7:1:0:0:0:0:0:0:0:FROM%20BOUQUET%20"userbouquet.favourites.tv"%20ORDER%20BY%20bouquet


    für die Favoriten. Nach der Methode bekommst Du aber nur die Sender, die in irgendeinem Bouquet sind. Wenn Du alle willst, kannst Du per FTP die Datei /etc/enigma2/lamedb lesen. In der Datei stehen erst die einzelnen Transponder und dann alle Sender.


    HeiRos

  • Hmmm, bekomme dabei nur das zurück:


    Zitat

    <?xml version="1.0" encoding="UTF-8"?>
    <e2servicelist>


    </e2servicelist>

    MfG Ali

    DM8000 | DM8000 | DM500HD | DM500HD | DM7020S


    Bash
    #!/bin/sh
    while [ 1 ]
    do
    	echo "i love my dreams!!!"
    	sleep 1
    done
  • Vergiß meine vorherige Antwort, der Weg war sowieso zu kompliziert. Mit


    Code
    http://dm7025/web/getallservices


    bekommst Du alles bouquetübergreifend geliefert.


    HeiRos

    Einmal editiert, zuletzt von HeiRos ()

    • Offizieller Beitrag

    eine Sache: getallservices bitte behutsam benutzen, das belastet die Box gerade bei etwas größeren Senderlisten u.U. doch sehr stark und kann auch ordentlich RAM verbrauchen!


    Das soll heißen, man kann es gerne benutzen, aber bitte nicht "ständig" abfragen! (also nicht alle 2 minuten oder so).

  • Code
    http://dm7025/web/getservices?sRef=1:7:2:0:0:0:0:0:0:0:(type%20==%202)FROM%20BOUQUET%20%22bouquets.radio%22%20ORDER%20BY%20bouquet


    Das funktioniert auf meinem relativ neuen CVS-Image. Irgendwann hatte sich von den Befehlen des Web-API die Syntax geändert, in der alten hieß es wahrscheinlich


    Code
    http://dm7025/web/fetchchannels?ServiceListBrowse=1:7:2:0:0:0:0:0:0:0:(type%20==%202)FROM%20BOUQUET%20%22bouquets.radio%22%20ORDER%20BY%20bouquet


    Ich weiß allerdings nicht mehr, wann die Änderung war und ob die alte Syntax wirklich korrekt ist.


    HeiRos

  • Vielen vielen dank erstmal :smiling_face:


    Mit der neuen Syntax lassen sich die Radio Services abrufen :smiling_face:


    Wenn man "getallservices" nicht jedesmal aufrufen soll, was wäre denn da eine sinnvolle alternative?


    Was ist denn der Unterschied zwischen:

    Code
    http://dm7025/web/getservices?ServiceListBrowse


    Code
    http://dm7025/web/getservices?sRef=
  • Zitat

    Original von visiomr2008
    Wenn man "getallservices" nicht jedesmal aufrufen soll, was wäre denn da eine sinnvolle alternative?


    Das kommt darauf an, wie Du die Liste weiterverarbeiten willst. Da Du sicher nicht im Minutentakt die Bouquets änderst, könntest Du das Ergebnis zwischenspeichern und nur von Zeit zu Zeit die Liste abrufen. Ansonsten kannst Du, wie am Beginn dieses Threads geschrieben, mit getservice zuerst die Bouquets und dann deren Inhalt abfragen. Ein


    Code
    http://dm7025/web/getservices


    liefert als Ergebnis



    und den Inhalt der Bouquets bekomme ich per Browser anschließend mit


    Code
    http://dm7025/web/getservices?sRef=1:7:1:0:0:0:0:0:0:0:FROM%20BOUQUET%20"userbouquet.favourites.tv"%20ORDER%20BY%20bouquet
    http://dm7025/web/getservices?sRef=1:7:1:0:0:0:0:0:0:0:(type%20==%201)%20FROM%20BOUQUET%20"userbouquet.test___tv_.tv"%20ORDER%20BY%20bouquet


    Wenn Du wget benutzt, gibt es wahrscheinlich irgendwelche unerwarteten Seiteneffekte mit der Interpretation von einigen Zeichen der URL. In der CMD-Konsole von XP sendet der Befehl (das " zusätzlich noch zu %22 geändert)


    Code
    wget http://dm7025/web/getservices?sRef=1:7:1:0:0:0:0:0:0:0:(type%20==%201)%20FROM%20BOUQUET%20%22userbouquet.test___tv_.tv%22%20ORDER%20BY%20bouquet -O-


    folgendes an die Box:


    Code
    GET /web/getservices?sRef=1:7:1:0:0:0:0:0:0:0:(type%20==%201)%20FROM%20BOUQUET%20%22userbouquet.test___tv_.tv%22%20ORDER%20BY%20bouquet HTTP/1.0
    User-Agent: Wget/1.9.1
    Host: dm7025
    Accept: */*
    Connection: Keep-Alive


    und bekommt als Antwort die korrekte Senderliste. Der selbe Befehl über die 4NT-Konsole abgesetzt wird zu


    Code
    GET /web/getservices?sRef=1:7:1:0:0:0:0:0:0:0:(type==)20BOUQUET22userbouquet.test___tv_.tv20ORDER20bouquet HTTP/1.0
    User-Agent: Wget/1.9.1
    Host: dm7025
    Accept: */*
    Connection: Keep-Alive


    was natürlich die falsche Syntax ist und als Ergebnis eine leere Senderliste wie aus Deiner Eröffnungsfrage ergibt. Du könntest zur Fehlersuche einen Sniffer auf das wget ansetzen, ich vermute, daß es bei Dir ein ähnliches Problem ist und Du einige Zeichen (das % ist für mich der erste Kandidat) für die Kommandozeile zusätzlich noch maskieren mußt.



    Zitat

    Was ist denn der Unterschied zwischen:

    Code
    http://dm7025/web/getservices?ServiceListBrowse


    Code
    http://dm7025/web/getservices?sRef=


    Der erste Befehl funktioniert nur in älteren Versionen des WebIf, der zweite nur in neueren. Da ich nicht weiß, welches Image Du benutzt, habe ich lieber beide angegeben.


    HeiRos

  • Vielen dank ihr habt mir sehr weitergeholfen :smiling_face:


    Ich bin gerade noch am Testen welches Image für meine gegebenheiten am besten ist, entweder das von DMM oder eins von BoxMan. Eben eines der aktuellsten....


    Nein die Liste wird eigentlich nie verändert. Beim Bouqet umschalten muss ich die Liste abrufen, bzw. Sender umschalten, ich muss das mal Testen wie das dann beim Zappen so abläuft, ansonsten ist das mit dem wget wahrscheinlich besser :smiling_face:

    • Offizieller Beitrag

    Also es gibt 2 möglichkeiten das (aus Sicht der Belastung der Box) effizient zu nutzen:


    1. Du holst nur was du gerade wirklich brauchst - das ist dann immer aktuell
    2. Du holst alles auf einmal und hältst es vor (kann u.U. dann veralten... aber Bouquets sollten sich ja nicht so oft ändern...

  • Nochmal zum letzten Posting, habe mich eben mit nem Kollegen unterhalten, die wollen nun die Datei gar nicht per XML im Browser abrufen, sondern über samba zugreifen und auslesen, dann sollten ja die Performance Probleme vergessen sein, oder?