2009-08-28 28 views
6

Tôi đã nhận nguồn cấp dữ liệu XML từ lịch công khai trên google. Trông như thế này:Phân tích cú pháp google calendar Nguồn cấp dữ liệu 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'/> 

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

Bây giờ để 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> 
} 

Vấn đề là làm thế nào để nhận được giá trị từ đây?

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

Nó không có trong biến $ gd của tôi, cách nhận nút này?

Trả lời

10

Tôi khuyên bạn nên sử dụng thư viện này: https://github.com/collegeman/coreylib. Nó sẽ làm mọi thứ từ đầu đến cuối hoàn toàn dễ dàng.

+1

Ồ, điều này thật tuyệt vời. Cảm ơn bạn đã cho tôi xem thư viện này :) – 6bytes

+0

Haha niềm vui của tôi! thật tuyệt, phải không? –

+0

Điều đó rất ấn tượng –

1

Bạn có thể sử dụng thư viện Zata GData để phân tích các dịch vụ web của Google (bao gồm lịch). Nó dễ dàng hơn việc cố gắng sử dụng mã XML theo cách thủ công. Có một hướng dẫn cho bạn biết cách thực hiện điều này here.

+0

Cảm ơn nhưng coreylib đã hoạt động như ma thuật :) – 6bytes

+0

Bạn có liên kết mới không? – Zoredache

5

Có một số cách để phân tích cú pháp XML. Display Google Calendar events on your PHP Web site with XPath (xem phần "Phân tích nguồn cấp dữ liệu Lịch Google bằng PHP") và Integrate your PHP application with Google Calendar là hai tài nguyên toàn diện có mã mẫu và hơn thế nữa.

Cá nhân, tôi đã sử dụng phương pháp sau đây:

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

Để truy cập vào georss namespace vv có một cái nhìn tại (và sản lượng của nó)

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

Full Lịch là MUCH dễ dàng hơn so với Coreylib. Coreylib đã không được thả chết đơn giản, mặc dù tôi chắc chắn rằng nó là rất mạnh mẽ.

Tôi đã chạy FullCalendar trong 5 phút. http://arshaw.com/fullcalendar/docs/google_calendar/

+2

Câu hỏi này được gắn thẻ php, vì vậy giải pháp jQuery của bạn không phù hợp và gây hiểu nhầm nếu bạn thậm chí không nói đó là một giải pháp thay thế jQuery. – wdyp

Các vấn đề liên quan