PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SMS aus der Kommandozeile, oder als CGI



dumm'
24.10.2003, 14:44
moin,

vielleicht hat ja jemand Lust dabei mitzumachen. Das Programm an sich existiert schon (ohne CGI Unterstuetzung). Allerdings noch nicht mit allen Funktionen und Features, die es haben sollte. Eine ausgekluegeltere Fehlerkontrolle haette sich die Software auch verdient.

Wie das ganze Funktioniert ist simpel. Man nehme einen SMS Dienst (bei mir sms3000.de) und automatisiere die Formulare. Fertig! :) Schicke dann alles ueber eine geeignete HTTP Schnittstelle (libCURL) an den Herkunftsort zurueck und kontrolliere ob die SMS versendet wurde.

Wer jetzt glaubt das ganze sei umsonst ... schade! Ist es leider nicht. Die Nachrichten kosten je nach Leistung zwischen 3,9 und 10,4 Cent. Deshalb sollte man schon beim Programmieren darauf achten moeglichst keine Fehler zu machen. ;o)

An Funktionen hat das Programm ein paar wenige parat, neben den notwendigen zum Verschicken von SMS. Suchen eines Teilnamens aus dem Online Adressbuch beispielsweise. Ausgeben des Kontostandes, ... . Fehlen tuen noch Funktionen fuer Textkontraktionen (Kein Leerzeichen nach Komas, "..." durch ".." ersetzen, "en" durch "n" am Ende von Woertern wie "ersetzn" ersetzen, ... praktische Dinge halt, die man sonst laesstig von Hand taetigt).

Der Code ist in C fuer *x. Verwendet regex's, GNU extensions und die libCURL. Nur falls jetzt jemand daran denkt das Ganze fuer WIn32 zu portieren.
Vielleicht ist der Code nicht der uebersichtlichste, ABER ich sehe ihn mehr als Prototyp an, zum Testen von Routinen und um zu sehen, was alles in ein solches Programm implementiert werden muss. Was der Nutzer gebrauchen kann und was nicht. Was Funktioniert, was ausreicht um das Ziel zu erreichen und um zu sehen, was Schnick-Schnack ist. :)

Den Code gibt's unter http://www.webreeze.de/temp/sms_if.tar.gz (sms_if: SMS Interface)

Eine Beispielausgabe waere


stefan@blackbox:~/sms_if$ ./sms3k --user=xx --pass=xx -abook -amount -uid --rcpt=bolus
[abook] Empfaenger: Bolus, himself [00491xx]
Die SMS geht an die Nummer 004917xx.
Die SMS wurde(n) versendet. Ihre Guthaben betraegt nun EUR 0.981 (-0.064 EUR)
Ihr Guthaben betraegt 0.981 EUR
Ihre Benutzer-ID ist 100xx
Inhalt des Adressbuchs:
x, Rene : 004917xx
x, Stephanie : 004917xx
x, Sarah : 0049162xx
x, Steffen : 004916xx
D., J. : 00491707xx
x, Chrsitian : 004917xx
x, PS : 00491xx
Bolus, himself : 0049179xx
...


Kompilieren des Codes ueber


gcc ab.c http.c main.c sms3k.c validate_service.c -lcurl -o sms3k


Ich schreibe an dem Programm nebenbei. Habe letztes Wochenende damit begonnen. Ziel soll sein ein zuverlaessiges SMS Interface fuer den Einsatz in der Kommandozeilenumgebeung fuer Shell-Scripts und vorallem CGI's zu schaffen. Ein EInsatzgebiet koennte sein eine SMS beim Eingang einer wichtigen email zu sein, oder generell ueber das Eintreffen von emails hinzuweisen fuer Personen, die ihre Mailbox nur unregelmaessig abrufen.

stefan.bolus{at}gmx{dot}de

PS. Falls jemand einen guten, und zuverlaessigen, nebenbei moeglichst guenstigen SMS Service kennt, bitte auch schreiben, oder posten! ;)

mfg

dumm'
25.10.2003, 12:05
.___ggggggw___. .._._._._.__ _._._._._._,_ .__gggggg___.,
_auY!""^-^`||:}?+q2')m"""""""""!{C: .we""""""""!{ZN .gwI??""--^+|i:?9xZP
jP^ qu??!!!?!"^ )Xp: )k`jd!' :.uZ'.jZ!' _u7?!!!?!!~
4w, )mp ]z jk_d( _d!` ]$p, ]Xa,
"?qp,.. -?Sa, ]mc : uw,: +MM' .wu> :_xZ'. -?Sa, . -"Sa,:
-"?qa. "Sp -Xc )xWn, _QxQ%( _w!' -?5ap -4a,
., -"A/ jd( )hc ]o23p. .J!Qzf.gZ". _.. ?9c .ae'
)Znaa2!`._w2' ]$f.jZ>)o, qm(jZP.uY`. =X1aauY' _ad!
)SagggaaY!^ ]baae=)#aaY`jdoad( 3aaggga2?~
:. -:


SMS Interface for sms3000.de
Build: Sat Oct 25 17:23:40 CEST 2003

Usage:
./sms [actions] [options] username password number
./sms [actions] [options] -authfile=filename number

Sollten 'number' und gleichzeitig die -rcpt Option gegeben sein,
wird automatisch ein neuer Eintrag im Adressbuch getaetigt.

'number' muss nicht gegeben sein, wenn stattdessen ein Teil des
Empfaengernamens ueber die -rcpt Option angegeben wird.

SMS3000.de Optionen:
-anonymous Absendernummer wird durch 3000 ersetzt
-sender-id=text Statt der Nummer wird der angegebene Text gesendet
-scheduled=date Die SMS wird erst am angegebenen Termin gesendet
-class=class Der gewaehlte Dienst, ueber den SMS3000 die SMS
sendet. Genaueres dazu in der README.

allgemeine Optionen:
-authfile=file Statt den Benutzernamen und das Passwort in der
Kommandozeile anzugeben, werden die beiden Werte
aus der angegebenen Datei gelesen.
-rcpt=empfaenger Teilstring des Empfaengernames. Kann statt der
Nummer angegeben werden, wobei die Nummer dann
ueber den String aus dem Adressbuch ermittelt wird.
Sind Nummer und diese Option gegeben, wird ein
neuer Eintrag im Adressbuch erstellt. (off)

User-Interface Optionen:
-file=file Die SMS Nachricht wird statt von stdin aus der
angegebenen Datei gelesen.
-verbose Anzeigen, was das Programm gerade tut.

Nachrichten-Text Optionen:
-rtrim Leerzeichen vom Ende der Nachricht loeschen.
-no-padding Leerzeichen nach Interpunktionszeichen loeschen.
-no-repeats Wiederholungen von Leerzeichen durch nur ein
Leerzeichen ersetzen.
-ellipses Verkuerzt "..[.]+" auf "..".
-en-suffixes Ersetzt "[^n]en" Wortendungen durch "[^n]n".
-to-upper Wandelt den ersten Buchstaben eines Wortes nach
einem ".?!" und dazwischenliegenden Leerzeichen
in einen Grossbuchstaben um.
-force-overlen Die verkuerzenden Routinen werden auch benutzt,
wenn der Nachrichten-Text kleiner als 160 Zeichen,
oder ein Vielfaches davon ist.

Aktionen:
-amount Gibt den aktuellen Kontostand aus
-uid Gibt die SMS3000.de User ID aus
-no-sms Es wird keine SMS versendet, und somit auch keine
SMS Nachricht erwartet.
-abook Gibt den Inhalt des Adressbuchs aus. Zur Zeit
jedoch nur, sollte eine SMS versendet werden.
-help Gibt diese Formschoene Hilfe aus.

Dies ist Open Source Software!
Bei Problemen, Ideen oder allem anderen in Bezug auf die Software
bitte eine email an den Autor, Stefan Bolus, schreiben.
stefan.bolus<at>gmx<dot>de




Leider haben die Leute von sms3000 es noch nicht hinbekommen mein Konto aufzuladen. :D



stefan@blackbox:~/sms_if$ ./sms -no-sms -authfile=bolus.auth -amount -verbose
Login fuer Benutzer bolus ...
Ihr Guthaben betraegt 0.661 EUR
Logout ...


mfg

smalltalk
26.10.2003, 12:52
sms.at is gratis wennst gereggt bist, und man kann afaik auch nach .de sms schicken. :) ansonsten find ich das prog ansich klass.

:blahblah:

dumm'
26.10.2003, 16:13
moin,

danke fuer die idee, aber leider versendet sms.at nur ins oesterreichische netz. in frage gekommen waere in der hinsicht auch sms.de (1e free-sms am tag, 8 im monat), allerdings werden sms dort mit einer absendernummer von sms.de getaetigt, was heisst, das auch antworten leider nur ueber das web interface entgegengenommen werden koennen.

von den unverschaemten preise fuer sms von 8 cent mal ganz abgesehen. :)

mfg

mkeeper
26.10.2003, 21:20
sms.at is gratis wennst gereggt bist, und man kann afaik auch nach .de sms schicken. ansonsten find ich das prog ansich klass.

Versuch mal eine Sms von sms.at nach de zu schicken. ;)

Es geht zwar, ist aber nicht kostenlos.

Um nur ¤ 0,04.-/Stück* können Sie weitere SMS erwerben

Aber dafür ist es nicht teuer.

Aber man kann nicht seine SmS-Nr. reinschreiben, und schon garnicht per cgi abfragen.

Man benötigt wieder das interface.

dumm'
31.10.2003, 16:41
HTML-entities (&uuml;, ... ) werden nun ersetzt. Besonders sinnvoll, wenn man eine Tastatur hat, die keine deutschen Umlaute kennt, weil man ansonsten wertvolle Buchstaben durch ue, ae, ... verschenkt. :o)



-entities Ersetzt HTML-entities (&...;) durch die entsprechenden
ASCII Zeichen im Nachrichten-Text. Siehe auch
-entities-help fuer die Unterstuetztten HTML-entities.
...
-entities-help Zeigt alle unterstuetzten HTML-entities an.




stefan@blackbox:~/sms_if$ ./sms -entities-help
Unterstuetzte HTML-entities:

nbsp - | iexcl - ¡ | cent - ¢ | pound - £ |
curren - &#164; | yen - ¥ | brvbar - &#166; | sect - § |
uml - &#168; | copy - © | ordf - ª | laquo - « |
not - ¬ | shy - _ | reg - ® | macr - ¯ |
deg - ° | plusmn - ± | sup2 - ² | sup3 - ³ |
acute - &#180; | micro - µ | para - ¶ | middot - · |
cedil - &#184; | sup1 - ¹ | ordm - º | raquo - » |
frac14 - &#188; | frac12 - &#189; | frac34 - &#190; | iquest - ¿ |
Agrave - À | Aacute - Á | Acirc - Â | Atilde - Ã |
Auml - Ä | Aring - Å | AElig - Æ | Ccedil - Ç |
Egrave - È | Eacute - É | Ecirc - Ê | Euml - Ë |
Igrave - Ì | Iacute - Í | Icirc - Î | Iuml - Ï |
ETH - Ð | Ntilde - Ñ | Ograve - Ò | Oacute - Ó |
Ocirc - Ô | Otilde - Õ | Ouml - Ö | times - × |
Oslash - Ø | Ugrave - Ù | Uacute - Ú | Ucirc - Û |
Uuml - Ü | Yacute - Ý | THORN - Þ | szlig - ß |
agrave - à | aacute - á | acirc - â | atilde - ã |
auml - ä | aring - å | aelig - æ | ccedil - ç |
egrave - è | eacute - é | ecirc - ê | euml - ë |
igrave - ì | iacute - í | icirc - î | iuml - ï |
eth - ð | ntilde - ñ | ograve - ò | oacute - ó |
ocirc - ô | otilde - õ | ouml - ö | divide - ÷ |
oslash - ø | ugrave - ù | uacute - ú | ucirc - û |
uuml - ü | yacute - ý | thorn - þ | yuml - ÿ |


Naechster Schritt ist dann jetzt eine sinnvolle(re) Logik in die Optionen zu bringen. Manchmal weiss selbst ich nicht, was bei bestimmten Kombinationen passiert. :o)

Source Code gibt es dann im Anschluss. Spaetestens aber Morgen mittag.

mfg

dumm'
01.11.2003, 23:16
Und es waechst und waechst.

Wie man Optionen und Aktionen design'd. ;o)
http://sms.webreeze.de/options.gif



stefan@blackbox:~/sms_if$ ./sms -h

.___ggggggw___. .._._._._.__ _._._._._._,_ .__gggggg___.,
_auY!""^-^`||:}?+q2')m"""""""""!{C: .we""""""""!{ZN .gwI??""--^+|i:?9xZP
jP^ qu??!!!?!"^ )Xp: )k`jd!' :.uZ'.jZ!' _u7?!!!?!!~
4w, )mp ]z jk_d( _d!` ]$p, ]Xa,
"?qp,.. -?Sa, ]mc : uw,: +MM' .wu> :_xZ'. -?Sa, . -"Sa,:
-"?qa. "Sp -Xc )xWn, _QxQ%( _w!' -?5ap -4a,
., -"A/ jd( )hc ]o23p. .J!Qzf.gZ". _.. ?9c .ae'
)Znaa2!`._w2' ]$f.jZ>)o, qm(jZP.uY`. =X1aauY' _ad!
)SagggaaY!^ ]baae=)#aaY`jdoad( 3aaggga2?~
:. -:


SMS Interface for sms3000.de
Build: Sat Nov 1 23:58:01 CET 2003

Usage:
sms -send [SMS3000 -Optionen] [-verbose]
-file=msg-file OR -msg=msg OR "wird von STDIN gelesen"
[Nachrichten-Text -Optionen]
-auth=auth-file OR ( -user=username AND -pass=passwd )
-rcpt=rcpt-name OR -nr=number

sms -amount OR -abook OR -uid [-verbose]
-auth=auth-file OR ( -user=username AND -pass=passwd )

sms -preview [-verbose]
-file=msg-file OR -msg=msg OR "wird von STDIN gelesen"
[Nachrichten-Text -Optionen]

sms -help OR -entities-help


Aktionen koennen miteinander verbunden werden. So kann eine
Kombination aus ...

sms -send -abook -preview ...

... sowohl eine SMS versenden, als auch das Adressbuch und den
veraenderten Nachrichten-Text anzeigen. Es muessen entsprechend
den Aktionen alle noetigen Optionen gegeben sein.

SMS3000.de Optionen:
-anonymous Absendernummer wird durch 3000 ersetzt
-sender-id=text Statt der Nummer wird der angegebene Text gesendet
-scheduled=date Die SMS wird erst am angegebenen Termin gesendet
-class=class Der gewaehlte Dienst, ueber den SMS3000 die SMS
sendet. Genaueres dazu in der README.

allgemeine Optionen:
-authfile=file Statt den Benutzernamen und das Passwort in der
Kommandozeile anzugeben, werden die beiden Werte
aus der angegebenen Datei gelesen.
-user=username Benutzername des SMS3000 Accounts
-pass=passwd Passwort fuer den angegebenen Account
-rcpt=empfaenger Teilstring des Empfaengernames. Kann statt der
Nummer angegeben werden, wobei die Nummer dann
ueber den String aus dem Adressbuch ermittelt wird.
Sind Nummer und diese Option gegeben, wird ein
neuer Eintrag im Adressbuch erstellt. (off)

User-Interface Optionen:
-file=file Die SMS Nachricht wird statt von stdin aus der
angegebenen Datei gelesen.
-msg=msg 'msg' wird als SMS Nachricht verwendet.
-verbose Anzeigen, was das Programm gerade tut.

Nachrichten-Text Optionen:
-rtrim Leerzeichen vom Ende der Nachricht loeschen.
-no-padding Leerzeichen nach Interpunktionszeichen loeschen.
-no-repeats Wiederholungen von Leerzeichen durch nur ein
Leerzeichen ersetzen.
-ellipses Verkuerzt "..[.]+" auf "..".
-en-suffixes Ersetzt "[^n]en" Wortendungen durch "[^n]n".
-to-upper Wandelt den ersten Buchstaben eines Wortes nach
einem ".?!" und dazwischenliegenden Leerzeichen
in einen Grossbuchstaben um.
-force-overlen Die verkuerzenden Routinen werden auch benutzt,
wenn der Nachrichten-Text kleiner als 160 Zeichen,
oder ein Vielfaches davon ist.
-entities Ersetzt HTML-entities (&...;) durch die entsprechenden
ASCII Zeichen im Nachrichten-Text. Siehe auch
-entities-help fuer die Unterstuetztten HTML-entities.
-abbrev=file Abkuerzungen in der Datei 'file', werden im Nachrichten-
Text ersetzt.

Aktionen:
-amount Gibt den aktuellen Kontostand aus
-uid Gibt die SMS3000.de User ID aus
-send Es soll eine SMS versendet werden.
-preview Den Nachrichten-Text durch die angegebenen Routinen laufen
lassen und das Ergebnis ausgeben.
-abook Gibt den Inhalt des Adressbuchs aus. Zur Zeit
jedoch nur, sollte eine SMS versendet werden.
-help Gibt diese Formschoene Hilfe aus.
-entities-help Zeigt alle unterstuetzten HTML-entities an.

Dies ist Open Source Software!
Bei Problemen, Ideen oder allem anderen in Bezug auf die Software
bitte eine email an den Autor, Stefan Bolus, schreiben.
stefan.bolus<at>gmx<dot>de



mfg

Number of the Beast
02.11.2003, 22:22
Es gibt doch noch ein paar FreeSMS Seiten, bei denen es so läuft, dass man zum Beispiel ab 18 Uhr gratis SMSs versenden kann. Allerdings geht das nur so lange bis das Kontingent des Betreibers ausgeschöpft ist. SPrich nach 5 Minuten ist der Dienst wieder dicht.
Wär doch ganz nett, wenn dein Programm sowas noch unterstützen würde. Also man schreibt irgendwann einfach ne SMS und das Programm verbindet sich dann genau um 18 Uhr mit diesem Provider und versucht die SMS abzuschicken.

harl
17.12.2003, 21:46
Hi,

ich will mich da nicht registrieren, aber ich hab grad kurz den Source geparsed und mir sind einige Dinge aufgefallen:

Das Banner ist prollig.

Die regexp scheinen mir nicht sehr, sagen wir mal "standfest". Ich spare mir etwaige Zitate, deine Kommentare kennst Du selber :D
Hast Du eventuell schon über den Einstatz von pcre [1] nachgedacht?

Desweiteren würde ich an deiner Stelle zusätzlich HTTP Statuscodes
auswerten, wo Du eh schon dabei bist. //edit, zu schnell geschrien - curl ist toll ;)

Für zusätzliche Anbietermodule würde ich in jedem Fall ein allgemeingültiges Ablaufprofil erstellen und auf eine Propertiedatei zugreifen (Abmelden,Adressbuch, Login, Senden,etc.).

Alles in allem schön runterprogrammiert, wie man es von Dir kennt.

Grüße,

harl.

[1] www.pcre.org