2009-05-12 48 views
11

Tôi đang trong quá trình tạo blog cho ai đó. Họ muốn thu thập rất nhiều dữ liệu và tích hợp nó khá chặt chẽ vào thiết kế, vì vậy các tiện ích chuẩn là không có. Đó là tốt cho đến bây giờ.Bắt các sự kiện trên Lịch Google trong PHP

Họ có quyền truy cập công khai Lịch Google với nhiều sự kiện khác nhau và tôi muốn lấy 5 sự kiện tiếp theo (từ "bây giờ" trở đi) và hiển thị tiêu đề sự kiện, khi trường hợp đó bắt đầu, vị trí của nó và liên kết đến mục gcal.

Từ những gì tôi có thể thấy, có ba tùy chọn để lấy nguồn cấp dữ liệu gcal: XML, ical hoặc HTML (có chứa một số JSON thực sự whack). XML có vẻ giống như sự lựa chọn hợp lý, đúng không?

Vâng nguồn cấp dữ liệu XML là (sau mô tả nguồn cấp dữ liệu nguyên tử) thực sự chỉ có rất nhiều HTML faffy. Phân tích cú pháp này là có thể nhưng nó là một nỗi đau lớn ở phía sau bởi vì các sự kiện định kỳ (trong đó có một số trên lịch) chỉ hiển thị trường hợp đầu tiên của sự kiện đó và (dường như) không có thông tin về trường hợp kế tiếp.

Vì vậy, tôi chỉ là một chút dày đặc? Có cách nào để hiển thị những gì tôi muốn chỉ hack thông qua API XML?

Hoặc tôi có may mắn hơn thông qua iCal không? Tôi đã không bao giờ thực hiện bất kỳ iCal với PHP vì vậy nếu bạn có, xin vui lòng đề nghị bất kỳ libs bạn đã sử dụng để làm cho mọi thứ đơn giản hơn cho chính mình.

Edit: nhờ vào câu trả lời, tôi đã tải về các gói Zend Gdata (trong đó, may mắn, riêng biệt với phần còn lại của Zend Framework). Làm những gì tôi cần là dễ dàng như này:

require_once 'Zend/Loader.php'; 
Zend_Loader::loadClass('Zend_Gdata'); 
Zend_Loader::loadClass('Zend_Gdata_HttpClient'); 
Zend_Loader::loadClass('Zend_Gdata_Calendar'); 
$service = new Zend_Gdata_Calendar(); 
$query = $service->newEventQuery(); 

$query->setUser('[email protected]'); 

$query->setVisibility('public'); 
$query->setProjection('full'); 
$query->setStartMin(date('Y-n-j')); 
$query->setStartMax(date('Y-n-j', time() + (60*60 *24*8))); 
$query->setOrderby('starttime'); 

try { $eventFeed = $service->getCalendarEventFeed($query); } 
catch (Zend_Gdata_App_Exception $e) { return; } 

foreach ($eventFeed as $event) 
    echo $event; // do something real here 

Điều đó sẽ giúp bạn có được giá trị của một tuần các sự kiện (có setStartMax được độc quyền để thiết lập nó 8 ngày trong tương lai là cần thiết).

Hy vọng điều này sẽ giúp người khác trong tương lai.

Trả lời

8

lựa chọn khác là sử dụng thư viện Zend Lịch Google, nó là một phần riêng biệt của Zend Framework do đó bạn không cần toàn bộ khuôn khổ zend

http://framework.zend.com/manual/en/zend.gdata.calendar.html

nó không phải là khó khăn khi bạn hãy xem các ví dụ.

+0

Tôi đã thấy điều này trước khi hỏi nhưng đã bị "Zend" gây ra. Bây giờ bạn đã nói rằng tôi không cần toàn bộ khuôn khổ cludging, tôi sẽ cho nó một cái nhìn thích hợp. Cảm ơn. – Oli

1

Là người đứng đầu bất kỳ ai sử dụng mã, echo $event; không hiển thị bất kỳ thứ gì cho tôi, vì vậy tôi cho rằng truy vấn không thành công.

Dưới đây là một đoạn trích rằng nên in cái gì đó:

foreach ($eventFeed as $event) { 
    echo $event->title->text . '<br />'; 
} 
3

Trong trường hợp nó giúp bất cứ ai khác, tôi đã tìm ra cách để có được lịch khác hơn so với mặc định. Nếu bạn đi vào lịch google của mình và tra cứu cài đặt lịch, ở dưới cùng có ID lịch được định dạng giống như địa chỉ email thực sự dài (ví dụ: [email protected]) Sử dụng nó với $ query- > setUser() để sử dụng lịch cụ thể đó.

+0

Cảm ơn ... đã được cọ rửa trên web để biết cách thực hiện điều này! –

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