Bramka SMS od Google

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

Comments

3 odpowiedzi do wpisu “Bramka SMS od Google”
  1. Boniek pisze:

    Wszystko pięknie działa a czy można zrobić do tego interface graficzny ??

  2. nme pisze:

    :) do wszystkiego da się zrobić, kwestia potrzeb – których nie mam i chęci – których u mnie brak, pozdrawiam :)

Trackbacki

Zobacz co napisali inni...
  1. [...] Drugim zasugerowanym przeze mnie rozwiązaniem było wykorzystanie możliwości wysyłania powiadomień SMS z Google Calendar. To rozwiązanie również jest dobre. Możemy wykorzystać konto w Google Apps, dzięki czemu adres powiadomień jest bardziej uniwersalny, ale ma też swoje wady – chodzi mianowicie o dzienny limit powiadomień SMS z kalendarza Google. Jak się przekonałem, taki limit jest. Dokładnej liczby nie znam, ale w przybliżeniu to około 25 SMS’ów. [...]



Zostaw komentarz