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

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