Question

Je suis en train de créer un blog pour quelqu'un. Ils veulent tirer dans un grand nombre de données et de l'intégrer très étroitement dans la conception, de sorte que les widgets standard sont un non-non. Cela a été bien jusqu'à présent.

Ils ont un Google accès public Calendrier avec divers événements sur et je veux saisir les 5 prochains événements (de « maintenant » et suivantes) et afficher le titre de l'événement, lorsque cette instance de l'événement commence, son emplacement et un lien à l'élément gcal.

D'après ce que je peux voir, il y a trois options pour saisir gcal flux: XML, HTML ou ical (contenant certains vraiment JSON assommer). XML semble être le choix logique, non?

Eh bien, le flux XML est (après la description d'alimentation atomique) fait juste beaucoup de faffy HTML. Parsing cela est possible, mais il est une énorme douleur dans le derrière parce que les événements récurrents (dont il existe plusieurs sur le calendrier) montrent que la première instance de cet événement et (apparemment) aucune information sur le moment où l'instance suivante est.

Alors, suis-je un peu dense? Y at-il un moyen de montrer ce que je veux simplement le piratage via l'API XML?

Ou devrais-je avoir plus de chance dans iCal? Je ne l'ai jamais fait de iCal avec PHP, donc si vous avez, s'il vous plaît suggérer des libs que vous avez utilisé pour rendre les choses plus simples pour vous-même.

Modifier grâce à la réponse, j'ai téléchargé le pack Zend Gdata (qui, heureusement, séparée du reste du Zend Framework). Faire ce que je besoin était aussi facile que ceci:

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

Cela devrait vous avoir pour des événements d'une semaine (oui setStartMax est exclusif couchait il 8 jours dans le futur est nécessaire).

Espérons que cela aide quelqu'un d'autre à l'avenir.

Était-ce utile?

La solution

Une autre option consiste à utiliser la bibliothèque de Google Calendar Zend, il est une partie distincte du cadre zend afin que vous n'avez pas besoin tout le zend framework

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

il est pas si difficile une fois que vous avez un regard sur les exemples.

Autres conseils

Dans le cas où il aide quelqu'un d'autre, je me suis dit comment obtenir des calendriers autres que la valeur par défaut. Si vous allez dans votre calendrier Google et de consulter les paramètres de calendrier, au fond il y a un ID de calendrier qui est formaté comme une adresse e-mail très long. (Exemple: adg5jcq8gk7lsp6rrbmrm8c@group.calendar.google.com) Utilisez cela avec $ query- > setUser () pour utiliser ce calendrier spécifique.

En tant que tête jusqu'à toute personne utilisant le code, ne pas afficher echo $event; quoi que ce soit pour moi, donc je pensais que la requête a été un échec.

Voici un extrait qui devrait imprimer quelque chose:

foreach ($eventFeed as $event) {
  echo $event->title->text . '<br />';
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top