+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 86.57 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Google Celendar API в Delphi. Работа с событиями

11.03.2010 10:28

Сегодня рассмотрим пример добавления нового события в календарь Google. Но в начале несколько слов об устройстве самого сервиса Google Календарь в целом.
Итак, Google Celendar предназначен для планирования своего времени, а также для планирования времени, например группы разработчиков. Вы можете создавать в своем календаре открытые мероприятия, приглашать друзей (открывать им доступ), при этом действия по добавлению друзей в календарь сильно напоминает работу с подписчиками в блоге, за одним исключением - вы сами должны добавить подписчика. Для удобства работы с сервисом Google дает возможность пользователю создать на одом аккаунте несколько календарей, например один - для личного пользования, другой - для друзей, третий - для планирования рабочего времени и т.д. И именно это обстоятельство (множество календарей на одном аккаунте) следует учитывать при работе с API Google Celendar.

Теперь, что касается устройства сервиса с точки зрения разработчика. Здесь все предельно стандартно (что естественно при работи с любым API Google) - вся работа с сервисом основывается двух видах документов (или частях документ, как угодно) - Feed и Entry. Каждый Feed будет содержать как минимум всю служебную информацию, например, название генератора документа, сведения об авторе и т.д., а также один или несколько элементов Entry. В зависимости от того какой запрос отправляется на сервер, Entry могу содержать (применительно к Google Celedar API):

  • Информацию по календарю
  • Информацию по событиям календаря
  • Информацию о владельцах календаря (уровни доступа)
  • Информацию о подписчиках

Таким образом для того, чтобы добавить новое мероприятие в календарь нам необходимо выполнить следующие действия:

  • Авторизоваться в сервисе (для этого у нас уже есть готовый модуль GoogleLogin)
  • Получить список календарей или Feed отдельного календаря
  • Сформировать правильный элемент Entry, содержащий информацию по мероприятию
  • Отправить Entry на правильный адрес.

Последовательность запросов к серверу может быть следующей:
1. Запрашиваем список всех календарей на аккаунте отправив GET на адрес

http://www.google.com/calendar/feeds/default/allcalendars/full

При этом следует учитывать, что Feed будет содержать абсолютно все календари, включая и те, что доступны только на чтение, например календарь погоды. И при работе с этим списком надо будет проводить анализ уровней доступа к отдельно взятому календарю. Если Вас такой вариант работы не устраивает, то можно получить список календарей пользователя для которых установлен режим и чтения и записи. Для этого необходимо отправить тот же GET на адрес:

http://www.google.com/calendar/feeds/default/owncalendars/full

В полученом Feed"е будут календари в которые можно будет добавлять мероприятия без лишних проверок.
2. Получаем данные календаря, необходимые для того, чтобы добавить мероприятие.
В описании Google Celendar API дается пример добавления нового мероприятия в календарь по-умолчанию. Т.е. POST-запрос предлагается отправить на один из следующих адресов:

http://www.google.com/calendar/feeds/default/private/full
http://www.google.com/calendar/feeds/UserID/private/full

где UserID - идентификатор пользователя (e-mail).
То есть не важно сколько у Вас календарей - мероприятие попадет в первый календарь. Чтобы избежать такой ситуации и добавить новое в мероприятия именно в тот календарь, который нам нужен, необходимо провести простой анализ узлов links в элементе Entry отдельного календаря.
Обычно Entry содержит несколько узлов Links, которые выглядят следующим образом:

Каждый из этих узлов несет определенную информацию. Применительно к нашему случаю, нам необходимо получить атрибут href из узла link у которого атрибут rel имеет следующее значение:

rel="http://schemas.google.com/gCal/2005#eventFeed"

и именно на этот адрес (из атрибута href) следует отправлять POST-запрос. В этом случае мероприятие окажется в том календаре, в котором надо.

Теперь у нас есть авторизация в аккаунте, выбран календарь и есть URL на который мы будем отправлять запрос. Осталось этот запрос правильно сформировать.

3. Формируем запрос
Запрос должен содержать элемент Entry, который описывает новое мероприятие, т.е. название, описание, даты начала и окончания, статус (отменено, подтверждено, запланировано). Как формировать документ с Entry, чтобы не возникало ошибок я рассматривал в посте "XML в Delphi и недействительные пространства имен (xmlns).". В описании API дается следующий пример Entry для мероприятия:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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'>Tennis with Beth</title>
  <content type='text'>Meet 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:when startTime='2006-04-17T15:00:00.000Z'
    endTime='2006-04-17T17:00:00.000Z'></gd:when>
</entry>

Это самый общий вариант Entry. Дополнительно для нового мероприятия можно указать метод оповещения (СМС, почта, всплывающее окно). Чтобы указать метод оповещения, необходимо добавить один или несколько узлов gd:reminder в документ. И здесь есть один момент, которые следует учитывать.
Дело в том, что у Календаря Google есть два вида мероприятий: одиночное, т.е. то которое возникает один раз за всё время и повторяющееся, то которое будет повторяться, например еженедельно, ежедневно и т.д. Об этих мероприятиях я говорил вчера. Момент, который следует учитывать, заключается в том, что при создании одиночного мероприятия все узлы gd:reminder необходимо делать дочерними для узла gd:when, а при повторяющемся - дочерними узлами для узла entry. Если этого не учитывать, то новое мероприятие не добавиться в список.
И последнее. При отправке запросов к серверу необходимо всегда контролировать, возвращаемый сервером код статуса. Дело даже не в том, что по коду можно определить успешность или ошибку отправки запроса. Дело в том, Google при запросе может (не знаю уж для чего) сделать перенаправление на другой адрес. Столкнулся я с этим буквально вчера - при запросе списка календарей меня перенаправили на другой адрес при том, что ДО вчерашнего дня никаких перенаправлений не было. При отправке новых мероприятия тоже самое - один раз запрос проходит нормально, в другой раз - перенаправляет. Но, по большому счёту, учёт перенаправлений - мелочи.
На данный момент продолжаю работать с мероприятиями в календаре. Добавление сделано, осталось поработать с зпросами на изменения и удаление мероприятий.


 

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года