Niekiedy używam Google Calendar, niestety do planowania uzywam innych narzedzi – często własnoręcznie napisanych lub wzbogaconych moimi aplikacjami pomocniczymi. Stwierdziłem, że przydałby sie moduł wymiany pewnych zdarzeń pomiędzy moimi aplikacjami a Google Calendar.
Na stronie google jest w miarę sympatyczny opis (niestety po pogańsku – ale to jest i będzie normą)
http://code.google.com/intl/pl-PL/apis/calendar/data/2.0/developers_guide_protocol.html
W skrócie:
na adres https://www.google.com/accounts/ClientLogin
należy wysłać dane konta: email, haslo , identyfikator programu – dowolna nazwę, identyfikator serwisu google – w tym przypadku „cl”
np: Email=kashiash@gmail.com&Passwd=MojeTajneHaslo&source=goalsapp&service=cl
w kodzie clariona:
ThisWebClient.init()
ThisWebClient.SetAllHeadersDefault()
ThisWebClient.ContentType = 'application/x-www-form-urlencoded'
PostURL = 'https://www.google.com/accounts/ClientLogin'
Email = 'kashiash@gmail.com'
Passwd = 'MojeTajneHaslo'
PostString = 'Email=' & clip(Email) &'Passwd='&clip(Passwd)&'&source=goalsapp&service=cl'
ThisWebClient.Post(PostURL,PostString)
Odpowiedz z serwisu pobieramy na zdrzeniu ThisWebClient.PageReceived w ten sposób
PageString = ThisWebClient.Page [1 : ThisWebClient.PageLen]
Teraz w PageString między innymi powinniśmy dostać taki fragment tekstu:
Auth=DQAAAJQaAACGjSBJgK7sR7j6bZn8M5ws0gdxIX8YQziVVVFJ8BUGE5O83eafjj9qyOiGx9hPBNEDrj1hjVC54DZcejKuMSQX-pEDXKrJj7m0UJ9ZLPs52VWXvOgFQ0DDvuY0hmFOrlR8PJYzEo9DgX5eo1qkDFP-xAXs5PwpL7oaMIBsVIVlY-JogqAS2ZdknX1EDgdmkzBO4-lGSgQhu615iiLOZkaq
będzie nam potrzebny do autoryzacji.
pobierzemy liste dostepnych kalendarzy:
ThisWebClient.Authorization = 'GoogleLogin Auth=DQAAAJQaAACGjSBJgK7sR7j6bZn8M5ws0gdxIX8YQziVVVFJ8BUGE5O83eafjj9qyOiGx9hPBNEDrj1hjVC54DZcejKuMSQX-pEDXKrJj7m0UJ9ZLPs52VWXvOgFQ0DDvuY0hmFOrlR8PJYzEo9DgX5eo1qkDFP-xAXs5PwpL7oaMIBsVIVlY-JogqAS2ZdknX1EDgdmkzBO4-lGSgQhu615iiLOZkaq'
URL = http://www.google.com/calendar/feeds/default/allcalendars/full
ThisWebClient.Fetch(URL)
Odpowiedź z serwisu pobieramy podobnie jak za pierwszym razem:
PageString = ThisWebClient.Page [1 : ThisWebClient.PageLen]
niestety wygląda mało sympatycznie, ale napisanie procedury która sparsuje odpowiedź nie jest czymś skomlikowanym 😉
teraz sprobujmy sobie założyc nowy kalendarz:
na adres: POST http://www.google.com/calendar/feeds/default/owncalendars/full
wysyłamy nastepujący wpis:
<entry xmlns='http://www.w3.org/2005/Atom'
xmlns:gd='http://schemas.google.com/g/2005'
xmlns:gCal='http://schemas.google.com/gCal/2005'>
<title type='text'>bbbbbbbbbbbb</title>
<summary type='text'>Nowy testowy kalendarzyk.</summary>
<gCal:timezone value='America/Los_Angeles'></gCal:timezone>
<gCal:hidden value='false'></gCal:hidden>
<gCal:color value='#2952A3'></gCal:color>
<gd:where rel='' label='' valueString='Oakland'></gd:where>
</entry>
należy zmienić tylko contntent type na application/atom+xml
ThisWebClient.init()
ThisWebClient.SetAllHeadersDefault()
ThisWebClient.ContentType = 'application/atom+xml
'
PostURL = 'http://www.google.com/calendar/feeds/default/owncalendars/full'
PostString = EntryValue ! W tej zmiennej mamy przygotowany wpis entry jak powyżej
ThisWebClient.Authorization = 'GoogleLogin Auth=DQAAAJQaAACGjSBJgK7sR7j6bZn8M5ws0gdxIX8YQziVVVFJ8BUGE5O83eafjj9qyOiGx9hPBNEDrj1hjVC54DZcejKuMSQX-pEDXKrJj7m0UJ9ZLPs52VWXvOgFQ0DDvuY0hmFOrlR8PJYzEo9DgX5eo1qkDFP-xAXs5PwpL7oaMIBsVIVlY-JogqAS2ZdknX1EDgdmkzBO4-lGSgQhu615iiLOZkaq'
ThisWebClient.Post(PostURL,PostString)
W odpowiedzi dostajemy informacje o założonym kalendarzu lub ewentualnym błędzie w dobrze juz znany sposób
PageString = ThisWebClient.Page [1 : ThisWebClient.PageLen]
Aby pobrać listę zdarzeń z kalendarza w okreslonym zakresie dat wystarczy wysłać:
GET http://www.google.com/calendar/feeds/default/private/full?start-min=2006-03-16T00:00:00&start-max=2006-03-24T23:59:59
i potem tylko sparsować przesłany wynik 😉
Wpis zdarzenia to jedyne :
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gCal='http://schemas.google.com/gCal/2005'>
<content type="html">Tennis with John April 11 3pm-3:30pm</content>
<title>title musi byc, bo inaczej dostaniemy komunikat o błędzie<>
<gCal:quickadd value="true"/>
</entry>
wysłane na adres: POST http://www.google.com/calendar/feeds/default/private/full
Zdarzenie z wieksza ilościa informacji w dodatku powtarzające sie, wpiszemy wysyłając na ten sam adres następujący wpis:
<entry xmlns='http://www.w3.org/2005/Atom'
xmlns:gd='http://schemas.google.com/g/2005'>
<category scheme='http://schemas.google.com/g/2005#kind'
term='http://schemas.google.com/g/2005#event'></category>
<title type='text'>Tuesday Tennis Lessons with Jane</title>
<content type='text'>Meet on Tuesdays for a quick lesson.</content>
<gd:transparency
value='http://schemas.google.com/g/2005#event.opaque'>
</gd:transparency>
<gd:eventStatus
value='http://schemas.google.com/g/2005#event.confirmed'>
</gd:eventStatus>
<gd:where valueString='Rolling Lawn Courts'></gd:where>
<gd:recurrence>DTSTART;VALUE=DATE:20070501
DTEND;VALUE=DATE:20070502
RRULE:FREQ=WEEKLY;BYDAY=Tu;UNTIL=20070904
</gd:recurrence>
</entry>
Żródlo:
http://code.google.com/intl/pl-PL/apis/calendar/data/2.0/developers_guide_protocol.html
http://capesoft.com/docs/NetTalk/nettalk3.htm#Jump Start for Web
jestem w trakcie dopieszczania programu z powyższymi przykładami, jak unzam że jest wystarczająco dopieszczony podeślę go tutaj …