Anniversaires sur Google Agenda avec l'âge

Depuis de nombreuses années, j'utilise Google Calendar. Il était toujours incompréhensible pourquoi il n'affiche pas l'âge des personnes de Google Contacts au moment de la naissance, de l'anniversaire ou d'autres événements importants.



Lorsque j'ai commencé à rechercher délibérément la réponse à cette question, j'ai constaté que la demande d'affichage de l'âge dans le calendrier de Google était très populaire et qu'il n'y avait toujours pas de réponse définitive. Cela m'a encouragé à créer une solution basée sur Google Apps Script.


Pourquoi des scripts Google?


Je ne voulais pas utiliser de plateforme ou de service tiers, car tous mes contacts se trouvent dans le carnet d'adresses Google. Je ne voulais pas non plus utiliser une application ou un module complémentaire qui collecterait mes données personnelles à des fins incompréhensibles. Une structure de travail transparente était nécessaire.


OĂą est le code?


Je ne peux pas dire que le script a été écrit à partir de zéro - j'ai profité des développements de Bryan Patterson , qui ont été publiés il y a déjà 6 ans, en 2014.


Voici le résultat:


Anniversaires et anniversaires avec des dates pour votre calendrier.gs
//   var contactsCal; var defaultCal; var now; var fromDate; var toDate; var events; //  (function() { contactsCal = CalendarApp.getCalendarById('addressbook#contacts@group.v.calendar.google.com'); defaultCal = CalendarApp.getDefaultCalendar(); //       // var defaultCal = CalendarApp.getCalendarById('regrncqXXXXXXp07eihepag74@group.calendar.google.com'); //   now = new Date(); fromDate = new Date(now.getTime()); toDate = new Date(now.getTime() + 31 * (1000 * 60 * 60 * 24)); // + 31     Logger.log(' : ' + Utilities.formatDate(fromDate, 'Asia/Yekaterinburg', 'MMMM dd, yyyy HH:mm:ss Z')); Logger.log(' : ' + Utilities.formatDate(toDate, 'Asia/Yekaterinburg', 'MMMM dd, yyyy HH:mm:ss Z')); events = contactsCal.getEvents(fromDate, toDate); Logger.log(' : ' + events.length); })(); function birthdayAgeToCalendar() { //  for (var i in events) { Logger.log('birthdayAgeToCalendar.  . : ' + events[i].getTitle()); var name = events[i].getTitle().split(" –  ")[0]; var contacts = ContactsApp.getContactsByName(name); Logger.log('birthdayAgeToCalendar.  . Name: ' + name); for (var c in contacts) { var bday = contacts[c].getDates(ContactsApp.Field.BIRTHDAY); var bdayMonthName, bdayYear, bdayDate; try { bdayMonthName = bday[0].getMonth(); bdayYear = bday[0].getYear(); bdayDate = new Date(bdayMonthName + ' ' + bday[0].getDay() + ', ' + bdayYear); Logger.log('birthdayAgeToCalendar. bdayDate: ' + bdayDate); } catch (error) {} var years = parseInt(new Date().getFullYear()) - bdayYear; try { defaultCal.createAllDayEvent(name + " –  , " + years + "  ()", new Date(bdayMonthName + ' ' + bday[0].getDay() + ', ' + new Date().getFullYear())); Logger.log(": " + name + " –  , " + years + "  ()"); } catch (error) {} } } } function anniversaryAgeToCalendar() { // for (var i in events) { Logger.log('anniversaryAgeToCalendar. . : ' + events[i].getTitle()); var name = events[i].getTitle().split("   ")[1]; var contacts = ContactsApp.getContactsByName(name); Logger.log('anniversaryAgeToCalendar. . Name: ' + name); for (var c in contacts) { var bday = contacts[c].getDates(ContactsApp.Field.ANNIVERSARY); //   https://developers.google.com/apps-script/reference/contacts/field var bdayMonthName, bdayYear, bdayDate; try { bdayMonthName = bday[0].getMonth(); bdayYear = bday[0].getYear(); bdayDate = new Date(bdayMonthName + ' ' + bday[0].getDay() + ', ' + bdayYear); Logger.log('anniversaryAgeToCalendar. bdayDate: ' + bdayDate); } catch (error) {} var years = parseInt(new Date().getFullYear()) - bdayYear; try { defaultCal.createAllDayEvent("   " + name + ", " + years + "  ()", new Date(bdayMonthName + ' ' + bday[0].getDay() + ', ' + new Date().getFullYear())); Logger.log(": " + "   " + name + ", " + years + "  ()"); } catch (error) {} } } } function TriggersCreateTimeDriven() { //      // Deletes all triggers in the current project. var triggers = ScriptApp.getProjectTriggers(); for (var i = 0; i < triggers.length; i++) { ScriptApp.deleteTrigger(triggers[i]); } //    ScriptApp.newTrigger("birthdayAgeToCalendar") //  .timeBased() .onMonthDay(1) //  .atHour(1) .create(); ScriptApp.newTrigger("anniversaryAgeToCalendar") // .timeBased() .onMonthDay(1) .atHour(2) .create(); } 

Comment utiliser?


1.Créez un nouveau script Google Apps sur Google Drive:



2. Copiez le code du script.


3. Exécutez le test de la fonction "birthdayAgeToCalendar" - le script créera des événements dans le calendrier par défaut indiquant l'âge des personnes qui auront des anniversaires dans les 31 jours (mais cette année):



4.Voir Vue / Journaux:



5.VĂ©rifiez le calendrier:



6. Si tout est en ordre, exécutez la fonction "TriggersCreateTimeDriven" - elle créera un démarrage automatique des fonctions "birthdayAgeToCalendar" et "birthdayAgeToCalendar" pour chaque premier jour du mois à l'avance.


Résumé


Je pense que le problème d'affichage de l'âge dans le calendrier Google lorsque des événements importants se produisent a été résolu. Je tiens également à remercier Yevgeny Namokonov ( chaîne de télégramme "Google Sheets" ) et Alexander Ivanov, ainsi que sa chaîne de télégramme, pour leur aide dans la séparation et l'édition du code écrit.


Plus de détails peuvent être trouvés sur GitHub .


Publié par: Mikhail Shardin ,
25 décembre 2019

Source: https://habr.com/ru/post/fr481858/


All Articles