Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[AppleScript] Exporter un calendrier iCal

8 réponses
Avatar
Frédéric PONCET
La documentation est simple, claire : il faut faire

save reference -- the object for the command
[as Unicode text] -- The file type in which to save the data.
[in alias] -- The file in which to save the object.

Mais ça marche pas. Le fichier reste désespérément vide.

Voici mon script :
--On crée le fichier s'il n'existe pas
tell application "Finder"
if file "Users:home:Bureau:Calendrier.ics" of startup disk exists then
set fichier to file "Calendrier.ics" of folder "Users:home:Bureau" of startup disk
else
set fichier to make new file with properties {name:"Calendrier.ics"} at folder
"Users:home:Bureau" of startup disk
end if
end tell
--On définit l'alias
set aliasfichier to alias "Disque Dur:Users:home:Desktop:Calendrier.ics"
tell application "iCal"
set varcal to (calendars whose title is "Personnel")
save varcal in aliasfichier
end tell

(fin du script)

Et voici ce que ça donne dans l'historique des évènements :

tell application "Finder"
exists file "Users:home:Bureau:Calendrier.ics" of startup disk
true
get file "Calendrier.ics" of folder "Users:home:Bureau" of startup disk
document file "Calendrier.ics" of folder "Desktop" of folder "home" of folder
"Users" of startup disk
end tell
tell application "iCal"
get every calendar whose title = "Mon calendrier"
{calendar 1}
save {calendar 1} in alias "Disque Dur:Users:home:Desktop:Calendrier.ics"
end tell

C'est tout.
Pas de message d'erreur, le fichier Calendrier.ics est bien créé sur le bureau,
mais rien n'est enregistré dedans.

Je m'arrache les cheveux, je n'y comprends rien...

8 réponses

Avatar
DINH Viêt Hoà

[ script ]


s'il s'agit de récupérer un calendrier sous forme .ics, il
se trouve dans ~/Library/Calendars directement en .ics.

--
DINH V. Hoa,

"il faut arrêter de fumer et de boire de la bière. Avec les économies
réalisées, on s'achète un PC" -- ed

Avatar
Frédéric PONCET

s'il s'agit de récupérer un calendrier sous forme .ics, il
se trouve dans ~/Library/Calendars directement en .ics.



J'y avais pensé. Mais il y a un autre problème. J'ai aussi écrit un script censé
réaliser une copie du fichier .ics d'origine et j'obtiens un message d'erreur
qui me dit que je n'ai pas l'autorisation d'accès à ce fichier!

En l'occurrence il se trouve dans ~/Sites/Calendars avec un lien symbolique dans
~/Library/. J'ai utilisé cet artifice pour pouvoir le partager sans WebDav.

Mais je ne vois pas ce que ça change du point de vue des droits.

Avatar
Frédéric PONCET

s'il s'agit de récupérer un calendrier sous forme .ics, il
se trouve dans ~/Library/Calendars directement en .ics.



J'y avais pensé. Mais il y a un autre problème. J'ai aussi écrit un
script censé réaliser une copie du fichier .ics d'origine et j'obtiens
un message d'erreur qui me dit que je n'ai pas l'autorisation d'accès à
ce fichier!


Bon j'ai réécrit le script différemment et ça marche. Pas le temps de chercher à
comprendre...

Merci quand même!


Avatar
Frédéric PONCET
s'il s'agit de récupérer un calendrier sous forme .ics, il
se trouve dans ~/Library/Calendars directement en .ics.



J'y avais pensé. Mais il y a un autre problème. J'ai aussi écrit un
script censé réaliser une copie du fichier .ics d'origine et j'obtiens
un message d'erreur qui me dit que je n'ai pas l'autorisation d'accès
à ce fichier!



Bon j'ai réécrit le script différemment et ça marche


Arrf!!!
non, ça ne marche plus!!!
Mais voici un début d'explication (lu sur la console) :

2004-05-20 20:17:14.039 iCal[2595] WARNING : isEqual ran on two dates of
different type

On va creuser cette histoire de types de dates...
P.S. le script ne fait pas que copier un calendrier. Il crée d'abord un
calendrier à partir de certains évènements lus dans un autre calendrier (celui
qui est synchronisé avec le Palm).
Le but est d'avoir un calendrier publiable sur internet, qui ne contienne que
certains évènements.



Avatar
Frédéric PONCET
s'il s'agit de récupérer un calendrier sous forme .ics, il
se trouve dans ~/Library/Calendars directement en .ics.

J'y avais pensé. Mais il y a un autre problème. J'ai aussi écrit un

script censé réaliser une copie du fichier .ics d'origine et
j'obtiens un message d'erreur qui me dit que je n'ai pas
l'autorisation d'accès à ce fichier!


Bon j'ai réécrit le script différemment et ça marche


non, ça ne marche plus!!!
P.S. le script ne fait pas que copier un calendrier. Il crée d'abord un
calendrier à partir de certains évènements lus dans un autre calendrier
(celui qui est synchronisé avec le Palm).
Le but est d'avoir un calendrier publiable sur internet, qui ne
contienne que certains évènements.


Cette fois ça marche pour de bon. Entre l'appel à iCal et l'appel au Finder, il
fallait laisser un peu de temps (j'ai mis delay 5 mais on peut sans doute
réduire) pour que iCal ait le temps d'écrire dans le fichier.




Avatar
DINH Viêt Hoà

Cette fois ça marche pour de bon. Entre l'appel à iCal et l'appel au Finder, il
fallait laisser un peu de temps (j'ai mis delay 5 mais on peut sans doute
réduire) pour que iCal ait le temps d'écrire dans le fichier.


Peux-tu montrer ce que fait ton script ?

--
DINH V. Hoa,

"dans la famille, on est tous intelligents" -- sunZ

Avatar
Frédéric PONCET



Cette fois ça marche pour de bon. Entre l'appel à iCal et l'appel au Finder, il
fallait laisser un peu de temps (j'ai mis delay 5 mais on peut sans doute
réduire) pour que iCal ait le temps d'écrire dans le fichier.



Peux-tu montrer ce que fait ton script ?

C'est-à-dire?


Voici une description :

Il identifie les évènements de l'année qui comportent une balise dans le titre
("->mcal" en l'occurrence) puis les copie dans un autre calendrier puis copie ce
calendrier sur le bureau (cette phase est d'ailleurs inutile, en fait!)

Mon idée est d'appeler ce script par un script shell (lui-même appelé par
crontab) qui transfèrerait ensuite ce calendrier par FTP sur un site internet
avec phpicalendar. Donc en fait, on peut transférer directement le fichier .ics
d'origine, pas besoin d'en faire une copie locale...

Au final, ce script me permettrait de publier sur un site certains évènements de
mon Palm (qui ne gère qu'un seul calendrier, malheureusement).

Voici le script (mal écrit, c'est encore un proto) :

set nomcalMoncalendrier to "Mon calendrier"
set baliseMoncalendrier to "->mcal"
tell application "iCal"
if (calendars whose title is nomcalMoncalendrier) exists then
set calpalm to a reference to (calendars whose title is "Principal")
set calMoncalendrier to a reference to (calendars whose title is
nomcalMoncalendrier)
set balise to baliseMoncalendrier
set lb to length of balise
set evenements to (events of calpalm whose summary contains balise and start
date is greater than date "mercredi 31 décembre 2003 0:00:00" and start date is
less than date "vendredi 31 décembre 2004 0:00:00")
repeat with evenement in evenements
set resume to summary of evenement
set longueur to length of resume
set titre to characters 1 thru (longueur - lb) of resume as string
log titre
try
set notes to description of evenement as string
on error
set notes to "NC"
end try
set dateev to start date of evenement
set datefinev to end date of evenement
make new event with properties {summary:titre, description:notes, start
date:dateev, end date:datefinev} at the end of events of calMoncalendrier
end repeat
else
display dialog "Le calendrier " & nomcalMoncalendrier & " n'existe pas.
Veuillez d'abord le télécharger."
end if
end tell
quit application "iCal"
--A partir de là c'est inutile!
delay 5
tell application "Finder"
--lister les utilisateurs
set comptes to folders of folder "Users" of startup disk
repeat with compte in comptes
try
set cible to folder "Bureau" of compte
set origine to folder "Sites:Calendars" of compte

--Lister les éléments à sauvegarder
set calendriers to files of origine

--Effectuer le déplacement
repeat with element in calendriers
set nom_element to name of element
if nom_element = "Moncalendrier.ics" then
try
duplicate element to cible
on error
display dialog "Copie impossible." giving up after 2
end try
else
--Les autres on s'en fout!
end if
end repeat
on error
--Normal, accès aux autres comptes impossibles
end try
end repeat
end tell


Avatar
DINH Viêt Hoà

set nomcalMoncalendrier to "Mon calendrier"
set baliseMoncalendrier to "->mcal"
tell application "iCal"
if (calendars whose title is nomcalMoncalendrier) exists then
set calpalm to a reference to (calendars whose title is "Principal")
set calMoncalendrier to a reference to (calendars whose title is
nomcalMoncalendrier)
[ ... ]
else
display dialog "Le calendrier " & nomcalMoncalendrier & " n'existe pas.
Veuillez d'abord le télécharger."
end if
end tell
quit application "iCal"
--A partir de là c'est inutile!
delay 5


au lieu de ce délai de 5 secondes, ne peux-tu pas demander à iCal de
forcer la sauvegarde de son calendrier ?
N'existe-t-il pas de méthode du genre "sauvegarder" sur le type de
données "calendrier" ?

--
DINH V. Hoa,

"Les gens sont trop cons." -- Cent Quarante-Six