Obtendo o Feed Zend_gdata para um calendário específico do Google
-
20-09-2019 - |
Pergunta
Eu tinha uma pergunta longa detalhada sobre como obter um feed de eventos de calendário específico, mas imaginei (acho) uma solução antes de postar. No entanto, mesmo com a solução Fiquei me perguntando o que estou perdendo sobre esse processo. Para obter um único feed de eventos de um único calendário (ou para pesquisar esse feed), faço o seguinte:
- Autenticar (obviamente)
- Obtenha uma lista de calendários: getCalendarlistfeed ();
- Obtenha a propriedade de identificação de um dos objetos 'calendário'
- Mudança: .../calendário/feeds/default/xxx%40yyy
- Para: .../calendário/feeds/xxx%40yyy/privado/completo
- Passe isso para getcalendareventfeed () para consultar esse calendário.
Por que eu tenho que manipular o ID? Parece que a documentação para Zend_GData está espalhada pelos sites do Google e Zend. Não localizei uma boa referência sobre as propriedades disponíveis do getCalendarlistFeed (), então talvez eu deva pegar algo diferente do ID?
Parece que lá tem Para ser mais direto - o que estou perdendo aqui?
Solução
Você não precisa manipular o ID.
Se você olhar para o Guia de protocolo, há um <link rel="alternate" .../>
elemento que contém o URL que você deseja.
No cliente PHP, você pode recuperar este link ligando:
// $entry is an instance of Zend_Gdata_Calendar_ListEntry
$link = $entry->getAlternateLink()->getHref();
Além disso, a documentação que você está procurando está aqui:http://framework.zend.com/apidoc/1.9/zend_gdata/calendar/zend_gdata_calendar_listentry.html
Outras dicas
Eu estava procurando uma resposta para a mesma pergunta e, eventualmente, criei o seguinte:
$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');
A parte que me jogou no começo foi que a parte do "usuário" da chamada é na verdade o ID do calendário. Então você pode fazer algo como:
$events = $Service->getCalendarEventFeed($Query);
foreach ($events as $Event)
{
// work with Event object here...
}
(O exposto acima deve realmente ser fechado em uma tentativa/captura, mas estou com preguiça de fazer isso aqui.)