Google takvim XML beslemesini ayrıştırma

4 Cevap php

Ben kamu google takvimden XML beslemesini var. Bu gibi görünüyor:

<?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='.........@google.com'/>
			<gCal:sequence value='0'/>
			<gd:when startTime='2009-10-03' endTime='2009-10-04'/>

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

Şimdi 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>
}

Sorun buradan değerini almak nasıl?

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

Bu benim $ gd değişkeni mevcut değil, nasıl bu düğümü almak için?

4 Cevap

Ben çok bu kütüphaneyi kullanan tavsiye: https://github.com/collegeman/coreylib. Bu baştan her şeyi akıllara zarar kolay bitirmek için yapacağız.

XML ayrıştırmak için çeşitli yollar elbette vardır. Display Google Calendar events on your PHP Web site with XPath ("PHP ile Google Takvim yayınını Ayrıştırma") ve Integrate your PHP application with Google Calendar örnek kod ve daha fazla olan iki kapsamlı kaynaklar vardır.

Şahsen ben şu yaklaşımı kullanılmıştır:

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

Namespace vb georss erişmek için bir bakmak (ve çıkış) var

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

Sen (takvime dahil) Google web hizmetleri ayrıştırmak için Zend GData kütüphane kullanabilirsiniz. Manuel XML kodu kullanmak için çalışırken daha kolay. Bu here nasıl gösterir bir öğretici vardır.

Tam Takvim Coreylib daha çok daha kolay oldu. Ben çok güçlü olduğunu eminim rağmen Coreylib, ölü basit damla değildi.

Ben FullCalendar 5 dakika içinde çalışan vardı. http://arshaw.com/fullcalendar/docs/google_calendar/