Керуйте календарями Google за допомогою клієнта Gmail
Додавання, редагування та видалення календарів Gmail
Aspose.Email дозволяє застосункам керувати календарями Gmail за допомогою IGmailClient який забезпечує функції додавання, видалення та оновлення календарів Gmail. Цей клієнтський клас повертає список об’єктів типу ExtendedCalendar, які містять інформацію про елементи календаря Gmail. IGmailClient клас надає наступні функції для календарів:
- CreateCalendar Вона може бути використана для вставки нового календаря
- ListCalendars Вона може бути використана для отримання списку всіх календарів клієнта
- DeleteCalendar Її можна використати для видалення календаря
- FetchCalendar Її можна використати для отримання конкретного календаря клієнта
- UpdateCalendar Ця функція використовується для повторного вставлення зміненого календаря клієнта
Для доступу до календарів GoogleTestUser ініціалізується за допомогою облікових даних облікового запису Gmail. GoogleOAuthHelper використовується для отримання токену доступу користувача, який потім використовується для ініціалізації IGmailClient.
Вставка, отримання та оновлення календарів Gmail
Для вставки календаря ініціалізуйте об’єкт типу Calendar і вставте його за допомогою CreateCalendar() функція. CreateCalendar() повертає ідентифікатор ново вставленого календаря. Цей ідентифікатор можна використати для отримання календаря з сервера. Наступний фрагмент коду показує, як вставити, отримати та оновити календар.
// Get access token
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Insert, get and update calendar
Aspose.Email.Clients.Google.Calendar calendar = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "America/Los_Angeles");
// Insert calendar and Retrieve same calendar using id
string id = client.CreateCalendar(calendar);
Aspose.Email.Clients.Google.Calendar cal = client.FetchCalendar(id);
//Match the retrieved calendar info with local calendar
if ((calendar.Summary == cal.Summary) && (calendar.TimeZone == cal.TimeZone))
{
Console.WriteLine("fetched calendar information matches");
}
else
{
Console.WriteLine("fetched calendar information does not match");
}
// Change information in the fetched calendar and Update calendar
cal.Description = "Description - " + Guid.NewGuid().ToString();
cal.Location = "Location - " + Guid.NewGuid().ToString();
client.UpdateCalendar(cal);
}
Видалення конкретних календарів Google
Для видалення конкретного календаря нам потрібно отримати список усіх календарів клієнта, а потім видалити потрібний. ListCalendars() повертає список ExtendedCalendar яка містить календарі Gmail. Наступний фрагмент коду показує, як видалити конкретний календар.
// Get access token
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Access and delete calendar with summary starting from "Calendar summary - "
string summary = "Calendar summary - ";
// Get calendars list
ExtendedCalendar[] lst0 = client.ListCalendars();
foreach (ExtendedCalendar extCal in lst0)
{
// Delete selected calendars
if (extCal.Summary.StartsWith(summary))
client.DeleteCalendar(extCal.Id);
}
}
Контроль доступу до календаря
Aspose.Email забезпечує повний контроль над доступом до елементів календаря. ListAccessRules() функція доступна через IGmailClient яка повертає список AccessControlRule. Інформацію про окреме правило можна отримати, змінити та зберегти назад для календаря клієнта. IGmailClient містить наступні функції для керування правилами контролю доступу.
- ListAccessRules Ця функція надає список AccessControlRule
- CreateAccessRule Ця функція створює нове правило доступу для календаря.
- UpdateAccessRule Ця функція використовується для оновлення правила доступу.
- FetchAccessRule Її можна використати для отримання конкретного правила доступу для календаря клієнта
- DeleteAccessRule Ця функція використовується для видалення правила доступу.
Наведений нижче кодовий фрагмент показує, як використовувати функції для керування правилами доступу:
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Retrieve list of calendars for the current client
ExtendedCalendar[] calendarList = client.ListCalendars();
// Get first calendar id and retrieve list of AccessControlRule for the first calendar
string calendarId = calendarList[0].Id;
AccessControlRule[] roles1 = client.ListAccessRules(calendarId);
// Create a local access control rule and Set rule properties
AccessControlRule rule = new AccessControlRule();
rule.Role = AccessRole.reader;
rule.Scope = new AclScope(AclScopeType.user, User2.EMail);
// Insert new rule for the calendar. It returns the newly created rule
AccessControlRule createdRule = client.CreateAccessRule(calendarId, rule);
// Confirm if local created rule and returned rule are equal
if ((rule.Role == createdRule.Role) && (rule.Scope.Type == createdRule.Scope.Type) && (rule.Scope.Value.ToLower() == createdRule.Scope.Value.ToLower()))
{
Console.WriteLine("local rule and returned rule after creation are equal");
}
else
{
Console.WriteLine("Rule could not be created successfully");
return;
}
// Get list of rules
AccessControlRule[] roles2 = client.ListAccessRules(calendarId);
// Current list length should be 1 more than the earlier one
if (roles1.Length + 1 == roles2.Length)
{
Console.WriteLine("List lengths are ok");
}
else
{
Console.WriteLine("List lengths are not ok");
return;
}
// Change rule and Update the rule for the selected calendar
createdRule.Role = AccessRole.writer;
AccessControlRule updatedRule = client.UpdateAccessRule(calendarId, createdRule);
// Check if returned access control rule after update is ok
if ((createdRule.Role == updatedRule.Role) && (createdRule.Id == updatedRule.Id))
{
Console.WriteLine("Rule is updated successfully");
}
else
{
Console.WriteLine("Rule is not updated");
return;
}
// Retrieve individaul rule against a calendar
AccessControlRule fetchedRule = client.FetchAccessRule(calendarId, createdRule.Id);
//Check if rule parameters are ok
if ((updatedRule.Id == fetchedRule.Id) && (updatedRule.Role == fetchedRule.Role) && (updatedRule.Scope.Type == fetchedRule.Scope.Type) && (updatedRule.Scope.Value.ToLower() == fetchedRule.Scope.Value.ToLower()))
{
Console.WriteLine("Rule parameters are ok");
}
else
{
Console.WriteLine("Rule parameters are not ok");
}
// Delete particular rule against a given calendar and Retrieve the all rules list for the same calendar
client.DeleteAccessRule(calendarId, createdRule.Id);
AccessControlRule[] roles3 = client.ListAccessRules(calendarId);
// Check that current rules list length should be equal to the original list length before adding and deleting the rule
if (roles1.Length == roles3.Length)
{
Console.WriteLine("List lengths are same");
}
else
{
Console.WriteLine("List lengths are not equal");
return;
}
}
Налаштування клієнта календаря та інформація про кольори
Aspose.Email підтримує доступ до налаштувань клієнта за допомогою IGmailClient.GetSettings(). Вона повертає список налаштувань, як наведено нижче:
- dateFieldOrder
- displayAllTimezones
- hideInvitations
- format24HourTime
- defaultCalendarMode
- defaultEventLength
- locale
- remindOnRespondedEventsOnly
- alternateCalendar
- userLocation
- hideWeekends
- showDeclinedEvents
- weekStart
- weather
- customCalendarMode
- timezoneLabel
- timezone
- useKeyboardShortcuts
- country
Подібну інформацію про кольори для клієнтів також можна отримати за допомогою IGmailClient.GetColors(). Цей об’єкт інформації про колір повертає список кольорів переднього плану, кольорів фону та дату і час оновлення.
Доступ до налаштувань клієнта
Наведений нижче кодовий фрагмент показує, як можна використовувати функції для доступу до налаштувань клієнта:
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Retrieve client settings
Dictionary<string, string> settings = client.GetSettings();
if (settings.Count < 1)
{
Console.WriteLine("No settings are available.");
return;
}
// Traverse the settings list
foreach (KeyValuePair<string, string> pair in settings)
{
// Get the setting value and test if settings are ok
string value = client.GetSetting(pair.Key);
if (pair.Value == value)
{
Console.WriteLine("Key = " + pair.Key + ", Value = " + pair.Value);
}
else
{
Console.WriteLine("Settings could not be retrieved");
}
}
}
Доступ до інформації про кольори
Наведений нижче кодовий фрагмент показує, як можна використовувати функції для доступу до налаштувань кольорів клієнта.
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
ColorsInfo colors = client.GetColors();
Dictionary<string, Colors> palettes = colors.Calendar;
// Traverse the settings list
foreach (KeyValuePair<string, Colors> pair in palettes)
{
Console.WriteLine("Key = " + pair.Key + ", Color = " + pair.Value);
}
Console.WriteLine("Update Date = " + colors.Updated);
}
Керування зустрічами Google Calendar
Aspose.Email надає функції для роботи зі зустрічами в календарях Google. Наступні завдання можна виконати зі зустрічами в календарі Google:
- Додати зустрічі.
- Отримати список зустрічей.
- Отримати конкретну зустріч.
- Оновити зустріч.
- Перемістити зустріч з одного календаря в інший.
- Видалити зустріч.
IGmailClient надає функції, такі як CreateAppointment, FetchAppointment, UpdateAppointment, ListAppointments, MoveAppointment і DeleteAppointment.
Додати зустрічі до Google Calendar
Наведений нижче приклад коду демонструє можливість додавання зустрічі в календар. Щоб досягти цього, виконайте наступні кроки:
- Створити та вставити календар.
- Отримати список зустрічей з нового календаря.
- Створити подію.
- Вставити зустріч.
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
// Get IGmailclient
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Create local calendar
Aspose.Email.Clients.Google.Calendar calendar1 = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "Europe/Kiev");
// Insert calendar and get id of inserted calendar and Get back calendar using an id
string id = client.CreateCalendar(calendar1);
Aspose.Email.Clients.Google.Calendar cal1 = client.FetchCalendar(id);
string calendarId1 = cal1.Id;
try
{
// Retrieve list of appointments from the first calendar
Appointment[] appointments = client.ListAppointments(calendarId1);
if (appointments.Length > 0)
{
Console.WriteLine("Wrong number of appointments");
return;
}
// Get current time and Calculate time after an hour from now
DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddHours(1);
// Initialize a mail address collection and set attendees mail address
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add("User1.EMail@domain.com");
attendees.Add("User3.EMail@domain.com");
// Create an appointment with above attendees
Appointment app1 = new Appointment("Location - " + Guid.NewGuid().ToString(), startDate, endDate, User2.EMail, attendees);
// Set appointment summary, description, start/end time zone
app1.Summary = "Summary - " + Guid.NewGuid().ToString();
app1.Description = "Description - " + Guid.NewGuid().ToString();
app1.StartTimeZone = "Europe/Kiev";
app1.EndTimeZone = "Europe/Kiev";
// Insert appointment in the first calendar inserted above and get back inserted appointment
Appointment app2 = client.CreateAppointment(calendarId1, app1);
// Retrieve appointment using unique id
Appointment app3 = client.FetchAppointment(calendarId1, app2.UniqueId);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Отримання та оновлення зустрічей Google Calendar
Тут демонструються отримання та оновлення календаря наступним чином:
- Отримати конкретну подію.
- Змінити подію.
- Оновити подію в календарі.
Припускається, що календар з ідентифікатором "calendarId" та унікальним ідентифікатором зустрічі "AppointmentUniqueId" вже отримані. Нижченаведений фрагмент коду показує, як отримати та оновити зустріч.
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
// Get IGmailclient
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
string calendarId = client.ListCalendars()[0].Id;
string AppointmentUniqueId = client.ListAppointments(calendarId)[0].UniqueId;
// Retrieve Appointment
Appointment app3 = client.FetchAppointment(calendarId, AppointmentUniqueId);
// Change the appointment information
app3.Summary = "New Summary - " + Guid.NewGuid().ToString();
app3.Description = "New Description - " + Guid.NewGuid().ToString();
app3.Location = "New Location - " + Guid.NewGuid().ToString();
app3.Flags = AppointmentFlags.AllDayEvent;
app3.StartDate = DateTime.Now.AddHours(2);
app3.EndDate = app3.StartDate.AddHours(1);
app3.StartTimeZone = "Europe/Kiev";
app3.EndTimeZone = "Europe/Kiev";
// Update the appointment and get back updated appointment
Appointment app4 = client.UpdateAppointment(calendarId, app3);
}
Переміщення та видалення зустрічей у Google Calendar
Зустріч можна перемістити, вказавши вихідний календар, цільовий календар та унікальний ідентифікатор зустрічі у вихідному календарі. Нижченаведений фрагмент коду показує, як перемістити та видалити зустріч.
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
// Get IGmailclient
using (IGmailClient client = Aspose.Email.Clients.Google.GmailClient.GetInstance(accessToken, User2.EMail))
{
string SourceCalendarId = client.ListCalendars()[0].Id;
string DestinationCalendarId = client.ListCalendars()[1].Id;
string TargetAppUniqueId = client.ListAppointments(SourceCalendarId)[0].UniqueId;
// Retrieve the list of appointments in the destination calendar before moving the appointment
Appointment[] appointments = client.ListAppointments(DestinationCalendarId);
Console.WriteLine("Before moving count = " + appointments.Length);
Appointment Movedapp = client.MoveAppointment(SourceCalendarId, DestinationCalendarId, TargetAppUniqueId);
// Retrieve the list of appointments in the destination calendar after moving the appointment
appointments = client.ListAppointments(DestinationCalendarId);
Console.WriteLine("After moving count = " + appointments.Length);
// Delete particular appointment from a calendar using unique id
client.DeleteAppointment(DestinationCalendarId, Movedapp.UniqueId);
// Retrieve the list of appointments. It should be one less than the earlier appointments in the destination calendar
appointments = client.ListAppointments(DestinationCalendarId);
Console.WriteLine("After deleting count = " + appointments.Length);
}
FreeBusy запит для Google Calendar
Aspose.Email надає механізм запитування для перевірки, чи настав час зустрічі згідно з критерієм. Для цього надається клас FreebusyQuery, який дозволяє підготувати запит для конкретного календаря.
Цей приклад коду демонструє можливість запитування календаря. У цьому прикладі виконуються наступні завдання:
- Створити та вставити календар
- Створити зустріч
- Вставити зустріч
- Підготувати FreeBusyQuery
- Отримати відповідь FreebusyResponse
// Use the GoogleUser and GoogleOAuthHelper classes below to receive an access token
using (IGmailClient client = GmailClient.GetInstance(accessToken, user.Email))
{
// Initialize calendar item
Aspose.Email.Clients.Google.Calendar calendar1 = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "Europe/Kiev");
// Insert calendar and get back id of newly inserted calendar and Fetch the same calendar using calendar id
string id = client.CreateCalendar(calendar1);
Aspose.Email.Clients.Google.Calendar cal1 = client.FetchCalendar(id);
string calendarId1 = cal1.Id;
try
{
// Get list of appointments in newly inserted calendar. It should be zero
Appointment[] appointments = client.ListAppointments(calendarId1);
if (appointments.Length != 0)
{
Console.WriteLine("Wrong number of appointments");
return;
}
// Create a new appointment and Calculate appointment start and finish time
DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddHours(1);
// Create attendees list for appointment
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add("user1@domain.com");
attendees.Add("user2@domain.com");
// Create appointment
Appointment app1 = new Appointment("Location - " + Guid.NewGuid().ToString(), startDate, endDate, "user2@domain.com", attendees);
app1.Summary = "Summary - " + Guid.NewGuid().ToString();
app1.Description = "Description - " + Guid.NewGuid().ToString();
app1.StartTimeZone = "Europe/Kiev";
app1.EndTimeZone = "Europe/Kiev";
// Insert the newly created appointment and get back the same in case of successful insertion
Appointment app2 = client.CreateAppointment(calendarId1, app1);
// Create Freebusy query by setting min/max timeand time zone
FreebusyQuery query = new FreebusyQuery();
query.TimeMin = DateTime.Now.AddDays(-1);
query.TimeMax = DateTime.Now.AddDays(1);
query.TimeZone = "Europe/Kiev";
// Set calendar item to search and Get the reponse of query containing
query.Items.Add(cal1.Id);
FreebusyResponse resp = client.GetFreebusyInfo(query);
// Delete the appointment
client.DeleteAppointment(calendarId1, app2.UniqueId);
}
finally
{
// Delete the calendar
client.DeleteCalendar(cal1.Id);
}
}