大綱:透過API 將Google Calendar 上的事件刪除。並補充參考資料與經驗分享前言這是最後一篇了,其實刪除真的超簡單的,至於為什麼拖這麼久才出這篇,我只能說:「哀...」。補上我參考的資料以及一些經驗分享吧。
刪除一筆事件透過事件ID當作參數傳入delete.php ,當刪除成功之後顯示被刪除的事件的title。
刪除事件請建立delete.php 並加入下列程式碼:
<?php
include('config.inc.php');
$eventId = $_GET['id'];
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // 提供Calendar 的服務名稱
$client = Zend_Gdata_ClientLogin::getHttpClient($googleAccount, $googlePassword, $service);
$gdataCal = new Zend_Gdata_Calendar($client);
//接下來這邊就是讀取某個事件的方法
$query = $gdataCal->newEventQuery();
$query->setUser($calendarID);
$query->setVisibility('private');
$query->setProjection('full');
$query->setEvent($eventId);
$eventEntry = $gdataCal->getCalendarEventEntry($query);
$title = $eventEntry->title->text;
$eventEntry->delete();
?>
我們透過
getCalendarEventEntry取得某一個事件,之前講過可以用$eventEntry->title->text; 去取得事件的標題(這是等一下要顯示的)。然後這邊調用另一個方法delete(),來刪除事件
$eventEntry->delete(); ,就是這麼簡單。
顯示已被刪除的事件標題接著就更簡單了,剛剛已經把事件標題放入$title 變數了,請在上述程式碼
?>之後加入以下html 語法:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>FUNction's Lab 讀取Google 行事曆 「<?=$title?>」已刪除</title>
</head>
<body>
[<a href="./">上一頁</a>]
<hr />
<h1><font color="red">事件「<?=$title?>」已刪除!</font></h1>
</body>
</html>
這樣今天的delete 就大功告成了,也是Google Calendar 開發的完結篇了。
經驗分享接下來,我先講一些這陣子的使用心得與之前沒講到的補充。
title 字串的限制我發現title 字串幾乎沒有限制。以長度來說,我有曾經建立長度為200 個UTF-8 中文字的事件標題,不會顯示錯誤,更神的事Google 一樣會傳簡訊通知。至於超過200 我沒有試過,如果有更大量的數據也請告訴我。至於格式方面,確定可以使用html 標籤。使用html 標籤後用Google Calendar 檢視事件或是簡訊通知Google 會自動忽略標籤,但用API 一樣可以把標籤讀出來。
簡訊提醒限制使用簡訊提醒如果設定提醒時間大於60 分鐘會出現不知名的錯誤,在5-60 分鐘內不會有問題。此外,上一篇列出的方法是透過修改事件加入提醒,以下片段程式是直接在建立事件時新增提醒,以供參考:
function createEvent($title, $content, $where, $startTime)
{
global $calendarClient, $calendarId;
$endPart = explode("-", $startTime, 3);
$startTime = $endPart[0].'-'.$endPart[1].'-'.(add0($endPart[2]+1));
$endTime = $endPart[0].'-'.$endPart[1].'-'.(add0($endPart[2]+2));
$calendarURL = "http://www.google.com/calendar/feeds/".urlencode($calendarId)."/private/full";
$gc = new Zend_Gdata_Calendar($calendarClient);
$newEntry = $gc->newEventEntry();
$newEntry->title = $gc->newTitle(trim($title));
$newEntry->where = array($gc->newWhere($where));
$newEntry->content = $gc->newContent($content);
$newEntry->content->type = 'text/html';
$reminder = $gc->newReminder();
$reminder->setMinutes(60);
$reminder->setMethod('sms');
$when = $gc->newWhen();
$when->reminders = array($reminder);
$when->startTime = $startTime."+08:00";
$when->endTime = $endTime."+08:00";
$newEntry->when = array($when);
$createdEntry = $gc->insertEvent($newEntry, $calendarURL);
return basename($createdEntry->id->text);
}
這個function 用2008-08-13 的格式傳入一個開始日期$startTime,會自動建議一整天的事件。其中全域變數$calendarClient 就是這系列教學中的$client 變數,是與Google 的連結。喔,對了,裡面用了一個名為add0() 的function ,這是我自己寫的function ,目的是如果數字為1-9 自動在前面補0 ,不然送到google 會出錯。
透過ID 取得事件我們知道讀取事件可以使用
$query->setEvent($eventId); 取得事件,如果$eventId 值為空,Google 則會預設丟出最後被updated 的事件。
參考資料我覺得最有用的文章首推
Google Calendar API使用心得分享 這篇文章也有一些經驗分享,由淺入深,不論在開發初期還是開發後期都很有幫助。
接下來是Google 官方的文件
API Developer's Guide: PHP 但是寫的還是讓人要消化一下才懂,不如直接去下載Zend 的
函式庫,在Demo 資料夾中有一個名為calendar.php 的檔案,裡面包著新增、修改、刪除、查詢的function ,看著範例做會好很多。
最後,這裡雖然會用到Zend 但其實和Zend Framework 沒有那麼直接的關係,如果你使用其他的Framework 仍然可以呼叫Zend 的Gdata,
這篇文章 可以解答你的疑惑。
結語到了最後依依不捨的時間了,因為這個單原告一段落啦。這邊我要秀一個我免費接的case ,就是以Google Calendar 為主體的一個網站。這網站的概念是以
事件為最基本的元素,使用者可以根據事件評論、建立標籤等等。但網站的核心還是放在Google 的資料庫中。另外,會元的照片是透過Picasa API 傳到Picasa 上,一方面可以減少網站流量,一方面可以便於陳列管理,甚至還可以調用Picasa 的Slideshow,當成會員輪播。網址:
http://fjucte.oxyhost.com/index.html最後,我們來聊聊Google Abuse。我們還可以把Google Calendar 做成自己專屬的留言版,這樣人家有留言還可以讓Google 通知你。或是Abuse 他的簡訊功能,做其他的通知功用...
範例程式下載:
GClab.zip上一篇:
[教學] 在PHP 中使用Google Calendar API - Part 4 新增事件(含提醒)