envoi SMS via terminal

symbol

Membre actif
13 Octobre 2004
536
25
Bonjour

La syntaxe pour envoyer un SMS avec le terminal sur mon propre telephone (free) est

Bloc de code:
curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxxxxxx&msg=TESTTEST!" 2>&1

Est-il nécéssaire d'avoir "2>&1" a fin de la commande ?

Merci
 
Avec la commande du terminal on peut donc envoyer un SMS.

On met le texte ici -> "&msg=TESTTEST!"

J'aimerais envoyer le contenu d'un fichier texte (environ 4 lignes) a la place d'un simple message pré-inscrit, est-ce possible ?

Merci
 
Bonjour

J'ai trouvé ca :

Bloc de code:
#!/bin/bash

    # On stocke le fichier dans le buffer 3
    exec 3</Users/xxx/Desktop/RESULTATS.txt
    # On lit le buffer 3 ligne par ligne
    while read ligne 0<&3
    do
done
  
curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxx&msg="$ligne""

Mais ca envoi 1 SMS par retour de chariot :(
Soit au moins 10 SMS a la suite, au lieu d un avec tout le texte.

Aide appréciée :)

Merci
 
maintenant j'essai ca

Bloc de code:
message=`cat /Users/xxx/Desktop/RESULTATS.txt`
$message

echo -e $message


ca affiche dans le terminal

iMac-de-xxx:~ xxx$ /Users/xxx/Desktop/testlecturefichier.sh ; exit;
/Users/xxx/Desktop/testlecturefichier.sh: line 12: Vendredi: command not found
Vendredi 09 mars 2018 - Midi : ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 03 04 05 06 15 16 17 20 21 26 28 29 38 40 44 50 55 62 65 69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ tesssst RECAP du 09-03-2018 14:15:06 http://kenopronos.free-bb.eu © Tous droits réservés


pffffff :(
 
Utilise \n où tu souhaites avoir un retour à la ligne, ça fonctionne peut-être avec ta fonction
 
Dommage car
Bloc de code:
echo -e "bon\njour"
retourne bien
Bloc de code:
bon
jour
 
J'essai ca :

Bloc de code:
#!/usr/bin/env bash

message=`cat /Users/xxx/Desktop/RESULTATS.txt`
$message

echo  -e $message

 curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxx&msg=$message"

Ca me renvoi une erreur : "curl: (3) Illegal characters found in URL"
J'ai essayé aussi avec ${message}; idem

SI je met ca :
Bloc de code:
 curl -i --insecure https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxx&msg=$message

Je n'ai plus d'erreur mais je ne recois pas le SMS.
 
Dernière édition:
Recommencons depuis le début :

Comment attribuer l'intégralité du contenu d'un fichier texte (.txt) a une variable ?

Merci
 
Dernière édition:
Je ne suis pas expert en Bash, loin de là, mais quelques trucs me chiffonnent :
Bloc de code:
 https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxx&msg=$message

Il faut comprendre que cela revient (presque) à ouvrir dans le navigateur cette adresse. Sauf qu'on ne peut pas mettre n'importe quel caractère dans une adresse web.
C'est pour ça que tu as eu l'erreur suivante: "curl: (3) Illegal characters found in URL".
En général, pour éviter ça, on "pourcent échappe". C'est à dire qu'on remplace les caractères interdits par une suite de caractères avec des % pour signaler que le serveur devra les traiter différemment. Par exemple, c'est "%20" pour un espace.
Si vous tapez "https://www.apple.com/fr /test" dans Safari (notez la présence de l'espace), il le transformera en "https://www.apple.com/fr /test" une fois que vous aurez tenté d'y accéder. Bon, ce lien ne mène nulle part vraiment, mais c'est pour l'exemple.



Ensuite, je ne suis pas familier avec curl, les paramètres (user, pass, msg et leurs valeurs respectives) peuvent sûrement être passé en paramètres de curl sans avoir à concaténer.

Enfin, les adresses Web on une certaine limite en taille, donc l'URL formée avec $message ne peut être "infiniment grande", il doit avoir une limite de taille à ne pas dépasser.

Edit: J'ai trouvé ceci :
C'est exactement ce qu'utilise ce lien pour le %20:
msg : le contenu du SMS encodé sous forme d’url (Percent-encoding)

Et aussi le fait qu'on puisse utiliser du POST plutôt que du GET (et là, c'est bien mieux).
Vous pouvez également, si vous le préférez, envoyer les paramètres en POST. Dans ce cas, le contenu du message n’a pas besoin d’être encodé.
Donc pas la peine de faire des % escape sur $message dans ce cas-là !

Je conseillerais donc de faire la recherche suivante :
"cURL + JSON + POST" dans ton moteur de recherche préféré, tu devrais trouver des réponses pour ça.
 
Dernière édition:
Merci de ta réponse.

Quand j'envoi un SMS avec
Bloc de code:
curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxx&msg=${affichagedate}%0d%0a${barre}%0d%0a${winningNumbers}%0d%0a%0d%0aRECAP du `date '+%d-%m-%Y %H:%M:%S'`%0d%0a${copyright}"

ca me donne sur mon telephone :
android.jpg

C'est donc que l'on poster des messages longs sans "%20".
Je pense que joindre le contenu d'un fichier texte, devrait marcher.


MAJ :
J'ai fait un nouveau test.
L'erreur de "curl: (3) Illegal characters found in URL" vient de la fin de ligne qui se trouve dans mon fichier texte (que j'envoi)

SI j'envoi un texte constitué d'une seule ligne (456 caracteres) ca passe.

Donc, la question devient : Faut-il ajouter une sorte de retour chariot spécial dans le texte ou dans la commande cURL ?

MAJ 2 :
Pour faire un saut de ligne, il faut ajouter "%0D%0A" quand on veut un retour chariot.

exemple : lundi%0D%0Amardi%0D%0Amercredi%0D%0A

SMS recu donnera :
lundi
mardi
mercredi
 
Dernière édition:
Un script déjà pondu qui fonctionne :

https://github.com/C-Duv/freemobile-smsapi-client

En gros, il faut convertir les \n du message en \r

Et plutôt que de former l'url à la main (?user=...&pass=...), utiliser l'argument --data de curl pour chaque paramètre à passer à l'url "sendmsg", curl s'occupera alors tout seul d'encoder chaque paramètre dans l'url au bon format qui va bien.
 
oui, j'ai lancé le script, ca donne

Bloc de code:
iMac-de-xxx:~ xxx$ /Users/xxx/Desktop/smstest.sh ; exit;
readlink: illegal option -- m
usage: readlink [-n] [file ...]

N'oubliez pas qu'il a encore 15 jours, je n'avais jamais touché au terminal !
Je suis hyper débutant :)
 
oui, j'ai lancé le script, ca donne

Bloc de code:
iMac-de-xxx:~ xxx$ /Users/xxx/Desktop/smstest.sh ; exit;
readlink: illegal option -- m
usage: readlink [-n] [file ...]

Grrr, foutue option -m de readlink pas dispo sur mac.

Remplace la ligne 15 :
Bloc de code:
readonly PROGDIR=$(readlink -m $(dirname $0))
par
Bloc de code:
readonly PROGDIR=$(dirname $0)
et relance le script pour voir.


J'ai pas de mac sous la main pour vérifier moi-même, désolé.
 
MAj : bon, j'ai reussi a envoyer mon SMS avec le texte formaté correctement . Ouf !

Pour ca, je fais une sortie > monfichier.txt, puis ajouté "%0D%0A" entre les variables.
Du coup, tout le contenu de mon fichier texte 'monfichier.txt' se retrouve sur 1 seule ligne.

A la fin de l'unique ligne, je dois aussi retirer la fin de ligne (sinon ca me fait une erreur quand j'envoi le SMS), j'ai pour ca fait :
Bloc de code:
tr -d '\n' < monfichier.txt > monfichier2.txt

Je passe de

Bloc de code:
Lundi 12 mars 2018 - Midi :%0D%0A--------------------------------%0D%0A03 07 11 15 16 25 26 28 31 32 33 34 42 51 52 55 57 59 61 63%0D%0A--------------------------------%0D%0A
%0D%0ATEST X1 :  03-07-11-15
%0D%0A 4/4     50€X1    >> 50 € <<%0D%0A--------------------------------
%0D%0AJEF X1 :  03-11-16-24-25-28-42-53-59-62
%0D%0A 7/10     15€X1    >> 15 € <<%0D%0A--------------------------------
%0D%0AJEF X1 :  11-16-17-18-24-28-35-42-52
%0D%0A 5/9     2€X1    >> 2 € <<%0D%0A--------------------------------

a
Bloc de code:
Lundi 12 mars 2018 - Midi :%0D%0A--------------------------------%0D%0A03 07 11 15 16 25 26 28 31 32 33 34 42 51 52 55 57 59 61 63%0D%0A--------------------------------%0D%0A%0D%0ATEST X1 :  03-07-11-15%0D%0A 4/4     50€X1    >> 50 € <<%0D%0A--------------------------------%0D%0AJEF X1 :  03-11-16-24-25-28-42-53-59-62%0D%0A 7/10     15€X1    >> 15 € <<%0D%0A--------------------------------%0D%0AJEF X1 :  11-16-17-18-24-28-35-42-52%0D%0A 5/9     2€X1    >> 2 € <<%0D%0A--------------------------------


pour finir j'envoi le SMS avec

Bloc de code:
 curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=01231456789&pass=xxxxxxxxxxx&msg=${RESULTATSSMS}"

Sans oublier de mettre cette commande dans le .sh qui génère les résultats.
Bloc de code:
RESULTATSSMS=`cat /Users/xxx/Desktop/monfichier.txt`