2009-08-28 15 views
6

Mam plik XML z publicznego kalendarza google. Wygląda następująco:Parsowanie pliku danych XML z kanału google

<?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'/> 

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

Teraz 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> 
} 

Problemem jest to, w jaki sposób uzyskać wartość stąd?

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

Nie ma go w mojej zmiennej $ gd, jak zdobyć ten węzeł?

Odpowiedz

10

Bardzo polecam korzystanie z tej biblioteki: https://github.com/collegeman/coreylib. Sprawi, że wszystko od początku do końca stanie się niewiarygodnie proste.

+1

Och, to jest po prostu genialne. Dziękuję za pokazanie mi tej biblioteki :) – 6bytes

+0

Haha, moja przyjemność! to jest świetne, prawda? –

+0

To jest bardzo imponujące –

1

Możesz używać biblioteki Zend GData do analizowania usług internetowych Google (w tym kalendarza). To łatwiejsze niż ręczne użycie kodu XML. Jest tutorial, który pokazuje, jak to zrobić here.

+0

Dzięki, ale coreylib działał jak magia :) – 6bytes

+0

Czy masz nowy link? – Zoredache

5

Istnieje oczywiście kilka sposobów analizy kodu XML. Display Google Calendar events on your PHP Web site with XPath (patrz "Analizowanie pliku kalendarza Google w PHP") i Integrate your PHP application with Google Calendar to dwa kompleksowe zasoby z przykładowym kodem i wieloma innymi.

Osobiście stosowane następujące podejście:

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

W celu uzyskania dostępu do georss namespace itp przyjrzeć się (i jego wyjście)

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

Pełny kalendarz był dużo łatwiejszy niż Coreylib. Coreylib nie był prosty, ale jestem pewien, że jest bardzo potężny.

Miałem FullCalendar działa w 5 minut. http://arshaw.com/fullcalendar/docs/google_calendar/

+2

To pytanie jest oznaczone jako php, więc Twoje rozwiązanie jQuery jest nie na miejscu i wprowadzające w błąd, nawet jeśli nie twierdzisz, że jest to alternatywa jQuery. – wdyp