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

  • woda
    antwortet
    Eigentlich find ichs sogar gut, so konnte (musste) ich wieder was dazulernen!

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    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

    Einen Kommentar schreiben:


  • woda
    antwortet
    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

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    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

    Einen Kommentar schreiben:


  • woda
    antwortet
    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]

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    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

    Einen Kommentar schreiben:


  • woda
    antwortet
    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?

    Einen Kommentar schreiben:


  • woda
    antwortet
    einfach der Hammer!!

    Danke Nils

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    So hier ist die urllib mit auth.

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

    Einen Kommentar schreiben:


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

    Gruß Wolfgang

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    Ja hab ich nicht drin, wenn du ein bisschen Zeit hast bau ichs am Montag ein.

    Einen Kommentar schreiben:


  • - √ - 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
Lädt...
X