Pergunta

Eu estou no processo de criação de um blog para alguém. Eles querem puxar um monte de dados e integrá-lo muito bem no projeto, de modo widgets padrão são um não-não. Isso tem sido muito bem até agora.

Eles têm um acesso público do Google Calendar com vários eventos sobre ele e eu quero agarrar os próximos 5 eventos (de "agora" em diante) e exibir o título do evento, quando essa instância do início do evento, a sua localização e um link para o item Gcal.

Pelo que posso ver, existem três opções para pegar alimentos GCAL: XML, iCal ou HTML (contendo alguns realmente bater JSON). XML parece ser a escolha lógica, certo?

Bem, o feed XML é (após a descrição Feed Atom) realmente apenas um monte de Faffy HTML. Analisando isso é possível, mas é uma dor enorme no para trás porque os eventos (da qual existem várias no calendário) recorrentes mostrar somente a primeira instância desse evento e (aparentemente) nenhuma informação sobre quando a próxima instância é.

Então, estou apenas a ser um pouco denso? Existe uma maneira de mostrar o que eu quero apenas cortar através da API XML?

Ou eu teria melhor sorte através iCal? Eu nunca fiz qualquer iCal com PHP por isso, se você tem, por favor sugerir qualquer libs que você usou para fazer as coisas mais simples para si mesmo.

Editar: graças à resposta, eu baixei o pacote Zend Gdata (que, felizmente, é separado do resto do Zend Framework). Fazendo o que eu precisava era tão simples como isto:

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_HttpClient');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
$service = new Zend_Gdata_Calendar();
$query = $service->newEventQuery();

$query->setUser('your_user@googlemail.com');

$query->setVisibility('public');
$query->setProjection('full');
$query->setStartMin(date('Y-n-j'));
$query->setStartMax(date('Y-n-j', time() + (60*60 *24*8)));
$query->setOrderby('starttime');

try { $eventFeed = $service->getCalendarEventFeed($query); }
catch (Zend_Gdata_App_Exception $e) { return; }

foreach ($eventFeed as $event) 
    echo $event; // do something real here

Que você deveria ir uma semana de eventos (sim setStartMax é exclusivo assim definindo-8 dias no futuro é necessária).

Espero que isso ajude alguém no futuro.

Foi útil?

Solução

Outra opção é usar a biblioteca Calendário Zend Google, é uma parte separada do Zend Framework para que você não precisa do quadro inteiro zend

http://framework.zend.com/manual/en /zend.gdata.calendar.html

não é tão difícil quando você tem um olhar para os exemplos.

Outras dicas

Em caso de ajuda qualquer outra pessoa, eu descobri como obter diferente do padrão calendários. Se você entrar em seu calendário google e olhar para cima configurações do calendário, na parte inferior há um ID calendário que é formatado como um endereço de e-mail muito longo. (Exemplo: adg5jcq8gk7lsp6rrbmrm8c@group.calendar.google.com) Use isso com $ query- > setuser () para usar esse calendário específico.

Como um heads-up para qualquer pessoa que use o código, echo $event; não exibe nada para mim, então eu pensei que a consulta estava falhando.

Aqui está um trecho que deve imprimir algo:

foreach ($eventFeed as $event) {
  echo $event->title->text . '<br />';
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top