Archive for Maj, 2011

Zapis zdarzenia do wybranego kalendarza google

Google udostępnia darmową usługę kalendarzy oraz API dzięki któremu można łatwo zapisywać ważne wydarzenia, tworzyć dowolną ilość kalendarzy oraz dzielić się nimi z innym osobami.

Klasy jednego z modułów Zend Framework-a (Zend_Gdata) pozwalają w niezwykle prosty sposób dodać utworzone wydarzenie.

           //logowanie
           $userCal = 'myemail@gmail.com';
           $passCal = 'mypassword';
           $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
           $client = Zend_Gdata_ClientLogin::getHttpClient($userCal,$passCal,$service);

           //Tworzenie wydarzenia
            $gdataEvent = new Zend_Gdata_Calendar($client);

            $event = $gdataEvent->newEventEntry();

            $event->title = $gdataEvent->newTitle('Tytuł');
            $event->where = array($gdataEvent->newWhere('Miejsce'));
            $event->content = $gdataEvent->newContent('Opis wydarzenia');

            $when = $gdataEvent->newWhen();
            $when->startTime = '2011-05-31T18:20:30';
            $when->endTime =  '2011-05-31T19:20:30';
            $event->when = array($when);

            $gdataEvent->insertEvent($event);

Powyższy kod tworzy wydarzenia w domyślnym kalendarzu, ja jednak potrzebowałem, aby wydarzenia były zapisywane do dowolnie wybranego kalendarza na moim koncie google czego wykonanie nie jest już tak oczywiste. Metoda "insertEvent" obiektu "Zend_Gdata_Calendar" przyjmuje w swoim drugim parametrze url, który stanowi klucz do rozwiązania problemu. Do utworzenia odpowiedniego url-a należy użyć identyfikatora kalendarza, który znajdziemy w ustawieniach każdego z nich.

"Ustawienia kalendarza -> Szczegóły kalendarza (zakładka) -> Adres kalendarza"

Konstrukcja całego adresu oraz metoda zapisująca wydarzenie powinna wyglądać następująco:

          $calendarId = "mqfnddswamiq29qmle6mv4edu0%40group.calendar.google.com";

          //magiczny url :)
          $url = 'https://www.google.com/calendar/feeds/'.$calendarId.'/private/full';

          //zapis
          $gdataEvent->insertEvent($event, $url);