Gérer les calendriers Google en utilisant le client Gmail
Ajouter, modifier et supprimer des calendriers Gmail
Aspose.Email permet aux applications de gérer les calendriers Gmail en utilisant IGmailClient qui offre des fonctionnalités telles que l’ajout, la suppression et la mise à jour des calendriers Gmail. Cette classe client renvoie une liste d’objets de type ExtendedCalendar contenant des informations sur les éléments du calendrier Gmail. IGmailClient la classe expose les fonctions suivantes pour les calendriers :
- CreateCalendar Il peut être utilisé pour insérer un nouveau calendrier
- ListCalendars Il peut être utilisé pour obtenir la liste de tous les calendriers d’un client
- DeleteCalendar Elle peut être utilisée pour supprimer un calendrier
- FetchCalendar Elle peut être utilisée pour récupérer un calendrier particulier d’un client
- UpdateCalendar Cette fonction est utilisée pour réinsérer un calendrier modifié d’un client
Pour accéder aux calendriers, GoogleTestUser est initialisé en utilisant les identifiants d’un compte Gmail. GoogleOAuthHelper est utilisé pour obtenir le jeton d’accès de l’utilisateur, qui est ensuite utilisé pour initialiser IGmailClient.
Insertion, récupération et mise à jour des calendriers Gmail
Pour insérer un calendrier, initialisez un objet de type Calendar et insérez-le en utilisant CreateCalendar() fonction. CreateCalendar() renvoie l’ID du calendrier nouvellement inséré. Cet ID peut être utilisé pour récupérer le calendrier depuis le serveur. L’extrait de code suivant montre comment insérer, récupérer et mettre à jour le calendrier.
// 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);
}
Supprimer des calendriers Google spécifiques
Pour supprimer un calendrier particulier, nous devons obtenir la liste de tous les calendriers d’un client, puis le supprimer selon les besoins. ListCalendars() renvoie la liste de ExtendedCalendar qui contient les calendriers Gmail. L’extrait de code suivant montre comment supprimer un calendrier particulier.
// 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);
}
}
Contrôle d’accès au calendrier
Aspose.Email offre un contrôle complet sur l’accès aux éléments du calendrier. ListAccessRules() fonction est exposée par IGmailClient qui renvoie la liste de AccessControlRule. Les informations d’une règle individuelle peuvent être récupérées, modifiées et sauvegardées à nouveau pour le calendrier d’un client. IGmailClient contient les fonctions suivantes pour gérer les règles de contrôle d’accès.
- ListAccessRules Cette fonction fournit la liste des AccessControlRule
- CreateAccessRule Cette fonction crée une nouvelle règle d’accès pour un calendrier.
- UpdateAccessRule Cette fonction est utilisée pour mettre à jour une règle d’accès.
- FetchAccessRule Elle peut être utilisée pour récupérer une règle d’accès particulière pour le calendrier d’un client
- DeleteAccessRule Cette fonction est utilisée pour supprimer une règle d’accès.
Le fragment de code suivant vous montre comment utiliser les fonctions pour gérer les règles d’accès :
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;
}
}
Paramètres du client de calendrier et informations sur les couleurs
Aspose.Email prend en charge l’accès aux paramètres du client en utilisant IGmailClient.GetSettings(). Il renvoie la liste des paramètres comme indiqué ci‑dessous :
- dateFieldOrder
- displayAllTimezones
- hideInvitations
- format24HourTime
- defaultCalendarMode
- defaultEventLength
- locale
- remindOnRespondedEventsOnly
- alternateCalendar
- userLocation
- hideWeekends
- showDeclinedEvents
- weekStart
- weather
- customCalendarMode
- timezoneLabel
- timezone
- useKeyboardShortcuts
- country
De même, les informations de couleur pour les clients peuvent également être récupérées en utilisant IGmailClient.GetColors(). Cet objet d’information de couleur renvoie la liste des couleurs de premier plan, des couleurs d’arrière-plan ainsi que la date et l’heure de mise à jour.
Accéder aux paramètres du client
Le fragment de code suivant vous montre comment les fonctions peuvent être utilisées pour accéder aux paramètres du client :
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");
}
}
}
Accès aux informations de couleur
Le fragment de code suivant vous montre comment les fonctions peuvent être utilisées pour accéder aux paramètres de couleur du client.
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);
}
Gérer les rendez‑vous Google Calendar
Aspose.Email offre des fonctionnalités pour travailler avec les rendez‑vous dans les calendriers Google. Les tâches suivantes peuvent être effectuées sur les rendez‑vous dans Google Calendar :
- Ajouter des rendez‑vous.
- Récupérer la liste des rendez‑vous.
- Récupérer un rendez‑vous particulier.
- Mettre à jour un rendez‑vous.
- Déplacer le rendez‑vous d’un calendrier à un autre.
- Supprimer le rendez‑vous.
IGmailClient fournit des fonctions telles que CreateAppointment, FetchAppointment, UpdateAppointment, ListAppointments, MoveAppointment et DeleteAppointment.
Ajouter des rendez‑vous à Google Calendar
L’exemple de code suivant montre la fonction d’ajout d’un rendez‑vous dans un calendrier. Pour cela, suivez les étapes :
- Créer et insérer un calendrier.
- Récupérer la liste des rendez‑vous d’un nouveau calendrier.
- Créer un rendez‑vous.
- Insérer un rendez‑vous.
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);
}
}
Récupérer et mettre à jour les rendez‑vous Google Calendar
Voici la récupération et la mise à jour du calendrier démontrées comme suit :
- Récupérer un rendez‑vous particulier.
- Modifier le rendez‑vous.
- Mettre à jour le rendez‑vous dans le calendrier.
On suppose qu’un calendrier avec l’identifiant « calendarId » et un identifiant unique de rendez‑vous « AppointmentUniqueId » ont déjà été extraits. Le fragment de code suivant vous montre comment récupérer et mettre à jour un rendez‑vous.
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);
}
Déplacer et supprimer des rendez‑vous dans Google Calendar
Un rendez‑vous peut être déplacé en fournissant le calendrier source, le calendrier de destination et l’identifiant unique d’un rendez‑vous dans le calendrier source. Le fragment de code suivant montre comment déplacer et supprimer un rendez‑vous.
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);
}
Requête FreeBusy pour Google Calendar
Aspose.Email fournit un mécanisme de requête pour vérifier si un rendez‑vous est dû ou non selon les critères. La classe FreebusyQuery est fournie à cet effet et permet de préparer une requête pour un calendrier particulier.
Cet exemple de code illustre la fonctionnalité de requête d’un calendrier. Les tâches suivantes sont effectuées dans cet exemple :
- Créer et insérer un calendrier
- Créer un rendez‑vous
- Insérer un rendez‑vous
- Préparer une FreeBusyQuery
- Obtenir le 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);
}
}