Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Urllib, Dynamische Webabfrage von passwortgeschützter Seite?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    HS/FS - √ - Urllib, Dynamische Webabfrage von passwortgeschützter Seite?

    Hallo zusammen,
    Ich versuch mich an einem Logikbaustein der mit Hilfe der Urllib eine Webabfrage an meinem Musikpal durchführt.
    Ziel ist es die ja nicht immer in gleicher Anzahl gespeicherten Favoriten auszulesen und die ersten 15 auszugeben.

    Wie krieg ich Username und Passwort mit der Urllib übermittelt?
    So gehts anscheinend nicht


    Code:
    # -*- coding: iso8859-1 -*-
    ## -----------------------------------------------------
    ## urllib : Musicpal Favoriten Abfrage   ### V0.1
    ##
    ## erstellt am: 2010-06-01 20:16
    ## -----------------------------------------------------
    ## Copyright © 2010, knx-user-forum e.V, All rights reserved.
    ##
    ## This program is free software; you can redistribute it and/or modify it under the terms
    ## of the GNU General Public License as published by the Free Software Foundation; either
    ## version 3 of the License, or (at your option) any later version.
    ##
    ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
    ## without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    ## See the GNU General Public License for more details.
    ##
    ## You should have received a copy of the GNU General Public License along with this program;
    ## if not, see <http://www.gnu.de/documents/gpl-3.0.de.html>.
    
    
    #5000|"Text"|Remanent(1/0)|Anz.Eingänge|.n.|Anzahl Ausgänge|.n.|.n.
    #5001|Anzahl Eingänge|Ausgänge|Offset|Speicher|Berechnung bei Start
    #5002|Index Eingang|Default Wert|0=numerisch 1=alphanummerisch
    #5003|Speicher|Initwert|Remanent
    #5004|ausgang|Initwert|runden binär (0/1)|typ (1-send/2-sbc)|0=numerisch 1=alphanummerisch
    #5012|abbruch bei bed. (0/1)|bedingung|formel|zeit|pin-ausgang|pin-offset|pin-speicher|pin-neg.ausgang
    
    5000|"woda\MusicPal_Favoritenabfrage"|0|4|"E1 Musicpal_IP"|"E2 Username"|"E3 Passwort"|"E4 Trigger"|7|"A1 Fav.01"|"A2 Fav.02"|"A3 Fav.03"|"A4 Fav.04"|"A5 Fav.05"|"A6 Fav.06"|"A7 DEBUG"
    
    5001|3|7|0|3|1
    
    # EN[x]
    5002|1|"192.168.0.5"|1 #* IP
    5002|2|""|1 #* Username
    5002|3|""|1 #* Passwort
    5002|4|""|0 #* Trigger
    
    # Speicher
    5003|1||0  #* Klassenspeicher
    5003|2||0  #* HTMLSpeicher
    5003|3||0  #* RegexSpeicher
    
    # Ausgänge
    5004|1|""|0|1|1 #* Fav. 1
    5004|2|""|0|1|1 #* 
    5004|3|""|0|1|1 #* 
    5004|4|""|0|1|1 #* 
    5004|5|""|0|1|1 #* 
    5004|6|""|0|1|1 #* 
    5004|7|""|0|1|1 #* DEBUG 
    
    #################################################
    
    5012|0|"EI"|"eval(compile(__import__('base64').decodestring('CmlmIEVJPT0xOiAgICAKICAgIGNsYXNzIEtOWFVGX3VybGxpYjoKICAgICAgICBkZWYgX19pbml0X18oc2VsZixvYmopOgogICAgICAgICAgICBzZWxmLk1DID0gb2JqLk1DCiAgICAgICAgICAgIHNlbGYucmVjdXJzaXY9MAogICAgICAgIGRlZiByZXNvbHZlKHNlbGYsaG9zdCk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLk1DLkROU1Jlc29sdmVyLmdldEhvc3RJUChob3N0KQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9faW1wb3J0X18oJ3NvY2tldCcpLmdldGhvc3RieW5hbWUoaG9zdCkKICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICByYWlzZSAiSG9zdDogIiArIGhvc3QgKyAiIG5vdCBmb3VuZCIKICAgICAgICBkZWYgb3BlbihzZWxmLHVybCxtZXRob2Q9J0dFVCcsIGRhdGE9JycsIHJlZmVyZXI9JycsIGFnZW50PSJHSVJBIEhvbWVzZXJ2ZXIiLGxhbmc9ImRlLWRlLGRlO3E9MC44LGVuLXVzO3E9MC41O2VuO3E9MC4zIixmb2xsb3c9MSx0aW1lb3V0PTEsaGVhZGVyPTAsY29udGVudD0xLHNlcGVyYXRvcj0iIyIpOgogICAgICAgICAgICBpZiBzZWxmLnJlY3Vyc2l2PjI6CiAgICAgICAgICAgICAgICByZXR1cm4gIiIKICAgICAgICAgICAgaGF2ZUJlaGF2aW91cj1UcnVlCiAgICAgICAgICAgIGlmIGFnZW50PT0iTVNJRSI6CiAgICAgICAgICAgICAgICBhZ2VudD0iTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBXaW5kb3dzIE5UIDYuMCkiCiAgICAgICAgICAgICAgICBoYXZlQmVoYXZpb3VyPUZhbHNlCiAgICAgICAgICAgIGlmIGFnZW50PT0iRkYyIjoKICAgICAgICAgICAgICAgIGFnZW50PSJNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGRlOyBydjoxLjguMS4yMCkgR2Vja28vMjAwODEyMTcgRmlyZWZveC8yLjAuMC4yMCIKICAgICAgICAgICAgICAgIGhhdmVCZWhhdmlvdXI9RmFsc2UKICAgICAgICAgICAgbWV0aG9kPW1ldGhvZC51cHBlcigpCiAgICAgICAgICAgIHVybD11cmwuc3BsaXQoIi8iKQogICAgICAgICAgICBwcm90bz11cmxbMF0ubG93ZXIoKQogICAgICAgICAgICBpZiBwcm90bz09Imh0dHA6IjoKICAgICAgICAgICAgICAgIHBvcnQ9ODAKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHBvcnQ9MjMKICAgICAgICAgICAgaG9zdD11cmxbMl0ubG93ZXIoKQogICAgICAgICAgICBpZiBob3N0LmZpbmQoIjoiKT4wOgogICAgICAgICAgICAgICAgKGhvc3QsIHBvcnQpID0gaG9zdC5zcGxpdCgiOiIpCiAgICAgICAgICAgICAgICBwb3J0PWludChwb3J0KQogICAgICAgICAgICBkc3RfYWRkciA9IHNlbGYucmVzb2x2ZShob3N0KQogICAgICAgICAgICB1cmwucG9wKDApCiAgICAgICAgICAgIHVybC5wb3AoMCkKICAgICAgICAgICAgdXJsLnBvcCgwKQogICAgICAgICAgICBzb2NrID0gX19pbXBvcnRfXygnc29ja2V0Jykuc29ja2V0KF9faW1wb3J0X18oJ3NvY2tldCcpLkFGX0lORVQsX19pbXBvcnRfXygnc29ja2V0JykuU09DS19TVFJFQU0pCiAgICAgICAgICAgIGlmIGZsb2F0KF9faW1wb3J0X18oJ3N5cycpLnZlcnNpb25bMDozXSk+Mi4yOgogICAgICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KHRpbWVvdXQpCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHNvY2suY29ubmVjdCgoZHN0X2FkZHIscG9ydCkpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgIHJhaXNlICJLZWluZSBWZXJiaW5kdW5nIHp1IEhvc3QgIitob3N0KyIgYXVmIFBvcnQgIitzdHIocG9ydCkKICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQogICAgICAgICAgICAgICAgcmV0dXJuICIiCiAgICAgICAgICAgIHVybD0iLyIuam9pbih1cmwpICAgICAgICAgICAgICAgIAogICAgICAgICAgICBpZiBwcm90bz09Imh0dHA6IjoKICAgICAgICAgICAgICAgIHVybCA9IF9faW1wb3J0X18oJ3VybGxpYicpLnF1b3RlX3BsdXMoIi8iK3VybCwiLz8mPSUjIikKICAgICAgICAgICAgICAgIHBvc3RkYXRhPSIiCiAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YSk+MDoKICAgICAgICAgICAgICAgICAgICBzZW5kZGF0YT1fX2ltcG9ydF9fKCd1cmxsaWInKS5xdW90ZV9wbHVzKGRhdGEsIiY9IikKICAgICAgICAgICAgICAgICAgICBpZiBtZXRob2QgPT0gIkdFVCI6CiAgICAgICAgICAgICAgICAgICAgICAgIHVybCs9Ij8iK2RhdGEKICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGRhdGE9IiIKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBwb3N0ZGF0YSA9IkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGRhdGErPSJDb250ZW50LUxlbmd0aDogIitzdHIobGVuKGRhdGEpKSsiXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGRhdGErPSJDb25lY3Rpb246IGNsb3NlXHJcblxyXG4iCiAgICAgICAgICAgICAgICBzb2NrLnNlbmQobWV0aG9kKyIgIit1cmwrIiBIVFRQLzEuMVxyXG4iKQogICAgICAgICAgICAgICAgc29jay5zZW5kKCJIT1NUOiAiK2hvc3QrIlxyXG4iKQogICAgICAgICAgICAgICAgc29jay5zZW5kKCJVc2VyLUFnZW50OiAiK2FnZW50KyJcclxuIikKICAgICAgICAgICAgICAgIGlmIG5vdCBoYXZlQmVoYXZpb3VyOgogICAgICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiQWNjZXB0OiAiKyJ0ZXh0L3htbCxhcHBsaWNhdGlvbi94bWwsYXBwbGljYXRpb24veGh0bWwreG1sLHRleHQvaHRtbDtxPTAuOSx0ZXh0L3BsYWluO3E9MC44LGltYWdlL3BuZywqLyo7cT0wLjVcclxuIikKICAgICAgICAgICAgICAgICAgICBzb2NrLnNlbmQoIkFjY2VwdC1MYW5ndWFnZTogIiArIGxhbmcubG93ZXIoKSArICJcclxuIikKICAgICAgICAgICAgICAgICAgICBzb2NrLnNlbmQoIkFjY2VwdC1DaGFyc2V0OiAiKyAiSVNPLTg4NTktMSx1dGYtODtxPTAuNywqO3E9MC43XHJcbiIpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiQWNjZXB0LUxhbmd1YWdlOiAiICsgbGFuZy5sb3dlcigpICsgIlxyXG4iKQogICAgICAgICAgICAgICAgaWYgbGVuKHJlZmVyZXIpPjA6CiAgICAgICAgICAgICAgICAgICAgc29jay5zZW5kKCJSZWZlcmVyOiAiK3JlZmVyZXIrIlxyXG4iKQogICAgICAgICAgICAgICAgaWYgbGVuKHBvc3RkYXRhKT4wOgogICAgICAgICAgICAgICAgICAgIHNvY2suc2VuZChwb3N0ZGF0YSkKICAgICAgICAgICAgICAgICAgICBzb2NrLnNlbmQoc2VuZGRhdGEpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiXHJcbiIpCiAgICAgICAgICAgICAgICAgICAgc29jay5zZW5kKCJcclxuIikKICAgICAgICAgICAgZWxpZiBwcm90bz09InRlbG5ldDoiOgogICAgICAgICAgICAgICAgaGVhZGVyPTEKICAgICAgICAgICAgICAgIGNvbnRlbnQ9MQogICAgICAgICAgICAgICAgaWYgdXJsLmZpbmQoc2VwZXJhdG9yKSE9LTE6CiAgICAgICAgICAgICAgICAgICAgZm9yIGNtZCBpbiB1cmwuc3BsaXQoc2VwZXJhdG9yKToKICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZW5kKGNtZCsiXHJcbiIpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNvY2suc2VuZCh1cmwrIlxyXG4iKQogICAgICAgICAgICBzb2NrLnNodXRkb3duKDEpCiAgICAgICAgICAgIHJlY2VpdmVkPSIiCiAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICByZWFkPXNvY2sucmVjdigxMDI0KQogICAgICAgICAgICAgICAgaWYgbm90IHJlYWQ6CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIHJlY2VpdmVkKz1yZWFkCiAgICAgICAgICAgIHNvY2suY2xvc2UoKQogICAgICAgICAgICByZWNlaXZlZCA9IF9faW1wb3J0X18oJ3JlJykuc3BsaXQoIlxyXG5cclxuIixyZWNlaXZlZCkKICAgICAgICAgICAgcmVkaXJlY3QgPSBfX2ltcG9ydF9fKCdyZScpLmZpbmRhbGwociIoP20pXkxvY2F0aW9uOlxzKFx3KzouKilcclxuIiwgcmVjZWl2ZWRbMF0pCiAgICAgICAgICAgIGlmIHJlZGlyZWN0OgogICAgICAgICAgICAgICAgaWYgZm9sbG93PT0xOgogICAgICAgICAgICAgICAgICAgIHNlbGYucmVjdXJzaXYrPTEKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5vcGVuKHJlZGlyZWN0WzBdLG1ldGhvZD1tZXRob2QsIGRhdGE9ZGF0YSwgcmVmZXJlcj1yZWZlcmVyLCBhZ2VudD1hZ2VudCx0aW1lb3V0PXRpbWVvdXQsaGVhZGVyPWhlYWRlcixjb250ZW50PWNvbnRlbnQsc2VwZXJhdG9yPXNlcGVyYXRvcikKICAgICAgICAgICAgcmV0PSIiCiAgICAgICAgICAgIGlmIGhlYWRlcjoKICAgICAgICAgICAgICAgIHJldCs9cmVjZWl2ZWRbMF0KICAgICAgICAgICAgaWYgY29udGVudDoKICAgICAgICAgICAgICAgIGlmIGhlYWRlcjoKICAgICAgICAgICAgICAgICAgICByZXQrPSJcclxuXHJcbiIKICAgICAgICAgICAgICAgIHJlY2VpdmVkLnBvcCgwKQogICAgICAgICAgICAgICAgcmV0Kz0iXHJcblxyXG4iLmpvaW4ocmVjZWl2ZWQpCiAgICAgICAgICAgIHJldHVybiByZXQK'),'<10101_urllib_Musikpal_Favoritenabfrage>','exec'))"|""|0|0|0|0
    
    ## Klasse auf SN[1]
    5012|0|"EI"|"KNXUF_urllib(self)"|""|0|0|1|0
    
    ## Abfrage 
    5012|0|"(EC[1] or EC[2] or EC[3] or EC[4]) and len(EN[1])>0"|"SN[1].open('http://'+EN[2]+':'+EN[3]+'@'+EN[1]+'/admin/cgi-bin/state.cgi?fav=1')"|""|7|0|2|0
    
    ## Regex
    5012|0|"len(SN[2])>0"|"__import__('re').search(r'<name>(?P<fav01>)[</name>]',SN[2])"|""|0|0|3|0
    
    ## Abbruch bei Fehler
    5012|1|"str(type(SN[3])).find('SRE_Match') == -1"|""|""|0|0|0|0
    ## AUsgabe
    5012|0|"SN[3]"|"SN[3].group('fav01')"|""|1|0|0|0
    5012|0|"SN[3]"|"SN[3].group('fav02')"|""|2|0|0|0
    5012|0|"SN[3]"|"SN[3].group('fav03')"|""|3|0|0|0
    5012|0|"SN[3]"|"SN[3].group('fav04')"|""|4|0|0|0
    5012|0|"SN[3]"|"SN[3].group('fav05')"|""|5|0|0|0
    5012|0|"SN[3]"|"SN[3].group('fav06')"|""|6|0|0|0

    #2
    Ja hab ich nicht drin, wenn du ein bisschen Zeit hast bau ichs am Montag ein.
    Nils

    aktuelle Bausteine:
    BusAufsicht - ServiceCheck - Pushover - HS-Insight

    Kommentar


      #3
      Hallo Nils,
      natürlich hab ich solange Zeit.
      Bei dem Wetter gibts eh anderes zu tun: Grillen, Gartenarbeit, Grillen...

      Gruß Wolfgang

      Kommentar


        #4
        So hier ist die urllib mit auth.

        Code:
         
        einfach nur auth='user:pass' als weiteren Parameter übergeben
        Angehängte Dateien
        Nils

        aktuelle Bausteine:
        BusAufsicht - ServiceCheck - Pushover - HS-Insight

        Kommentar


          #5
          einfach der Hammer!!

          Danke Nils

          Kommentar


            #6
            Hallo Regex Experten,

            da ich dank der von Nils modifizierten Urllib jetzt auch auf meinen Musikpal zugreifen kann, gehts einen Schritt weiter.

            Nächster Schritt, nächstes Problem ;-)

            Ich scheitere an einer flexiblen Regex Abfrage der Musicpal Favoriten.
            Da die Anzahl der Favoriten natürlich fexibel ist scheitert die unten verwendete Abfrage sobald weniger als 6 Favoriten gespeichert sind.
            Natürlich möchte ich im Endausbau mindestens 20 Favoriten auslesen.

            Vermutlich sollte ich die Abfrage auf mehrere Einzelabfragen verteilen.

            Noch besser fänd ich zuerst die Anzahl der Favoriten abzufragen und dann in einer Schleife die Einträge in ein Array zu schreiben.

            Leider kann ich das aber nicht umsetzen.

            Hier die unflexible Abfrage:
            Code:
            ## Regex
            5012|0|"len(SN[2])>0"|"__import__('re').search(r'(?s)(?:<name>(?P<fav01>.*?)</name>.*?)(?:<name>(?P<fav02>.*?)</name>.*?)(?:<name>(?P<fav03>.*?)</name>.*?)(?:<name>(?P<fav04>.*?)</name>.*?)(?:<name>(?P<fav05>.*?)</name>.*?)(?:<name>(?P<fav06>.*?)</name>.*?)',SN[2])"|""|0|0|3|0
            ....und ein Ausschnitt aus dem auzuwertenden XML:

            Code:
            <favorite>
            <name>Rasta Music</name>
            −
            <url>
            http://freecom.vtuner.com/setupapp/fc/asp/func/dynamOD.asp?ex45v=0001DB09F344&id=11826
            </url>
            <length>-1</length>
            </favorite>
            −
            <favorite>
            <name>CyberFM Reggae</name>
            −
            <url>
            http://freecom.vtuner.com/setupapp/fc/asp/func/dynamOD.asp?ex45v=0001DB09F344&id=30752
            </url>
            <length>-1</length>
            </favorite>
            −
            <favorite>
            <name>Tropical 100 Bacharengue</name>
            −
            <url>
            http://freecom.vtuner.com/setupapp/fc/asp/func/dynamOD.asp?ex45v=0001DB09F344&id=32305
            </url>
            <length>-1</length>
            </favorite>
            −
            <favorite>
            <name>ClubFM Merengue</name>
            −
            <url>
            http://freecom.vtuner.com/setupapp/fc/asp/func/dynamOD.asp?ex45v=0001DB09F344&id=24503
            </url>
            <length>-1</length>
            </favorite>
            Wie löst ihr das Problem einer Urllib bzw. Regex Abfrage mit flexibler Datenmenge aber identischen XML Tags?

            Kommentar


              #7
              Code:
              ## Regex als Array auf SN[3]
              5012|0|"len(SN[2])>0"|"__import__('re').findall('(?s)<name>(?P<name>.*?)</name>.*?<url>(?P<url>.*?)</url>',SN[2])"|""|0|0|3|0
               
              Wenn Array SN[3] grösser 0 dann ....
              5012|0|"len(SN[3])>0"|"SN[3][0].group('name')"|""|3|0|0|0
              5012|0|"len(SN[3])>0"|"SN[3][0].group('url')"|""|4|0|0|0
              Wenn Array SN[3] grösser 1 dann ....
              5012|0|"len(SN[3])>1"|"SN[3][0].group('name')"|""|5|0|0|0
              5012|0|"len(SN[3])>1"|"SN[3][0].group('url')"|""|6|0|0|0
              Wenn Array SN[3] grösser 2 dann ....
              5012|0|"len(SN[3])>2"|"SN[3][0].group('name')"|""|7|0|0|0
              5012|0|"len(SN[3])>2"|"SN[3][0].group('url')"|""|8|0|0|0

              aber wie immer ungetestet
              Nils

              aktuelle Bausteine:
              BusAufsicht - ServiceCheck - Pushover - HS-Insight

              Kommentar


                #8
                Ok hab ich getestet, jetzt spuckt er mir eine Fehlermeldung aus:
                Code:
                [B]12.06.2010 22:53:42 (1)[/B]
                  File "/hs/compile/hs_logik.py", line  170, in calc
                  File "formula", line 0, in ?
                AttributeError: 'tuple' object has no attribute 'group'
                [5012L, 10101L, 0L, 'len(SN[3])]0', "SN[3][0].group('name')", '', 1L,  0L, 0L, 0L]

                Kommentar


                  #9
                  OK, der findall unterstütz die NamedGroups nicht.

                  Code:
                  ## Regex als Array auf SN[3]
                   
                  5012|0|"len(SN[2])>0"|"__import__('re').findall(r'(?s)<name>(?P<name>.*?)</name>.*?<url>\n(?P<url>.*?)\n</url>',SN[2])"|""|0|0|3|0
                   
                  ## jeweils immer Name,URL
                  Wenn Array SN[3] grösser 0 dann ....
                  5012|0|"len(SN[3])>0"|"SN[3][0][0]"|""|3|0|0|0
                  5012|0|"len(SN[3])>0"|"SN[3][0][1]"|""|4|0|0|0
                  Wenn Array SN[3] grösser 1 dann ....
                  5012|0|"len(SN[3])>1"|"SN[3][0][0]"|""|5|0|0|0
                  5012|0|"len(SN[3])>1"|"SN[3][0][1]"|""|6|0|0|0
                  Wenn Array SN[3] grösser 2 dann ....
                  5012|0|"len(SN[3])>2"|"SN[3][0][0]"|""|7|0|0|0
                  5012|0|"len(SN[3])>2"|"SN[3][0][1]"|""|8|0|0|0
                  ## evtl. die \n in \\n ändern
                  Nils

                  aktuelle Bausteine:
                  BusAufsicht - ServiceCheck - Pushover - HS-Insight

                  Kommentar


                    #10
                    Jetzt läufts!

                    1. kleiner Fehler in der Urllib behoben:
                    Code:
                    if len(auth)>0:
                                        sock.send("Authorization: Basic "+auth.encode('base64')+"\r\n")
                    ersetzt durch:
                    Code:
                    if len(auth)>0:
                                        sock.send("Authorization: Basic "+__import__('base64').encodestring(auth)+"\r\n")
                    Der Rest sieht jetzt so aus:
                    Code:
                    # -*- coding: iso8859-1 -*-
                    ## -----------------------------------------------------
                    ## urllib : Musicpal Favoriten Abfrage   ### V0.4
                    ##
                    ## erstellt am: 2010-06-01 20:16
                    ## -----------------------------------------------------
                    ## Copyright © 2010, knx-user-forum e.V, All rights reserved.
                    ##
                    ## This program is free software; you can redistribute it and/or modify it under the terms
                    ## of the GNU General Public License as published by the Free Software Foundation; either
                    ## version 3 of the License, or (at your option) any later version.
                    ##
                    ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
                    ## without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
                    ## See the GNU General Public License for more details.
                    ##
                    ## You should have received a copy of the GNU General Public License along with this program;
                    ## if not, see <http://www.gnu.de/documents/gpl-3.0.de.html>.
                    
                    
                    #5000|"Text"|Remanent(1/0)|Anz.Eingänge|.n.|Anzahl Ausgänge|.n.|.n.
                    #5001|Anzahl Eingänge|Ausgänge|Offset|Speicher|Berechnung bei Start
                    #5002|Index Eingang|Default Wert|0=numerisch 1=alphanummerisch
                    #5003|Speicher|Initwert|Remanent
                    #5004|ausgang|Initwert|runden binär (0/1)|typ (1-send/2-sbc)|0=numerisch 1=alphanummerisch
                    #5012|abbruch bei bed. (0/1)|bedingung|formel|zeit|pin-ausgang|pin-offset|pin-speicher|pin-neg.ausgang
                    
                    5000|"woda\MusicPal_Favoritenabfrage"|0|4|"E1 Musicpal_IP"|"E2 Username"|"E3 Passwort"|"E4 Trigger"|8|"A1 Anzahl"|"A2 Fav.01"|"A3 Fav.02"|"A4 Fav.03"|"A5 Fav.04"|"A6 Fav.05"|"A7 Fav.06"|"A8 DEBUG"
                    
                    5001|4|8|0|3|1
                    
                    # EN[x]
                    5002|1|"192.168.0.5"|1 #* IP
                    5002|2|""|1 #* Username
                    5002|3|""|1 #* Passwort
                    5002|4|""|0 #* Trigger
                    
                    # Speicher
                    5003|1||0  #* Klassenspeicher
                    5003|2||0  #* HTMLSpeicher
                    5003|3||0  #* RegexSpeicher
                    
                    # Ausgänge
                    5004|1|""|0|1|0 #* Anzahl der Favoriten
                    5004|2|""|0|1|1 #* Fav. 1
                    5004|3|""|0|1|1 #* 
                    5004|4|""|0|1|1 #* 
                    5004|5|""|0|1|1 #* 
                    5004|6|""|0|1|1 #* 
                    5004|7|""|0|1|1 #* 
                    5004|8|""|0|1|1 #* DEBUG 
                    
                    #################################################
                    
                    5012|0|"EI"|"eval(compile(__import__('base64').decodestring('CmlmIEVJPT0xOiAgICAKICAgIGNsYXNzIEtOWFVGX3VybGxpYjoKICAgICAgICBkZWYgX19pbml0X18oc2VsZixvYmopOgogICAgICAgICAgICBzZWxmLk1DID0gb2JqLk1DCiAgICAgICAgICAgIHNlbGYucmVjdXJzaXY9MAogICAgICAgIGRlZiByZXNvbHZlKHNlbGYsaG9zdCk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLk1DLkROU1Jlc29sdmVyLmdldEhvc3RJUChob3N0KQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9faW1wb3J0X18oJ3NvY2tldCcpLmdldGhvc3RieW5hbWUoaG9zdCkKICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICByYWlzZSAiSG9zdDogIiArIGhvc3QgKyAiIG5vdCBmb3VuZCIKICAgICAgICBkZWYgb3BlbihzZWxmLHVybCxtZXRob2Q9J0dFVCcsIGRhdGE9JycsIHJlZmVyZXI9JycsIGFnZW50PSJHSVJBIEhvbWVzZXJ2ZXIiLGF1dGg9JycsbGFuZz0iZGUtZGUsZGU7cT0wLjgsZW4tdXM7cT0wLjU7ZW47cT0wLjMiLGZvbGxvdz0xLHRpbWVvdXQ9MSxoZWFkZXI9MCxjb250ZW50PTEsc2VwZXJhdG9yPSIjIik6CiAgICAgICAgICAgIGlmIHNlbGYucmVjdXJzaXY+MjoKICAgICAgICAgICAgICAgIHJldHVybiAiIgogICAgICAgICAgICBoYXZlQmVoYXZpb3VyPVRydWUKICAgICAgICAgICAgaWYgYWdlbnQ9PSJNU0lFIjoKICAgICAgICAgICAgICAgIGFnZW50PSJNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNi4wKSIKICAgICAgICAgICAgICAgIGhhdmVCZWhhdmlvdXI9RmFsc2UKICAgICAgICAgICAgaWYgYWdlbnQ9PSJGRjIiOgogICAgICAgICAgICAgICAgYWdlbnQ9Ik1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZGU7IHJ2OjEuOC4xLjIwKSBHZWNrby8yMDA4MTIxNyBGaXJlZm94LzIuMC4wLjIwIgogICAgICAgICAgICAgICAgaGF2ZUJlaGF2aW91cj1GYWxzZQogICAgICAgICAgICBtZXRob2Q9bWV0aG9kLnVwcGVyKCkKICAgICAgICAgICAgdXJsPXVybC5zcGxpdCgiLyIpCiAgICAgICAgICAgIHByb3RvPXVybFswXS5sb3dlcigpCiAgICAgICAgICAgIGlmIHByb3RvPT0iaHR0cDoiOgogICAgICAgICAgICAgICAgcG9ydD04MAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcG9ydD0yMwogICAgICAgICAgICBob3N0PXVybFsyXS5sb3dlcigpCiAgICAgICAgICAgIGlmIGhvc3QuZmluZCgiOiIpPjA6CiAgICAgICAgICAgICAgICAoaG9zdCwgcG9ydCkgPSBob3N0LnNwbGl0KCI6IikKICAgICAgICAgICAgICAgIHBvcnQ9aW50KHBvcnQpCiAgICAgICAgICAgIGRzdF9hZGRyID0gc2VsZi5yZXNvbHZlKGhvc3QpCiAgICAgICAgICAgIHVybC5wb3AoMCkKICAgICAgICAgICAgdXJsLnBvcCgwKQogICAgICAgICAgICB1cmwucG9wKDApCiAgICAgICAgICAgIHNvY2sgPSBfX2ltcG9ydF9fKCdzb2NrZXQnKS5zb2NrZXQoX19pbXBvcnRfXygnc29ja2V0JykuQUZfSU5FVCxfX2ltcG9ydF9fKCdzb2NrZXQnKS5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgaWYgZmxvYXQoX19pbXBvcnRfXygnc3lzJykudmVyc2lvblswOjNdKT4yLjI6CiAgICAgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQodGltZW91dCkKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgc29jay5jb25uZWN0KChkc3RfYWRkcixwb3J0KSkKICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCiAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SOiBDb25uZWN0aW9uIEZhaWwiCiAgICAgICAgICAgIHVybD0iLyIuam9pbih1cmwpICAgICAgICAgICAgICAgIAogICAgICAgICAgICBpZiBwcm90bz09Imh0dHA6IjoKICAgICAgICAgICAgICAgIHVybCA9IF9faW1wb3J0X18oJ3VybGxpYicpLnF1b3RlX3BsdXMoIi8iK3VybCwiLz8mPSUjIikKICAgICAgICAgICAgICAgIHBvc3RkYXRhPSIiCiAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YSk+MDoKICAgICAgICAgICAgICAgICAgICBzZW5kZGF0YT1fX2ltcG9ydF9fKCd1cmxsaWInKS5xdW90ZV9wbHVzKGRhdGEsIiY9IikKICAgICAgICAgICAgICAgICAgICBpZiBtZXRob2QgPT0gIkdFVCI6CiAgICAgICAgICAgICAgICAgICAgICAgIHVybCs9Ij8iK2RhdGEKICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGRhdGE9IiIKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBwb3N0ZGF0YSA9IkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGRhdGErPSJDb250ZW50LUxlbmd0aDogIitzdHIobGVuKGRhdGEpKSsiXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGRhdGErPSJDb25lY3Rpb246IGNsb3NlXHJcblxcclxuIgogICAgICAgICAgICAgICAgc29jay5zZW5kKG1ldGhvZCsiICIrdXJsKyIgSFRUUC8xLjFcclxuIikKICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiSE9TVDogIitob3N0KyJcclxuIikKICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiVXNlci1BZ2VudDogIithZ2VudCsiXHJcbiIpCiAgICAgICAgICAgICAgICBpZiBub3QgaGF2ZUJlaGF2aW91cjoKICAgICAgICAgICAgICAgICAgICBzb2NrLnNlbmQoIkFjY2VwdDogIisidGV4dC94bWwsYXBwbGljYXRpb24veG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCx0ZXh0L2h0bWw7cT0wLjksdGV4dC9wbGFpbjtxPTAuOCxpbWFnZS9wbmcsKi8qO3E9MC41XHJcbiIpCiAgICAgICAgICAgICAgICAgICAgc29jay5zZW5kKCJBY2NlcHQtTGFuZ3VhZ2U6ICIgKyBsYW5nLmxvd2VyKCkgKyAiXHJcbiIpCiAgICAgICAgICAgICAgICAgICAgc29jay5zZW5kKCJBY2NlcHQtQ2hhcnNldDogIisgIklTTy04ODU5LTEsdXRmLTg7cT0wLjcsKjtxPTAuN1xyXG4iKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzb2NrLnNlbmQoIkFjY2VwdC1MYW5ndWFnZTogIiArIGxhbmcubG93ZXIoKSArICJcclxuIikKICAgICAgICAgICAgICAgIGlmIGxlbihhdXRoKT4wOgogICAgICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiQXV0aG9yaXphdGlvbjogQmFzaWMgIitfX2ltcG9ydF9fKCdiYXNlNjQnKS5lbmNvZGVzdHJpbmcoYXV0aCkrIlxyXG4iKQogICAgICAgICAgICAgICAgaWYgbGVuKHJlZmVyZXIpPjA6CiAgICAgICAgICAgICAgICAgICAgc29jay5zZW5kKCJSZWZlcmVyOiAiK3JlZmVyZXIrIlxyXG4iKQogICAgICAgICAgICAgICAgaWYgbGVuKHBvc3RkYXRhKT4wOgogICAgICAgICAgICAgICAgICAgIHNvY2suc2VuZChwb3N0ZGF0YSkKICAgICAgICAgICAgICAgICAgICBzb2NrLnNlbmQoc2VuZGRhdGEpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiXHJcbiIpCiAgICAgICAgICAgICAgICAgICAgc29jay5zZW5kKCJcclxuIikKICAgICAgICAgICAgZWxpZiBwcm90bz09InRlbG5ldDoiOgogICAgICAgICAgICAgICAgaGVhZGVyPTEKICAgICAgICAgICAgICAgIGNvbnRlbnQ9MQogICAgICAgICAgICAgICAgaWYgdXJsLmZpbmQoc2VwZXJhdG9yKSE9LTE6CiAgICAgICAgICAgICAgICAgICAgZm9yIGNtZCBpbiB1cmwuc3BsaXQoc2VwZXJhdG9yKToKICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZW5kKGNtZCsiXHJcbiIpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNvY2suc2VuZCh1cmwrIlxyXG4iKQogICAgICAgICAgICBzb2NrLnNodXRkb3duKDEpCiAgICAgICAgICAgIHJlY2VpdmVkPSIiCiAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICByZWFkPXNvY2sucmVjdigxMDI0KQogICAgICAgICAgICAgICAgaWYgbm90IHJlYWQ6CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIHJlY2VpdmVkKz1yZWFkCiAgICAgICAgICAgIHNvY2suY2xvc2UoKQogICAgICAgICAgICByZWNlaXZlZCA9IF9faW1wb3J0X18oJ3JlJykuc3BsaXQoIlxyXG5cclxuIixyZWNlaXZlZCkKICAgICAgICAgICAgcmVkaXJlY3QgPSBfX2ltcG9ydF9fKCdyZScpLmZpbmRhbGwociIoP20pXkxvY2F0aW9uOlxzKC4qKVxyXG4iLCByZWNlaXZlZFswXSkKICAgICAgICAgICAgaWYgcmVkaXJlY3Q6CiAgICAgICAgICAgICAgICBpZiBmb2xsb3c9PTE6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWN1cnNpdis9MQogICAgICAgICAgICAgICAgICAgIGlmIHJlZGlyZWN0WzBdLmZpbmQoImh0dHA6Ly8iKT09LTE6CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0WzBdPSJodHRwOi8vIitob3N0K3JlZGlyZWN0WzBdCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYub3BlbihyZWRpcmVjdFswXSxtZXRob2Q9bWV0aG9kLCBkYXRhPWRhdGEsIHJlZmVyZXI9cmVmZXJlciwgYWdlbnQ9YWdlbnQsYXV0aD1hdXRoLHRpbWVvdXQ9dGltZW91dCxsYW5nPWxhbmcsaGVhZGVyPWhlYWRlcixjb250ZW50PWNvbnRlbnQsc2VwZXJhdG9yPXNlcGVyYXRvcikKICAgICAgICAgICAgaWYgcmVjZWl2ZWRbMF1bOToxMl0gIT0gIjIwMCIgYW5kIHByb3RvPT0iaHR0cDoiOgogICAgICAgICAgICAgICAgcmV0dXJuICJFUlJPUjogIiArIHJlY2VpdmVkWzBdLnNwbGl0KCJcXHJcXG4iKVswXQogICAgICAgICAgICByZXQ9IiIKICAgICAgICAgICAgaWYgaGVhZGVyOgogICAgICAgICAgICAgICAgcmV0Kz1yZWNlaXZlZFswXQogICAgICAgICAgICBpZiBjb250ZW50OgogICAgICAgICAgICAgICAgaWYgaGVhZGVyOgogICAgICAgICAgICAgICAgICAgIHJldCs9IlxyXG5cclxuIgogICAgICAgICAgICAgICAgcmVjZWl2ZWQucG9wKDApCiAgICAgICAgICAgICAgICByZXQrPSJcclxuXHJcbiIuam9pbihyZWNlaXZlZCkKICAgICAgICAgICAgc2VsZi5yZWN1cnNpdj0wCiAgICAgICAgICAgIHJldHVybiByZXQK'),'<10901_urllib>','exec'))"|""|0|0|0|0
                    
                    ## Klasse auf SN[1]
                    5012|0|"EI"|"KNXUF_urllib(self)"|""|0|0|1|0
                    
                    ## Abfrage 
                    5012|0|"(EC[1] or EC[2] or EC[3] or EC[4]) and len(EN[1])>0"|"SN[1].open('http://'+EN[1]+'/admin/cgi-bin/state.cgi?fav=1',auth=EN[2]+':'+EN[3])"|""|7|0|2|0
                    
                    ## Regex als Array auf SN[3]
                    5012|0|"len(SN[2])>0"|"__import__('re').findall(r'(?s)<name>(?P<name>.*?)</name>.*?<url>(?P<url>.*?)</url>',SN[2])"|""|0|0|3|0
                    
                    ## Abbruch bei Fehler
                    #5012|1|"str(type(SN[3])).find('SRE_Match') == -1"|""|""|0|0|0|0
                    
                    ## Ausgabe
                    ## jeweils Name,URL
                    ## momentan wird der URL nicht verwendet
                    
                    #Anzahl der Favoriten ausgeben
                    5012|0|"len(SN[2])>0"|"len(SN[3])"|""|1|0|0|0
                    
                    #Wenn Array SN[3] grösser 0 dann ....
                    5012|0|"len(SN[3])>0"|"SN[3][0][0]"|""|2|0|0|0
                    #5012|0|"len(SN[3])>0"|"SN[3][0][1]"|""|2|0|0|0
                    
                    #Wenn Array SN[3] grösser 1 dann ....
                    5012|0|"len(SN[3])>1"|"SN[3][1][0]"|""|3|0|0|0
                    
                    #Wenn Array SN[3] grösser 2 dann ....
                    5012|0|"len(SN[3])>2"|"SN[3][2][0]"|""|4|0|0|0
                    
                    #Wenn Array SN[3] grösser 3 dann ....
                    5012|0|"len(SN[3])>3"|"SN[3][3][0]"|""|5|0|0|0
                    
                    #Wenn Array SN[3] grösser 4 dann ....
                    5012|0|"len(SN[3])>4"|"SN[3][4][0]"|""|6|0|0|0
                    
                    #Wenn Array SN[3] grösser 5 dann ....
                    5012|0|"len(SN[3])>5"|"SN[3][5][0]"|""|7|0|0|0
                    Ab jetzt nur noch Feinarbeit...
                    Mein Python Verständnis wird langsam besser ;-)

                    Danke Nils

                    Gute Nacht

                    Kommentar


                      #11
                      Zitat von woda Beitrag anzeigen
                      1. kleiner Fehler in der Urllib behoben:
                      Code:
                      if len(auth)>0:
                                          sock.send("Authorization: Basic "+auth.encode('base64')+"\r\n")
                      ersetzt durch:
                      Code:
                      if len(auth)>0:
                                          sock.send("Authorization: Basic "+__import__('base64').encodestring(auth)+"\r\n")
                      sorry das hatte ich beim Telefonbuchbaustein auch gerade bemerkt das die String encode/decode Funktionen nicht auf dem HS funktionieren. Ich hatte jedoch vergessen wo ich das in letzter Zeit noch in der Form eingebaut hatte. Hier war das also
                      Nils

                      aktuelle Bausteine:
                      BusAufsicht - ServiceCheck - Pushover - HS-Insight

                      Kommentar


                        #12
                        Eigentlich find ichs sogar gut, so konnte (musste) ich wieder was dazulernen!

                        Kommentar

                        Lädt...
                        X