2009-05-12 15 views
11

Bir kullanıcı için blog oluşturma aşamasındayım. Çok fazla veriyi çekmek ve onu oldukça sıkı bir şekilde tasarıma entegre etmek istiyorlar, bu yüzden standart gereçler no-no'dur. Şimdiye kadar iyi oldu.Google Calendar etkinliklerini PHP'de alma

Çeşitli etkinliklere sahip herkese açık bir Google Takvimine sahipler ve sonraki 5 etkinliği ("şimdi" den başlayarak) almak istiyorum ve etkinlik başlığının, bu olayın başlangıcı, konumu ve bir gcal maddesine bağlantı.

Görebildiğim kadarıyla, gcal özet akışlarını yakalamak için üç seçenek vardır: XML, ical veya HTML (bazı gerçekten JSON'u içeren). XML mantıksal seçim gibi görünüyor, değil mi?

XML beslemesi, aslında (çok sayıda sahte HTML). Bunu ayrıştırmak mümkündür, ancak arka planda büyük bir acıdır çünkü (bu olayda takvim üzerinde birkaç tane bulunan) yinelenen olaylar yalnızca o olayın ilk örneğini gösterir ve (görünüşte) bir sonraki örneğin ne zaman olduğu hakkında bilgi yoktur.

Ben sadece biraz yoğun muyum? İstediğimi XML API ile kesmek için bir yol var mı?

Ya da iCal'den daha iyi şansım olur mu? PHP ile hiçbir zaman iCal yapmadım, eğer varsa, lütfen işleri kendiniz için daha basit hale getirdiğiniz herhangi bir libe'yi öneriniz.

Düzenleme: cevaba teşekkürler, ben (neyse ki Zend Framework geri kalanına ayrı olan) Zend Gveri paketi indirdim. Ben bu kadar kolay olduğunu gerek yapıyor:

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 

size olayların bir hafta yetmeyecek (evet setStartMax münhasır yüzden gereklidir gelecekte o 8 gün kuruyor) almak gerektiğini. Umarım bu, gelecekte başkalarına yardımcı olur.

cevap

8

Başka bir seçenek de size bir kez o kadar da zor değil bütün zend framework

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

gerekmez böylece zend framework ayrı bir parçasıdır Zend Google Takvim kütüphane kullanmaktır Örneklere bir göz atın.

+0

Bunu sormadan önce gördüm ama isimdeki "Zend" tarafından korktum. Şimdi bütün bu çeperli çerçeveye ihtiyacım olmadığını söylediniz, ona uygun bir görünüm vereceğim. Teşekkürler. – Oli

1

Kodu kullanan herkesin başına geldiği gibi, echo $event; benim için hiçbir şey göstermedi, bu yüzden sorgunun başarısız olduğunu düşündüm. İşte

şey yazdırmalısınız pasajıdır: başka kimseyi yardımcı durumda

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

, ben varsayılan dışında takvimleri almak için yolunu bulmuştur. Google takviminize gidip takvim ayarlarına bakarsanız, altta, gerçekten uzun bir e-posta adresi gibi biçimlendirilmiş bir takvim kimliği bulunur. (Örnek: [email protected]) Bunu $ query- ile kullanın. > Belirli bir takvimi kullanmak için setUser().

+0

Teşekkürler ... Bunu nasıl yapacağınız için web'i inceliyordum! –