3 votes

Comment insérer dans un agenda Google qui n'est pas par défaut en utilisant Zend / PHP ?

J'essaie d'insérer un nouvel événement dans Google Agenda, ce que j'arrive à faire de la manière suivante :

$sname = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // predefined service name for calendar
$client = Zend_Gdata_ClientLogin::getHttpClient($userName,$password,$sname);
$service = new Zend_Gdata_Calendar($client);

$event = $service->newEventEntry();
$event->title = $service->newTitle($name);
$event->when = array($when);
$newEvent = $service->insertEvent($event);

Toutefois, cette insertion ne se fait que dans le calendrier par défaut. J'essaie d'utiliser l'argument URI de insertEvent pour arriver à mes fins :

$uri = "http://www.google.com/calendar/feeds/default/something@somethingelse.com/private/full";
$newEvent = $service->insertEvent($event, $uri);

Ça n'a pas marché. J'ai essayé d'encoder et de décoder l'URI, ce qui me donne différents messages d'erreur, mais je n'arrive pas à le faire fonctionner. Cela fait des heures que je cherche des solutions sur Google, sans succès. Quelqu'un peut-il m'aider ?

Merci. - Dave

4voto

davearchie Points 187

J'ai trouvé le problème : L'URI ci-dessus ne fonctionne pas : " http://www.google.com/calendar/feeds/ par défaut /something@somethingelse.com/private/full" ;

ne devrait pas avoir la section par défaut à cet endroit.

De même, le signe @ devrait être remplacé par l'encodage. Donc ça devrait être : " http://www.google.com/calendar/feeds/something%40somethingelse.com/private/full " ;

3voto

Kurt Points 116

Je me suis battu contre cela pendant un certain temps et j'ai finalement réussi à le faire fonctionner. Ce n'est pas très bien emballé, mais c'est la réponse que je cherchais.

Vous devez d'abord obtenir l'identifiant du calendrier. Si vous allez dans votre calendrier et cliquez sur l'icône de la flèche vers le bas à côté du nom, vous verrez une option pour les paramètres du calendrier. Sélectionnez cet élément de menu. En bas de la page, vous verrez Adresse du calendrier. Il vous faudra un moment pour trouver l'ID du calendrier, qui ressemblera à ceci

(Calendrier ID : o4g3921hdiaq5p8kdat2l4vgis@group.calendar.google.com)

Vous voulez o4g39j1hdihq4p8kdat2l4vgis@group.calendar.google.com

Plus tard, j'aurai envie de le faire en php, mais pour l'instant je peux coder en dur. J'ai donc défini une variable comme suit

$calendar_user = 'o4g39j1hdihq4p8kdat2l4vgis@group.calendar.google.com';

Lorsque vous récupérez des événements, vous devez définir l'utilisateur comme suit

$gdataCal = new Zend_Gdata_Calendar($client);
$query = $gdataCal->newEventQuery();
$query->setUser($calendar_user);

Mais lorsque vous ajoutez un événement, vous ne pouvez pas faire cela, vous devez utiliser le $calendar_user au moment où vous insérez l'événement.

Voici donc le code complet

$calendar_user = 'o4g39j1hdihq4p8kdat2l4vgis@group.calendar.google.com';
$user = 'myemail@yahoo.com';
$pass = 'mygooglecalendarpassword';
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // predefined service name for calendar
$client = Zend_Gdata_ClientLogin::getHttpClient($user,$pass,$service);

$gc = new Zend_Gdata_Calendar($client);
$newEntry = $gc->newEventEntry();
$newEntry->title = $gc->newTitle("mytitle");
$newEntry->where  = array($gc->newWhere("meeting place"));

$newEntry->content = $gc->newContent("Meeting description");
$newEntry->content->type = 'text';

$when = $gc->newWhen();
$when->startTime = "{'2012-06-28'}T{'10:00'}:00.000{'-08'}:00";
$when->endTime = "{'2012-06-28'}T{'11:00'}:00.000{'-08'}:00";
$newEntry->when = array($when);

$createdEvent = $gc->insertEvent($newEntry, "http://www.google.com/calendar/feeds/".$calendar_user."/private/full");

Maintenant, j'espère que c'est utile. Je vous dis que cela m'a pris beaucoup trop de temps pour comprendre, mais je ne suis pas le gars le plus intelligent du monde.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X