2009-10-08 7 views
5

Ich hatte eine lange detaillierte Frage, wie ich den Ereignis-Feed eines bestimmten Kalenders bekommen kann, aber ich habe mir eine Lösung ausgedacht, bevor ich gepostet habe. Aber selbst mit der Lösung frage ich mich, was ich an diesem Prozess vermisse. Um einen einzelnen Kalender des Ereignis-Feed zu erhalten (oder dass Futtermittel zu suchen) Ich folgendes:Den Zend_GData Feed für einen bestimmten Google Kalender erhalten

  • Authentifizieren (natürlich)
  • Hier finden Sie eine Liste der Kalender: getCalendarListFeed();
  • die ID-Eigenschaft von einem der 'Kalender' Get Objekte
  • ändern: .../Kalender/Feeds/default/XXX% 40YYY
  • An: .../Kalender/Feeds/XXX% 40YYY/privat/voll
  • Übergeben Sie das an getCalendarEventFeed(), um nach diesem Kalender abzufragen.

Warum muss ich die ID manipulieren? Es scheint, als ob die Dokumentation für Zend_Gdata auf den Websites von Google und Zend verbreitet ist. Ich habe keine gute Referenz auf verfügbare Eigenschaften von getCalendarListFeed() gefunden, also sollte ich vielleicht etwas anderes als die ID greifen?

Es scheint wie dort hat, um direkter Weg zu sein - was fehlt mir hier?

Antwort

3

Sie müssen die ID nicht manipulieren. Wenn Sie sich die protocol guide ansehen, gibt es ein <link rel="alternate" .../> Element, das die von Ihnen gewünschte URL enthält.

Im PHP-Client können Sie auf diesen Link, durch den Aufruf abzurufen:

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

Auch die Dokumentation Sie suchen ist hier: http://framework.zend.com/apidoc/1.9/Zend_Gdata/Calendar/Zend_Gdata_Calendar_ListEntry.html

2

ich dies für eine Antwort war auf der Suche gleiche Frage und kam schließlich mit dem Follow-up:

$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'); 

der Teil, der mich auf den ersten abwarf war, dass die „user“ porti Ein Anruf ist die Kalender-ID. Dann können Sie so etwas wie:

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

(Die oben wirklich in einem try/catch eingeschlossen werden soll, aber ich bin zu faul, das hier zu tun.)

+0

Die calendarid ist die E-Mail-Adresse der Kalender in den privaten Einstellungen. setVisibility -> ('privat'); # für privaten Kalender (nicht öffentlich) –

Verwandte Themen