^p^‎ > ‎

Bramka SMS na Asterisk

opublikowane: 5 kwi 2013, 01:40 przez Piotr Trochymiak   [ zaktualizowane 30 lis 2017, 16:42 ]
coś strona nie działa wiec załaduje wszytko co miałem w keszu

Bramka SMS od Google

Autor: nme · sobota, 1 Sierpień, 2009 · 3 komentarzy · Tagi: dev, gsm, net, python  

Oficjalnie Google takiej usługi przynajmniej w Polsce nie udostępnia. Można to jednak osiągnąć w sposób pośredni, który chciałbym dzisiaj przedstawić. Jest bardzo prawdopodobne, że już niebawem, stosowanie takich rozwiązań będzie zbędne, bo ceny usług transmisji danych tanieją, a telefony swoją funkcjonalnością przypominają coraz bardziej PDA.

Spośród aplikacji Google, powiadomienia SMS na tą chwilę możemy otrzymywać jedynie Google Calendar. Dzięki bardzo dobrej polityce tej firmy, do większości ich aplikacji dostępne jest API, które sprawia, że ich integracja ze swoimi rozwiązaniami jest znacznie prostsza. Calendar API jest świetnie udokumentowane, wystarczyła chwila i narzędzie do wysyłania SMS’ów było gotowe.

Do pełni szczęścia potrzebne jest konto w Google, a na nim Gmail i kalendarz. Posiadając własną domenę oraz uruchomione Google Apps, można założyć sobie dedykowane konto np. powiadomienia@domena.pl co jest znacznie elastyczniejszym rozwiązaniem.

Wymagania: Python 2.4+, Python Client Library

#!/usr/bin/python

__author__ = 'mw AT nme.pl'
__version__ = '1.1'
__date__ = 'pią lip 31 10:42:26 CEST 2009'

class setup:
    class google:
        login = 'KONTO@GOOGLE'
        password = 'HASŁO'
    retries = 3

from elementtree import ElementTree
import gdata.calendar.service
import gdata.service
import atom.service
import gdata.calendar
import atom
import getopt
import sys
import string
import time

class CalendarNotify:

    def __init__(self):

        self.cal_client = gdata.calendar.service.CalendarService()
        self.cal_client.email = setup.google.login
        self.cal_client.password = setup.google.password
        self.cal_client.source = 'api'
        self.cal_client.ProgrammaticLogin()

    def reminder(self,event,minutes):

        for a_when in event.when:
            if len(a_when.reminder) > 0:
                a_when.reminder[0].minutes = minutes
            else:
                a_when.reminder.append(gdata.calendar.Reminder(minutes=minutes))
        self.cal_client.UpdateEvent(event.GetEditLink().href, event)

    def event(self,title,where=None):

        try:
            # add event
            event = gdata.calendar.CalendarEventEntry()
            event.title = atom.Title(text=title)
            #event.content = atom.Content(text=content)
            if where:
                event.where.append(gdata.calendar.Where(value_string=where))
            start_time = time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time.time() + 180))
            end_time = time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time.time() + 180 + 60))
            event.when.append(gdata.calendar.When(start_time=start_time, end_time=end_time))
            new_event = self.cal_client.InsertEvent(event, '/calendar/feeds/default/private/full')
            # add reminder
            self.reminder(new_event,1)
        except:
            return False
        return True

def parse(args):

    where = None
    if len(args):
        if args[0][0] == '@':
            where = args.pop(0)

    count = 0
    while count < setup.retries:
        if cal.event(' '.join(args),where):
            break
        count += 1

try:
    cal = CalendarNotify()
except:
    print >>sys.stderr, 'Unable to login to Google Calendar!'
    exit(1)

if __name__ == '__main__':

    args = sys.argv
    name = args.pop(0)

    if not len(args):
        print >>sys.stderr, 'Usage: %s [@where] message\n' % name
        exit(1)

    parse(args)

Uruchamiając skrypt można podać opcjonalny parametr @lokalizacja, a następnie podajemy treść powiadomienia – przykładowa komenda:

./sms.py @firma awaria bazy danych


Polecam  przejżeć również inny sposób wysyłania SMSów opisałem go tu  Pogoda z http://yr.no + bramka sms google

 Jeśli coś tu się Ci przydało nie krępuj się wyślij 1 zł jako --> Donacje! - przyda się :) 


Comments