Das Schweizer Sackmesser der String-Analyse und Verarbeitung.
str = "ananas and bananas" if str =~ /a.a/ puts "match't" else puts "kein Match" end
scan liefert ein Array, das für jeden Match den enstprechenden String enthält (wenn keine Gruppen in der RegEx sind), oder für jeden Match ein Array mit allen Gruppenmatches.
str = "pineapple and bananas" p str.scan(/a./) p str.scan(/a(.)/)
gsub ersetzt jeden Match mit dem angegeben String. Gruppenmatches können mit “\\1” etc. verwendet werden.
gsub ohne ! modifiziert den String nicht und liefert einen neuen String. gsub! (mit !) modifizert den String und liefert diesen als Resultat, ausser wenn kein Match vorliegt wird nil zurückgeliefert.
str = "pineapple and bananas" p str.gsub(/a./, "vx") p str.gsub(/a(.)/,"a->\\1<-")
Nach gsub kann zusätzlich ein Block folgen, der als Parameter den aktuellen match (als String) bekommt. Dieser wird durch das Resultat vom Block ersetzt. Beispiel:
str = "pineapple and bananas" p str.gsub(/a./){|m| m[0]+m[1].upcase }
Ziel: Englische Sätze von der Ich- in die Du-Form umschreiben mittels Regular Expressions. Beispiele:
Dateien vom Donnerstag 17.11. (bräuchten noch ein bisschen Arbeit):
Das curl-Kommando muss jetzt noch ein bisschen angepasst werden, damit die Cookies gespeichert und wiederverwendet werden:
-L -b nesa-cookies.txt -c nesa-cookies.txt
hinzu. Damit werden Umleitungen automatisch verfolgt und Cookies von der Datei nesa-cookies.txt gelesen und neue wieder dort gespeichert.Im login-Formular ist ein Hash, der beim login mitgesendet werden muss (damit werden wohl auch Timeouts festgestellt). Diesen gilt es zu extrahieren:
startseite = `bash startseite.curl`.force_encoding("ISO-8859-1").encode("UTF-8") puts startseite # loginhash=startseite.scan(/..../)[0][0] # FIXME puts "-> HASH <-" puts loginhash
logincurl = File.read("login.curl") puts logincurl # logincurl.gsub!(.....) # FIXME puts logincurl # ACHTUNG: Enthält ihr Passwort (eventuell durch regex rausfiltern). # Erste Seite nach login herunterladen nesaseite = `#{loginseite}`
Zusammengefasst als Funktion (liefert erste Seite nach Login):
def getStartPage `rm nesa-cookies.txt` startseite = `bash startseite.curl`.force_encoding("ISO-8859-1").encode("UTF-8") # input type="hidden" value="a68ae62b0e4ffd730c315e37f50d0d5d" name="loginhash" loginhash=startseite.scan(/value="([0-9a-f]+)"\s+name="loginhash"/)[0][0] curllogin=File.read("login.curl") curllogin.gsub!(/loginhash=([^']+)'/,"loginhash=#{loginhash}'") `#{curllogin}`.force_encoding("ISO-8859-1").encode("UTF-8") end
Nach erfolgreichem Login muss die Seite nach den gewünschten Links abgesucht werden:
Zeichnen Sie dann einen beliebigen Seitenzugriff auf und kopieren sie das curl-Kommando, modifizieren Sie es wie oben und ersetzen die URL durch z.B. 'mypage'. Dieser String wird dann durch die gewünschte URL ersetzt.