2009-08-28 27 views
6

Ho ricevuto feed XML dal calendario pubblico di Google. Sembra che questo:Analisi del calendario di Google Feed 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'/> 

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

Ora per 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> 
} 

Il problema è come ottenere valore da qui?

<gml:pos>11.111111 -22.22222</gml:pos> 

Non presente nella mia variabile $ gd, come ottenere questo nodo?

risposta

10

Consiglio vivamente di utilizzare questa libreria: https://github.com/collegeman/coreylib. Renderà tutto dall'inizio alla fine incredibilmente facile.

+1

Oh questo è semplicemente geniale. Grazie per avermi mostrato questa libreria :) – 6bytes

+0

Haha, piacere! è fantastico, non è vero? –

+0

Questo è molto impressionante –

1

È possibile utilizzare la libreria GData di Zend per analizzare i servizi Web di Google (incluso il calendario). È più facile che provare a utilizzare il codice XML manualmente. C'è un tutorial che ti mostra come fare questo here.

+0

Grazie ma coreylib ha funzionato come per magia :) – 6bytes

+0

Hai un nuovo link? – Zoredache

5

Esistono ovviamente diversi modi per analizzare l'XML. Display Google Calendar events on your PHP Web site with XPath (vedi "Analisi del feed di Google Calendar con PHP") e Integrate your PHP application with Google Calendar sono due risorse complete con codice di esempio e altro.

Personalmente, ho usato il seguente approccio:

$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)); 
    // ... 
} 

Per poter accedere al GeoRSS namespace ecc dare un'occhiata (e la sua uscita)

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

completa calendario era molto più facile che Coreylib. Coreylib non era semplice, anche se sono sicuro che è molto potente.

Avevo FullCalendar in esecuzione in 5 minuti. http://arshaw.com/fullcalendar/docs/google_calendar/

+2

Questa domanda è contrassegnata da php, quindi la tua soluzione jQuery è fuori linea e fuorviante se non stai nemmeno affermando che si tratta di un'alternativa jQuery. – wdyp