在 PHP 应用程序中集成 Google Calendar(4)
 
- UID
- 1066743
|

在 PHP 应用程序中集成 Google Calendar(4)
添加新事件通过客户机应用程序显示事件已经实现。那么如何添加新事件呢?
实际情况并没有看到的那么复杂。通过 Calendar Data API 很容易向日程表添加新事件。创建一个 XML 编码的新事件 <entry> 并 POST 给日程表提要就行了。 给出了一个例子:
清单 4. 新事件的 entry 例子1
2
3
4
5
| <atom:entry xmlns:atom="http://www.w3.org/2005/Atom">
<atom:title type="text">Dinner with the gang</atom:title>
<gd:when xmlns:gd="http://schemas.google.com/g/2005"
startTime="2008-06-23T18:00:00+05:30" endTime="2008-06-23T20:00:00+05:30"/>
</atom:entry>
|
如果使用 Zend 库就更简单了,只需要调用 insertEvent() 方法,该方法将创建 所示的 XML 并提交给日程表提要。 提供了一个 Web 表单让用户输入事件的有关信息,然后使用 Zend 库构造相应的 XML 并保存到日程表中:
清单 5. 通过表单添加新事件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
| <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Adding calendar events</title>
<style>
body {
font-family: Verdana;
}
li {
border-bottom: solid black 1px;
margin: 10px;
padding: 2px;
width: auto;
padding-bottom: 20px;
}
h2 {
color: red;
text-decoration: none;
}
span.attr {
font-weight: bolder;
}
</style>
</head>
<body>
<h1>Add Event</h1>
<?php if (!isset($_POST['submit'])) { ?>
<form method="post" action="
<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
Event title: <br/>
<input name="title" type="text" size="15" /><p/>
Start date (dd/mm/yyyy): <br/>
<input name="sdate_dd" type="text" size="2" />
<input name="sdate_mm" type="text" size="2" />
<input name="sdate_yy" type="text" size="4" /><p/>
Start time (hh:mm): <br/>
<input name="sdate_hh" type="text" size="2" />
<input name="sdate_ii" type="text" size="2" /><br/>
End date (dd/mm/yyyy): <br/>
<input name="edate_dd" type="text" size="2" />
<input name="edate_mm" type="text" size="2" />
<input name="edate_yy" type="text" size="4" /><p/>
End time (hh:mm): <br/>
<input name="edate_hh" type="text" size="2" />
<input name="edate_ii" type="text" size="2" /><br/>
<input name="submit" type="submit" value="Save" />
</form>
<?php
} else {
// load classes
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
Zend_Loader::loadClass('Zend_Http_Client');
// connect to service
$gcal = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$user = "username@gmail.com";
$pass = "pass";
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $gcal);
$gcal = new Zend_Gdata_Calendar($client);
// validate input
if (empty($_POST['title'])) {
die('ERROR: Missing title');
}
if (!checkdate($_POST['sdate_mm'], $_POST['sdate_dd'], $_POST['sdate_yy'])) {
die('ERROR: Invalid start date/time');
}
if (!checkdate($_POST['edate_mm'], $_POST['edate_dd'], $_POST['edate_yy'])) {
die('ERROR: Invalid end date/time');
}
$title = htmlentities($_POST['title']);
$start = date(DATE_ATOM, mktime($_POST['sdate_hh'], $_POST['sdate_ii'],
0, $_POST['sdate_mm'], $_POST['sdate_dd'], $_POST['sdate_yy']));
$end = date(DATE_ATOM, mktime($_POST['edate_hh'], $_POST['edate_ii'],
0, $_POST['edate_mm'], $_POST['edate_dd'], $_POST['edate_yy']));
// construct event object
// save to server
try {
$event = $gcal->newEventEntry();
$event->title = $gcal->newTitle($title);
$when = $gcal->newWhen();
$when->startTime = $start;
$when->endTime = $end;
$event->when = array($when);
$gcal->insertEvent($event);
} catch (Zend_Gdata_App_Exception $e) {
echo "Error: " . $e->getResponse();
}
echo 'Event successfully added!';
}
?>
</body>
</html>
|
实际上由两部分组成:Web 表单和处理表单所提交数据的 PHP 代码。表单如 所示:
图 3. 添加新事件的 Web 表单 用户在表单中输入详细的事件信息并提交后,脚本第二部分派上用场了。脚本首先初始化开启 Calendar Data API 验证连接的 HTTP 客户机。然后验证 Web 表单的输入,检查事件的开始和结束日期,然后将日期转化成 RFC 3339 格式。
如果输入的数据有效,则创建新的 EventEntry 对象。该对象表示将插入到日程表的新事件,并公开了 newTitle() 和 newWhen() 方法,用于设置事件的标题和始末日期。设置完这些对象属性后,insertEvent() 方法将事件保存到 Google 服务器。添加的事件应该立即可以在日程表中看到。
显示了成功添加新事件后的结果:
图 4. 添加新事件的结果 |
|
|
|
|
|