首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

在 PHP 应用程序中集成 Google Calendar(3)

在 PHP 应用程序中集成 Google Calendar(3)

使用 Zend GData Client Library 检索事件列表虽然 magic cookie 验证非常方便,但对于真正完善的 PHP 应用程序来说并不实用,原因有二:
  • 对日程表提要访问是只读的,
  • 不支持所有日程表操作。
用 Calendar Data API 完成任何真正有意义的工作,需要使用 Google 认可的两种验证方法之一为应用程序增加用户验证功能:AuthSub 和 ClientLogin。
手工执行这类身份验证相当繁琐,需要大量的代码来应付验证事务中可能出现的各种情况。所幸的是不用太担心:Zend 的 GData Client Library 是专门为需要集成 PHP 应用程序和 Google Data API 的开发人员设计的,它可以完成这些细节问题。这个库可以单独下载(参见  获得链接),为 Google Data API 提供了方便的、面向对象的接口,并封装了大部分常见的任务(包括身份验证)。因此可以将精力集中到应用程序的核心功能上。
使用 Zend GData Client Library 再现了  的功能:
清单 3. 使用 Zend Library 检索事件列表
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
<!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>Listing calendar contents</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>
    <?php
    // load library
    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');
     
    // create authenticated HTTP client for Calendar 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);
     
    // generate query to get event list
    $query = $gcal->newEventQuery();
    $query->setUser('default');
    $query->setVisibility('private');
    $query->setProjection('basic');
     
    // get and parse calendar feed
    // print output
    try {
      $feed = $gcal->getCalendarEventFeed($query);
    } catch (Zend_Gdata_App_Exception $e) {
      echo "Error: " . $e->getResponse();
    }
    ?>
    <h1><?php echo $feed->title; ?></h1>
    <?php echo $feed->totalResults; ?> event(s) found.
    <p/>
    <ol>

    <?php      
    foreach ($feed as $event) {
      echo "<li>\n";
      echo "<h2>" . stripslashes($event->title) . "</h2>\n";
      echo stripslashes($event->summary) . " <br/>\n";
      echo "</li>\n";
    }
    echo "</ul>";
    ?>
    </ol>

  </body>
</html>




清单 3 首先加载 Zend 类库,初始化 Zend_Http_Client 类实例。该客户机提供了必要的用户身份验证信息,开启了 Calendar 服务的身份验证连接。一旦建立了经过验证的连接,getCalendarEventFeed() 方法就可以检索日程表提要。该方法接受一个 EventQuery 对象,配置了多个参数:用户名、提要类型(公共或私有)以及提要的详细程度(完整还是基本)。getCalendarEventFeed() API 调用的响应是一个 XML 文档,经过解析后转化成 PHP 对象。这样,通过对象属性检索数据和生成 HTML 页面就很简单了。
图 2 显示了可能看到的结果:
图 2. 显示 Zend GData Client Library 检索到的日程表事件列表的 Web 页面
返回列表