RAPIDSMS APP

Bonsoir  je suis un peu insomniaque aujourd’hui alors je vais parler de RAPIDSMS 😉

RAPIDSMS est un framework applicatif de UNICEF  permettant de développer des applications SMS essentiellement .

Cependant RAPIDSMS peut aussi faire EMAIL , IRC , KANNEL  , Bref vous pouvez  programmer n’ importe quel Backend .

L’application que je vais programmer est inspirée  par le Séminaire WARA (West African Research Association)

Par ce cas pratique , l’application  RAPIDSMS que j’appellerai (waraseminaire)  permettra de créer un système d’ enregistrement des

présentations du séminaire  .Également La possibilité de consulter les présentations sera traitée .

Vous pouvez  télécharger le code source de cette application sur mon compte github

http://github.com/aliounedia/rapidsms-senegal/tree/master/apps/wara

ou  faire un clone

http://github.com/aliounedia/rapidsms-senegal.git

1 . Installation de  RAPIDSMS

~$ git clone git://github.com/rapidsms/rapidsms.git
~$ cd rapidsms
~rapidsms$

2 .Firing UP RAPIDSMS

~rapidsms$ python rapidsms syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
Creating table httptester_message
Creating table locations_locationtype
Creating table locations_location
Creating table patterns_pattern
Creating table reporters_role
Creating table reporters_reportergroup
Creating table reporters_reporter
Creating table reporters_persistantbackend
Creating table reporters_persistantconnection
Creating table logger_incomingmessage
Creating table logger_outgoingmessage

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no):

3 .Creating new Application

~rapidsms$ python rapidsms startapp mileage
Don't forget to add 'mileage' to your rapidsms.ini apps.
~rapidsms$

C’est fini on peut maintenant commencer a écrire la logique  de notre application:)

4 .Editer le fichier app.py  avec le code suivant :

C’est ce fichier qui contient la logique métier de votre application .Lorsque le Backend GSM lit un SMS du modem ,

il parse ce fichier et exécute les  méthodes  handle , parse  ,…

import rapidsms
from rapidsms.parsers.keyworder import *
import models as m
import time
from datetime import datetime
from time import localtime
class App (rapidsms.app.App):
    kw = Keyworder ()
    def start (self):
        """Configure your app in the start phase."""
        pass
    def parse (self, message):
        """Parse and annotate messages in the parse phase."""
        pass
    def handle (self, message):
        """Add your main application logic in the handle phase."""
        # pass
        try:
           function , captures = self.kw.match (self, message.text)
           function (self,message ,*captures)
        except Exception , e:
            message.respond ("Invalid commande : wara theme [theme]  date [date] ")
    @kw("help")
    def help (message):
        message.respond ("wara theme <theme> date <jour mois>")
    @kw("wara theme (.+) date (\d\d? \d\d?)")
    def add_presentation (self , message , theme , date):
	"""
	Ajouter un nouveau presentateur au seminaire
	"""
        try:
	    jr  , hr  =tuple(date.split())
            an ,mois = localtime ()[0], localtime()[1]
            m.Seminaire.objects.create\
            (theme=theme , phone =message.connection.identity,
                    date=datetime (int (an),int (mois),int (jr),int (hr)))
            message.respond ("Merci d'avoir proposer un theme  au seminaire ,\
                    tapez [wara themes] pour la liste")
            return True
        except Exception , e:
            print "Exception"
            print e
    @kw ("wara themes|warathemes")
    def _get_wara_themes (self , message , *args):
        """
	Lister tous les themes proposes lors du seminaire WARA
        (WEST AFRICAN RESEARCH )
	"""
        def to_str(el):
            return  "[Presentation: %s ,Date : le %s a %s Heures]"%\
                        (el.theme  ,el.date.day ,  el.date.hour)
        def _get_presentation (old_list , given_el):
             try:
                   item  =old_list [-1]
                   new_given  = to_str (item) + given_el
                   if len (new_given)>= 140:
                        return given_el
                   else :
                        old_list.pop ()
                        return  new_given
             except Exception , e:
                print "Into _get_presentation"
                print  e
                return  given_el
        seminaires  = m.Seminaire.objects.all ()
        if not seminaires  or len (seminaires)==0:
            message.respond  ("Aucun seminaire pour le  moment")
            return
        # We got some presentations into data base
        seminaires  = list (seminaires)
        given_el    =  seminaires.pop ()
        given_el    = to_str (given_el)
        while True :
            try:
                output_el  =_get_presentation (seminaires , given_el)
                # Good message size
                if  output_el  == given_el:
                    message.respond(output_el)
                    given_el  =to_str (seminaires.pop ())
                    time.sleep (10)
                else :
                     given_el =output_el
            except Exception , e :
                print  e
                break 

    def cleanup (self, message):
        """Perform any clean up after all handlers have run in the
        cleanup phase."""
        pass
    def outgoing (self, message):
        """Handle outgoing message notifications."""
        pass
    def stop (self):
        """Perform global app cleanup when the application is stopped."""
        pass

5.Editer le fichier models.py

C’est votre model de données ,exactement comme sous DJANGO , en fait RAPIDMS enveloppe DJANGO

from django.db import models
from time import localtime
from datetime import datetime
# Create your Django models here, if you need them.
class Seminaire(models.Model):
    """
    Model to Store all communication
    """
    phone = models.CharField (max_length =160)
    theme = models.CharField (max_length =160)
    date = models.DateTimeField ()
    def __unicode__(self):
        return (" %s:%s:%s "%(self.phone  , self.theme , self.date))

5.Screenshot:

Ce diaporama nécessite JavaScript.


Voici le resultat obtenu  avec le WEB UI Interface

Vous pouvez brancher votre modem (Mutlitech s’il vous plait  ; ) ) et  laisser votre systeme tourner 😉

app.py
import rapidsms
from rapidsms.parsers.keyworder import *
import models as m
import time
from datetime import datetime
from time import localtime

class App (rapidsms.app.App):
kw = Keyworder ()
def start (self):
«  » »Configure your app in the start phase. » » »
pass

def parse (self, message):
«  » »Parse and annotate messages in the parse phase. » » »
pass

def handle (self, message):
«  » »Add your main application logic in the handle phase. » » »
# pass
try:
function , captures = self.kw.match (self, message.text)
function (self,message ,*captures)
except Exception , e:
print « Exception when handling message »
print e

@kw(« help »)
def help (message):
message.respond (« wara theme <theme> date <jour mois> »)

@kw(« wara theme (.+) date (\d\d? \d\d?) »)
def add_presentation (self , message , theme , date):
«  » »
Ajouter un nouveau presentateur au seminaire
1,1          Haut

Publicités

0 Responses to “RAPIDSMS APP”



  1. Laisser un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s





%d blogueurs aiment cette page :