2011-09-19 100 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