Hallo,
ich versuche über www.callmebot.com (http://www.callmebot.com) und HTTPMOD eine Nachricht an mich zu versenden (Als Alternative zu Pushnotifier..).
Grundsätzlich funktioniert das auch so:
defmod CallMeBotAxel HTTPMOD none 0
attr CallMeBotAxel room System
attr CallMeBotAxel set01Name Msg
attr CallMeBotAxel set01TextArg 1
attr CallMeBotAxel set01URL https://api.callmebot.com/signal/send.php?phone=+49MEINENUMMER&apikey=MEINKEY&text=$val
Allerdings mit nur einem Wort. Wenn ich das über den Browser mache, muss ich zwischen die Wörter %20 einfügen.
Wie bekomme ich das mit HTTPMOD hin? Mit Regex müsste das doch gehen...
So in der Art: attr CallMeBotAxel set01Expr $val =~ s/ /%20/
Wo liegt mein Denkfehler..?
Gruß
Axel
Hallo Axel,
probier mal
attr CallMeBotAxel set01IExpr $val =~ s/\s/%20/g;; $val;
Die Option g ist wichtig, sonst wird nur ein Space ersetzt.
Das Ergebnis der Expression wir als Wert verwendet. Deshalb am Ende nochmal ;; $val.
Gruss
Stefan
Hallo Axel,
Habe gerade diesen Thread gefunden.
Einfach geniale Idee, das per HTTPMOD zu lösen!
Ich hab auch gleich noch eine Verbesserung für dich, damit nicht nur Leerzeichen korrekt codiert werden, sondern alles:
attr CallMeBotAxel set01IExpr $val = uri_escape($val);; $val;
LG,
Stephan.
Hallo Stephan,
gute Idee:
Es geht sogar noch einfacher: 8)
attr CallMeBotAxel set01IExpr uri_escape($val)
Allerdings hat deine Methode einen Haken: :-\
set CMBotAxel Msg %E2%9D%97 Windalarm erkannt!!
geht nicht mehr, da die uri_escape Funktion das daraus macht:
%25E2%259D%2597%20Windalarm%20erkannt%21%21
Deswegen bleibt meine Lösung so: ::)
attr CallMeBotAxel set01IExpr $val =~ s/\s/%20/g; $val
Gruß
Axel
Hallo Axel,
Da hast du Recht, das hatte ich nicht bedacht, dass im Input auch schon Prozent-Escapes sein können.
Aber dadurch hast du mich auf eine Lösung gebracht, die alle Fälle abdeckt:
attr CallMeBotAxel set01IExpr uri_escape(uri_unescape($val))
8)
LG,
Stephan.