HTTPMOD und callmebot set Problem

Begonnen von ahermann86, 29 Juni 2021, 13:03:36

Vorheriges Thema - Nächstes Thema

ahermann86

Hallo,

ich versuche über 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

StefanStrobel

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

loescher

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.

ahermann86

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

loescher

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.