2011-09-19 107 views
2

我用的是私人共享链接看我的用户里面日历个人网页,但现在谷歌决定改变的事情https://www.google.com/support/calendar/bin/answer.py?answer=1631300登录浏览到谷歌与PHP(Zend的GDATA)

说我有一个用户的密码和用户名。 我可以登录Google帐户并使用Zend Framework添加事件或内容,但是如何登录Google并使浏览器登录(注入cookie或其他内容,就好像用户转到Gmail一样,他已经登录了)。

这样用户会看到他自己的日历,并且不会收到任何警告。

UPDATE

我该怎么让iframe中日历(仅甚至阅读将是确定也是如此),如果我有他的Gmail用户名/密码(或谷歌)占

+0

上帝的缘故ppl。它是Zend Framework,Zend是一家公司。 – markus

回答

0

您必须确保用户已经共享日历或将其公开。 Google正在努力加强他们的安全。您使用的方法允许您访问用户的私人日历。这显然是不受欢迎的行为。 Google数据协议api支持多种身份验证方法。该分类HERE旨在帮助您选择哪一种适合您的应用。 api文档建议使用oauth进行身份验证,并且网站http://oauth.net/提供了几个用于从PHP访问API的库。 OpenID也是一个受支持的选项,也是一种混合体,它旨在通过利用OAuth和OpenID来简化流程。

只要在IFrame中显示日历,只需创建一个HTML页面,为您的日历检索atom feed并将事件显示为html。因为它是XML,所以您喜欢的任何XML处理方法都可以使用(即XSLT,simpleXML等)。然后使用此页面的url作为iframe的源属性。

下面是使用Zend GATA库的例子:

<!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>Example List of calendar contents</title> 
    </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 = "[email protected]"; 
     $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> 
    <p><?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> 

此文件的网址是iframe的来源。
祝你好运,快乐的编码。

+0

谢谢!但我可以在一些JavaScript日历中注入这些事件,以便向用户展示一些Google日历?否则它对我来说是无用的 – max4ever

+0

你可以根据需要显示它。这个简单的例子只是列出了结果,但你可以根据需要使显示器看起来很花哨。 –

5

你不能写由于跨网站政策,您的域名之外的Cookie。

您可以做的最简单的事情是要求用户登录他的Google帐户。就像在这里Stackoverflow一样,如果你使用Google帐户,用户会被重定向到Google登录页面,他授予权限,然后他被重定向到您的网站。

I think this may be a helpful resource

+0

是的,使用开放式验证。用户使用他的Google ID登录到您的网站,您没有这种麻烦。 – markus

+0

我不能自动为用户,这是一个内部网站,并要求用户登录每次都是不能接受的... – max4ever

+0

谷歌的cookie有一个相当长的过期日期afaik。这意味着下次用户尝试使用您的应用时,他会自动登录。 – usoban