2009-05-12 4 views
11

나는 누군가를 위해 블로그를 만드는 중입니다. 그들은 많은 데이터를 가져 와서 디자인에 아주 밀접하게 통합하기를 원하므로 표준 위젯은 아니오입니다. 지금까지는 괜찮 았어.PHP로 Google 캘린더 이벤트 받기

Google 캘린더에 다양한 이벤트가있는 공개 캘린더가 있으며 다음 5 개 이벤트 ('지금'이후부터)를 가져와 이벤트 제목이 시작될 때 해당 이벤트 인스턴스, 해당 위치 및 gcal 항목에 대한 링크

내가 볼 수 있듯이 gcal 피드를 잡는 방법에는 XML, ical 또는 HTML (JSON이 포함되어 있음)이 있습니다. XML은 논리적 인 선택처럼 보입니다. 맞습니까?

XML 피드는 (원자 피드 설명 다음에) 실제로는 너무 많은 faffy HTML입니다. 이 구문 분석은 가능하지만 반복 일정 (캘린더에는 여러 가지가 있음)이 해당 이벤트의 첫 번째 인스턴스와 다음 인스턴스가 언제인지에 대한 정보 만 표시하기 때문에 뒤에서 큰 고통이됩니다.

그래서 나는 조금 더 밀도가 있습니까? XML API를 통해 해킹하고 싶은 것을 보여줄 수 있습니까?

아니면 iCal을 통해 행운을 빕니다. 필자는 PHP로 iCal을 한 번도 사용 해본 적이 없기 때문에 직접 작성한 라이브러리를 제안 해주십시오.

편집 : 대답에 덕분에, 나는 (다행히도, 는 젠드 프레임 워크의 나머지 부분에 별도의입니다) 젠드 Gdata는 팩을 다운로드했습니다. 나는이만큼 쉬웠다 필요가 일을 :

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 

당신에게 사건의 일주일의 가치 (예 setStartMax 독점 그래서 요구되는 미래에 8 일 설정입니다)를 얻어야한다 그.

앞으로 도움이되기를 바랍니다.

답변

8

또 다른 옵션은 당신이 당신이 한 번이 어렵지 않다 전체 젠드 프레임 워크

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

이 필요하지 않도록 그것은 젠드 프레임 워크의 별도의 부분, 젠드 구글 캘린더 라이브러리를 사용하는 것입니다 예제를 살펴보십시오.

+0

나는 묻기 전에 이것을 보았지만 그 이름에 "Zend"가 두려웠다. 이제는 내가 틀에 박힌 프레임 워크가 필요 없다고 말했어. 감사. – Oli

1

누구나 코드를 사용하는 사람까지도 echo $event;은 나에게 아무 것도 표시하지 않았으므로 쿼리가 실패했다고 생각했습니다. 여기

뭔가 인쇄해야 조각이다 : 그것은 다른 사람을 도움이 경우

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

을, 나는 기본값이 아닌 다른 달력을 얻는 방법을 알아 냈어. Google 캘린더에 들어가서 캘린더 설정을 검색하면, 정말 긴 이메일 주소처럼 형식화 된 캘린더 ID가 있습니다 (예 : [email protected]). $ query- > setUser()를 호출하여 특정 달력을 사용합니다.

+0

고마워요 ... 어떻게이 일을했는지 ​​웹을 수색했습니다! –