Google Celendar API в Delphi. Робота з подіями, Різне, Програмування, статті

Сьогодні розглянемо приклад додати нову подію в календар Google. Але на початку кілька слів про пристрій самого сервісу Google Календар в цілому.
Отже, Google Celendar призначений для планування свого часу, а також для планування часу, наприклад групи розробників. Ви можете створювати в своєму календарі відкриті заходи, запрошувати друзів (відкривати їм доступ), при цьому дії по додаванню друзів в календар сильно нагадує роботу з передплатниками в блозі, за одним винятком – ви самі повинні додати передплатника. Для зручності роботи з сервісом Google дає можливість користувачеві створити на одом акаунті кілька календарів, наприклад один – для особистого користування, інший – для друзів, третій – для планування робочого часу і т.д. І саме ця обставина (безліч календарів на одному акаунті) слід враховувати при роботі з API Google Celendar.

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



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



Послідовність запитів до сервера може бути наступною:
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 при запиті може (не знаю вже для чого) зробити перенаправлення на іншу адресу. Зіткнувся я з цим буквально вчора – при запиті списку календарів мене перенаправили на іншу адресу при тому, що ДО вчорашнього дня ніяких перенаправлень не було. При відправці нових заходу теж саме – один раз запит проходить нормально, іншим разом – перенаправляє. Але, за великим рахунком, облік перенаправлень – дрібниці.
На даний момент продовжую працювати із заходами в календарі. Додавання зроблено, залишилося попрацювати з зпросамі на зміни і видалення заходів.



 

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*