Получение канала Zend_GData для определенного календаря Google - PullRequest
5 голосов
/ 08 октября 2009

У меня был длинный подробный вопрос о том, как получить конкретную ленту событий календаря, но я решил (как мне кажется) решение до того, как опубликовать. Однако даже с решением мне интересно, чего мне не хватает в этом процессе. Чтобы получить канал событий одного календаря (или найти этот канал), я делаю следующее:

  • Аутентифицировать (очевидно)
  • Получить список календарей: getCalendarListFeed ();
  • Получить свойство id из одного из объектов 'calendar'
  • Изменить: ... / календарь / каналы / по умолчанию / XXX% 40YYY
  • Кому: ... / календарь / каналы / XXX% 40YYY / личное / полное
  • Передайте это getCalendarEventFeed () для запроса этого календаря.

Почему я должен манипулировать идентификатором? Кажется, что документация для Zend_Gdata распространяется как на сайты Google, так и на сайты Zend. Я не нашел хорошую ссылку на доступные свойства из getCalendarListFeed (), так что, может быть, я должен получить что-то кроме идентификатора?

Кажется, что имеет , чтобы быть более простым - что мне здесь не хватает?

Ответы [ 2 ]

3 голосов
/ 22 декабря 2009

Вам не нужно манипулировать ID.

Если вы посмотрите на руководство по протоколу , есть элемент <link rel="alternate" .../>, содержащий нужный вам URL.

В клиенте PHP вы можете получить эту ссылку, вызвав:

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

Кроме того, документация, которую вы ищете, находится здесь: http://framework.zend.com/apidoc/1.9/Zend_Gdata/Calendar/Zend_Gdata_Calendar_ListEntry.html

2 голосов
/ 31 декабря 2009

Я искал ответ на этот же вопрос и в итоге придумал следующее:

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

Сначала меня оттолкнуло то, что «пользовательская» часть звонка на самом деле является идентификатором календаря. Тогда вы можете сделать что-то вроде:

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

(Вышесказанное действительно должно быть включено в try / catch, но мне лень это делать здесь.)

...