PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SMSs aus der Shell versenden


ilute
25.10.2003, 20:18
SMS aus der Kommandozeile, oder als CGI

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)

Kompilieren des Codes ueber


make


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!


.___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


mfg


ilute
02.11.2003, 11:48
Und es waechst. ;o)


02.11.2003 - bolus

* es koennen nun Woerter durch in einer Datei angegebene Abkuerzungen ersetzt werden.
Das entsprechend zustaendige Modul dafuer ist abbrev.c .

* die Optionen und Aktionen wurden ueberarbeitet. Das senden einer SMS wird nun als
optional durch die Aktion -sms angesehen. Hinzugekommen ist die -preview Option
die es ermoeglicht veraenderungen am Text zu verfolgen, auch ohne eine SMS zu
versenden.

* es gibt nun keine Pflichtargumente mehr. Alles wird durch Optionen geregelt. Auch
wenn einige von diesen Pflicht fuer gewisse Aktionen sind, oder als Auswahl
von Moeglichkeiten von Optionen stehen.

* generelle Aenderungen in main.c !


31.10.2003 - bolus

* html entites koennen nun ersetzt werden. Das zustaendige und neu hinzugefuegte
modul ist html_entities.c .

* sollte das Adressbuch angezeigt werden sollen und es wurde keine SMS versendet,
wird nun das adressbuch geladen. also auch anzeigbar, ohne eine sms zu versenden.
dies war vorher nicht der fall.


25.10.2003 - bolus

* die Usage soweit hinzugefuegt. Sollte allerdings den laufenden Veraenderungen
des Programms und den Optionen angeglichen werden.

* sms3k_cleanup() wird automatisch beim verlassen des programms aufgerufen,
ueber einen durch on_exit() registrierte wrapper-Routine.

* Routinen fuer das Verkuerzen des Nachrichten-Textes implementiert.
Siehe dazu das dafuer erstellte Modul contract.c

* Eine Routine hinzugefuegt, welche Buchstaben am Satzanfang und am
beginn eines Strings in Grossbuchstaben umwandelt.
Siehe contract.c

* Die neuen Routinen in die Optionen und die Usage aufgenommen.


24.10.2003 - bolus

* http_post() verlangt nun eine filepointer, statt vorher einen dateinamen

* die sms3k-Routinen greifen nun nicht mehr direkt auf die http_post()
Routine zu, sondern stattdessen auf die sms3k_get_page_src()-Routine,
die direkt den Quellcode der angeforderten Datei zurueckgibt. Der Code
wird dadurch wesentlich kuerzer und klarer, da ein umfangreicher Teil
an Fehlerlogik zusammengefasst und vereinfacht wird.

* die zu verschickenden Nachrichten koennen nun ueber --file entweder aus
einer Datei ausgelesen, oder per stdin eingelesen werden, sollte keine
Datei gegeben sein.

* die ehemalige Routine zum Laden von Dateiinhaltn in den Speicher, welche zum
sms3k Modul gehoerte befindet sich nun in einem neu angelegten Modul
(misc.c) und heisst load_stream_into_mem().

* strndup() als GNU Extension hat eine eigene Implementation in misc.c
bekommen aus Gruenden der kompatiblitaert.

* die Routinen zum laden der SMS Nachricht vom Std. Eingabe Stream, oder aus
einer Datei, befinden sich in dem neu angelegten Modul sms_msg.c .

* usage geaendert. Nun sind username und passwort fix, sollte keine authfile
als Option gegeben sein (-authfile). Die Nummer ist auch fix. Sollte sie
nicht gegeben sein, muss die -rcpt Option gegeben sein, um einen
Empfaengerzu haben.

* das auslesen der authfile geschieht in dem hinzugefuegten Modul authfile.c

* das Projekt hat nun eine Makefile fuer den build. Klein und simpel, aber es
erfuellt den sinn und zweck und erspart laesstige Tipparbeit und staendiges
neukompilieren aller Module

Die Usage sieht demnach nun wie folgt aus


.___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


Umfang des Codes nun

stefan@blackbox:~/sms_if$ cat *.c *.h | wc -l
2673
stefan@blackbox:~/sms_if$ cat *.c *.h | wc -c
63007


mfg