2009-10-08 8 views
5

J'avais une longue question détaillée sur la façon d'obtenir le flux d'événements d'un calendrier spécifique, mais j'ai pensé (je pense) à une solution avant de poster. Cependant, même avec la solution je me demande ce qui me manque dans ce processus. Pour obtenir un feed d'événements de calendrier (ou pour la recherche que l'alimentation) Je fais ce qui suit:Obtenir le flux Zend_GData pour un calendrier Google spécifique

  • Authentifier (évidemment)
  • obtenir une liste des calendriers: getCalendarListFeed();
  • obtenir la propriété id de l'un des 'calendrier' des objets
  • Change: .../calendrier/feeds/default/XXX% 40YYY
  • Pour: .../Calendrier/feeds/XXX% 40YYY/private/full
  • Passez cela à getCalendarEventFeed() pour interroger ce calendrier.

Pourquoi dois-je manipuler l'ID? Il semble que la documentation de Zend_Gdata soit répartie sur les sites de Google et de Zend. Je n'ai pas trouvé une bonne référence sur les propriétés disponibles de getCalendarListFeed(), donc peut-être que je devrais attraper autre chose que l'ID?

Il semblerait que ait pour être plus simple - qu'est-ce qui me manque ici?

Répondre

3

Vous n'avez pas besoin de manipuler l'ID.

Si vous regardez le protocol guide, il y a un élément <link rel="alternate" .../> qui contient l'URL que vous voulez.

Dans le client PHP, vous pouvez récupérer ce lien en appelant:

// $entry is an instance of Zend_Gdata_Calendar_ListEntry 
$link = $entry->getAlternateLink()->getHref(); 

En outre, la documentation que vous cherchez est ici: http://framework.zend.com/apidoc/1.9/Zend_Gdata/Calendar/Zend_Gdata_Calendar_ListEntry.html

2

que je cherchais une réponse à cette même question et, finalement, est venu avec les éléments suivants:

$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; 
$Client = Zend_Gdata_ClientLogin::getHttpClient('googleaccount','googlepass',$service); 
$Service = new Zend_Gdata_Calendar($Client); 

$Query = $Service->newEventQuery(); 
$Query->setUser('calendarid'); # As you know, you can obtain this with getCalendarListFeed() 
$Query->setVisibility('public'); 
$Query->setProjection('full'); 
$Query->setOrderby('starttime'); 
$Query->setFutureevents('true'); 

la partie qui me jeta dans un premier temps était que le « utilisateur » Porti de l'appel est en fait l'ID du calendrier. Ensuite, vous pouvez faire quelque chose comme:

$events = $Service->getCalendarEventFeed($Query); 
foreach ($events as $Event) 
{ 
    // work with Event object here... 
} 

(dans un try/catch ci-dessus devrait vraiment être enfermé, mais je suis trop paresseux pour le faire ici.)

+0

Le calendarid est l'adresse e-mail du calendrier dans les paramètres privés. setVisibility -> ('private'); # pour le calendrier privé (non public) –

Questions connexes