2011-06-21 81 views
4

我目前正在研究在網頁上顯示來自多個Google日曆的事件列表的可能性。目前,我正在使用WordPress的Google Calendar Events插件來顯示網站上的事件(開發站點位於防火牆後面,因此我無法共享鏈接);但我想看看是否有任何簡單的方法爲每個事件動態生成ICS文件。將單個Google日曆活動導出到ICS?

我們希望允許網站訪問者將各個事件添加到其日曆中,但Google日曆數據API似乎只能提供下載ICS格式的整個日曆的選項。我試着簡單地將一個帶有eid(event ID)的查詢字符串附加到ICAL提要地址的末尾,但仍然會打開標準的Google ICAL提要,其中包括當前包含在日曆中的所有事件。

我對從頭開始動態構建ICS文件有所瞭解,過去曾做過一次,從本地Perl日曆程序中提取事件併爲每個事件生成一個ICS文件;但是如果有任何預先構建的API或PHP類已經設置爲從單個Google日曆事件構建ICS文件,我更願意使用這些。

+0

[WordPress](http://wordpress.stackexchange.com/)的問題? – TLP

回答

2

它的那麼簡單它只是一個網頁真的,試試這個:(你需要替換你自己,當然變量...)

<?php 
    /* 
    * generates calendar ics file 
    */ 

if( 
    empty($_GET['summary']) || 
    empty($_GET['dtstart']) || 
    empty($_GET['dtend']) 
){ 
header ("Location: /diary/this-week") ; 
exit(); 
} 

    header("Content-type: text/calendar"); 
    header("Content-Disposition: attachment; filename=".urlencode($_GET['summary']).'-'.time().".ics"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
    echo 'BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:councilsites 
METHOD:PUBLISH 
BEGIN:VEVENT 
URL:'. htmlentities($_GET['url']) .' 
UID:'. htmlentities($_GET['url']) .' 
SUMMARY:'. htmlentities($_GET['summary']) .' 
DTSTAMP:'. date('Ymd\THis\Z') .' 
DTSTART:'. htmlentities($_GET['dtstart']) .' 
DTEND:'. htmlentities($_GET['dtend']) .' 
LOCATION:'. htmlentities($_GET['location']) .' 
END:VEVENT 
END:VCALENDAR'; 


?> 
+3

感謝您的提示。這看起來很簡單。 我還發現Google確實爲單個事件生成了ICS文件;但我只是使用了錯誤的URL結構(它似乎沒有記錄在任何地方)。 我認爲如果您使用如下的網址結構: 'http://google.com/calendar/ical/[calendarID]/ [visualibility ie'public']/[projection ie full]/[eventID] .i​​cs' 您將獲得該活動的ICS文件。自動生成的ICS文件包含有關源日曆的信息,因此如果您希望它作爲約會打開,您必須刪除啓動「X-WR-CALNAME:」的行。要做更多的測試。 – cgrymala

+0

@cgrymala我試圖讓這個工作使用我的私人日曆網址。然而,要麼我不明白什麼是eventID(認爲它可能是我從完整日曆中獲得的UID),還有其他一些問題,每次都會產生404個問題。你能確認這是否適用於私人可視性以及如何獲得正確的eventID? – Timo

0

我也想生成單個事件的.ics文件。我不想惹PHP,所以我打算使用格里馬拉的小技巧。不幸的是,我不知道我想要導出的事件的calendarID,所以我導出了所有gcal的日曆並編輯了結果文件,以便它僅包含日曆標題,基礎和vevent lsiting。我還刪除了日曆名稱,因爲我不知道這是否有必要。 我從來沒有找到一種方法來獲取特定日曆的URL作爲gymala建議,但我確實根據這help text找到這個。

  1. 在頁面左側的日曆列表中,將鼠標 在您想從中導出的日曆。

  2. 您會在日曆名稱旁邊看到一個下拉箭頭。點擊下拉箭頭並選擇日曆設置。 (或者,單擊我的日曆旁邊的下拉箭頭並選擇設置,然後從列表中單擊相應的日曆。)

  3. 單擊頁面底部「私人地址」部分的ICAL按鈕,並點擊顯示的網址。

  4. 將導出的文件保存到計算機上的所需文件夾中。 ,可能是將該URL粘貼到另一個瀏覽器窗口中,複製窗口文本並將其粘貼到編輯器中。