Гугл-шмугл

Цель - научиться добавлять в гугл-календарь новые события и напоминания, используя Google API

Установка

я использую php-интерфейс. Он основан на Zend Framework и называется Zend gdata.

Руководство по установке. Установка заключается в распаковке архива в c gdata в надежное место, доступное для чтения пользователем www-data и добавлением в Apache-конфиг php (php.conf) строчки

include_path = “/var/www/php-example/zendgdata/library:.:/usr/share/php5/”

Ссылки

Официальный Ман

Example.

Какой-никакой туториал есть на сайте Zend Framework

PhpDocumentor - описание API, сгенерированное пыховским аналогом Javadoc

IBM manual

Как можно научиться

Списываем куски кода из примера

открываем пример и начинаем запускать его с разными параметрами с помощью php-cli.

php-cli - это интерпретатор php, запускаемый из shell. Он бывает очень полезным, если надо проверить ошибки в своем скрипте на пыхе, а на браузер переключаться лень. В ubuntu ставится из пакета php-cli.

пример находится в $ZENDGDATA/demos/Zend/Gdata/Calendar.php

сначала посмотрим, как использовать этот скрипт:

php -f Calendar.php

Usage: php Calendar.php <action> [<username>] [<password>] [<arg1> <arg2> ...]
Possible action values include:
outputCalendar
outputCalendarMagicCookie
outputCalendarByDateRange
outputCalendarByFullTextQuery
outputCalendarList
updateEvent
deleteEventById
deleteEventByUrl
createEvent
createQuickAddEvent
createWebContentEvent
createRecurringEvent
setReminder
addExtendedProperty

попробуем php Calendar.php createEvent - надо указать кучу дат, логин и пароль пользователя.

Usage: php Calendar.php createEvent <username> <password> <title> <description> <where> <startDate> <startTime> <endDate> <endTime> <tzOffset>
EXAMPLE: php Calendar.php createEvent <username> <password> 'Tennis with Beth' 'Meet for a quick lesson' 'On the courts' '2008-01-01' '10:00' '2008-01-01' '11:00' '-08'

Ну а теперь смотрим и наслаждаемся новым свежесозданным событием в Календаре! А затем лезем в код и смотрим, какие функции для этого вызывались.

Первая личная программа

Собственно, всё скатано прямо из примеров. Сначала мы подключаемся, а затем создаем событие. Результат - новая запись в гугл-календаре!

<?php /** * Returns a HTTP client object with the appropriate headers for communicating * with Google using the ClientLogin credentials supplied. * * @param string $user The username, in e-mail address format, to authenticate * @param string $pass The password for the user specified * @return Zend_Http_Client */ require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_AuthSub'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_HttpClient'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); Zend_Loader::loadClass('Zend_Gdata_Calendar_EventEntry'); function getClientLoginHttpClient($user, $pass) { $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service); return $client; } function createEvent ($client, $title = 'Tennis with Beth', $desc='Meet for a quick lesson', $where = 'On the courts', $startDate = '2008-01-20', $startTime = '10:00', $endDate = '2008-01-20', $endTime = '11:00', $tzOffset = '-08') { $gc = new Zend_Gdata_Calendar($client); $newEntry = $gc->newEventEntry(); $newEntry->title = $gc->newTitle(trim($title)); $newEntry->where = array($gc->newWhere($where)); $newEntry->content = $gc->newContent($desc); $newEntry->content->type = 'text'; $when = $gc->newWhen(); $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00"; $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00"; $newEntry->when = array($when); $createdEntry = $gc->insertEvent($newEntry); return $createdEntry->id->text; } $authClient = getClientLoginHttpClient("wtf.with.calendar", "q1w2e3r4"); createEvent($authClient, 'my first event' , 'event description', 'nowhere', '2010-03-07', '02:00', '2010-03-07', '05:00', '-08'); ?>

Reminders

Сразу же захотелось копнуть вглубь и попробовать поставить напоминалку с помощью SMS.

Увы, это не так просто. Напоминания описываются в xml и парсятся при помощи DOM. Завтра я сделаю себе такой напоминарчик.