2009-08-28 11 views
6

J'ai un flux XML à partir de google calendar public. On dirait ceci:Analyse de flux google calendar XML

<?xml version='1.0' encoding='UTF-8'?> 
    <feed xmlns='................' xmlns:gd='http://schemas.google.com/g/2005'> 
     <id>http://www.google.com/calendar/feeds/........./public/full</id> 
     <updated>2009-08-24T10:57:00.000Z</updated> 
     <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'/> 
      <title type='text'>Sports Events</title> 
    ..... 
     <entry> 
      <id>...........</id> 
      <published>2009-08-14T00:29:58.000Z</published> 
      <updated>2009-08-14T00:29:58.000Z</updated> 
      <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'/> 
.............. 
      <georss:where> 
       <gml:Point> 
        <gml:pos>11.111111 -22.22222</gml:pos> 
       </gml:Point> 
      </georss:where> 
      <gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'/> 
      <gd:transparency value='http://schemas.google.com/g/2005#event.transparent'/> 
      <gCal:uid value='[email protected]'/> 
      <gCal:sequence value='0'/> 
      <gd:when startTime='2009-10-03' endTime='2009-10-04'/> 

............. 

maintenant à PHP:

$calendar = simplexml_load_file('http://my.feed.com'); 
foreach ($calendar->entry as $item) { 
    //here I get the whole <entry> node 
    $gd = $item->children('http://schemas.google.com/g/2005'); 
    // now in $gd I have all nodes like <gd:XXXXX> 
} 

Le problème est de savoir comment obtenir la valeur d'ici? Ce n'est pas présent dans ma variable $ gd, comment obtenir ce noeud?

Répondre

10

Je recommande fortement d'utiliser cette bibliothèque: https://github.com/collegeman/coreylib. Il va tout faire du début à la fin facilement angoissant.

+1

Oh, c'est juste génial. Merci de me montrer cette bibliothèque :) – 6bytes

+0

Haha mon plaisir! c'est génial, n'est-ce pas? –

+0

C'est très impressionnant –

1

Vous pouvez utiliser la bibliothèque Zend GData pour analyser les services Web Google (y compris le calendrier). C'est plus facile que d'essayer d'utiliser le code XML manuellement. Il y a un tutoriel qui vous montre comment faire cela here.

+0

Merci, mais coreylib a fonctionné comme par magie :) – 6bytes

+0

Avez-vous un nouveau lien? – Zoredache

5

Il existe bien sûr plusieurs façons d'analyser le code XML. Display Google Calendar events on your PHP Web site with XPath (voir "Analyse du flux Google Agenda avec PHP") et Integrate your PHP application with Google Calendar sont deux ressources complètes avec un exemple de code et plus encore.

Personnellement, j'utilisé l'approche suivante:

$doc = new DOMDocument(); 
$doc->load('http://my.feed.com'); 
$entries = $doc->getElementsByTagName("entry"); 
foreach ($entries as $entry) { 
    $titles = $entry->getElementsByTagName("title"); 
    $title = $titles->item(0)->nodeValue; 

    $times = $entry->getElementsByTagName("when"); 
    $startTime = $times->item(0)->getAttributeNode("startTime")->value; 
    $when = date("l jS \o\f F Y - h:i A", strtotime($startTime)); 
    // ... 
} 

Pour accéder à l'espace de noms georss etc. jeter un oeil à (et sa sortie)

foreach ($doc->getElementsByTagNameNS('*', '*') as $element) { 
    echo 'localName: ', $element->localName, ', prefix: ', $element->prefix, "\n"; 
} 
0

Calendrier complet était beaucoup plus facile que Coreylib. Le Coreylib n'est pas mortellement simple, même si je suis sûr qu'il est très puissant.

J'ai exécuté FullCalendar en 5 minutes. http://arshaw.com/fullcalendar/docs/google_calendar/

+2

Cette question est étiquetée php, donc votre solution jQuery est hors de la ligne et trompeuse si vous ne dites même pas qu'il s'agit d'une alternative jQuery. – wdyp