2012-01-26 27 views
0
<?php 
include('Zend/Gdata.php'); 
include('Zend/Gdata/Spreadsheets.php'); 
include('Zend/Gdata/ClientLogin.php'); 


$service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME; 
$client = Zend_Gdata_ClientLogin::getHttpClient('[email protected]', 'password', $service); 
$spreadsheetService = new Zend_Gdata_Spreadsheets($client); 
$sheets = $spreadsheetService->getSpreadsheetFeed(); 
foreach ($sheets as $sheet) { 
    //echo get_class($sheet) . '<br>'; exit; 
    echo $sheet->getContent() . '<br>'; 
    echo $sheet->getId() . '<br>'; 

    $query = new Zend_Gdata_Spreadsheets_DocumentQuery(); 
    $query->setSpreadsheetKey($sheet->getId()); 
    $feed = $spreadsheetService->getWorksheetFeed($query); 
    echo '<pre>'; 
    print_r($feed); exit; 
} 

這是我得到的錯誤,當我做到這一點:無法使用Zend_Gdata打開電子表格?

Fatal error: Uncaught exception 'Zend_Gdata_App_HttpException' with message 'Expected response code 200, got 400 Invalid request URI' 

這並不讓很多道理給我。如果他們的電子表格鍵無效,爲什麼$ sheet-> getId()會返回它?

+0

你可以發佈完整的跟蹤? – prodigitalson

+0

如何獲得完整的跟蹤? – neubert

回答

0

編輯:已更新此更符合我想要的東西 - 讓我知道如果它不符合標準,但這可能會有所幫助。我假設你正在使用與Zend框架的MVC模式,所以你可能需要相應調整,否則 試試這個類:

class SpreadsheetAdapter 
{ 
    protected $_spreadsheetService; 

    public function __construct() 
    { 
     $client = 
      Zend_Gdata_ClientLogin::getHttpClient($yourUsername,$yourPassword, 
       Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME); 

     $this->_spreadsheetService = new Zend_Gdata_Spreadsheets($client); 
    } 

    public function getSheets() 
    { 
     $sheetArray = array(); 
     $totalSheets = count($this->_spreadsheetService->getSpreadsheetFeed()->entries[0]->link); 

     for($i = 0; $i <= $totalSheets; $i++) 
     { 
      $link{$i} = $this->_spreadsheetService->getSpreadsheetFeed()->entries[$i]->link[1]->href; 
      $title{$i} = $this->_spreadsheetService->getSpreadsheetFeed()->entries[$i]->getTitleValue(); 
      $sheetArray[$link{$i}] = $title{$i}; 
     } 

     return $sheetArray; 
    } 

    public function getRows($spreadsheetKey) 
    { 
     // returns a multidimensional array filled with data from populated rows in a Google Docs Spreadsheet 
     $query = new Zend_Gdata_Spreadsheets_DocumentQuery(); 
     $query->setSpreadsheetKey($spreadsheetKey); 
     $feed = $this->_spreadsheetService->getWorksheetFeed($query); 
     return $feed->entries[0]->getContentsAsRows(); 
    } 

} 

那麼這在你選擇的控制器:

public function spreadAction() 
{ 
    $adapter = new SpreadsheetAdapter(); 
    $sheetArray = $adapter->getSheets(); 
    $this->view->sheetArray = $sheetArray;  
} 

那麼這在你看來:

<h2>Spreadsheets</h2> 
<ul> 
<?php 
foreach($this->sheetArray as $sheet['link'] => $sheet['title']) 
{ 
    echo '<li><a href="' . $sheet['link'] . '">' . $sheet['title'] . '</a></li>'; 
} 

?> 
</ul> 

注:雖然有這樣做,你可以得到H的可能其他方式僅通過使用這樣的事情(我剛剛修改的會是什麼視圖)的電子表格關鍵的時候:

<h2>Spreadsheets</h2> 
<ul> 
<?php 
foreach($this->sheetArray as $sheet['link'] => $sheet['title']) 
{ 
    $linkChop = explode('=',$sheet['link']); 
    $spreadsheetKey = end($linkChop); 
    echo '<li><a href="http://yourdomain/yourmodule/yourcontroller/youraction/' . $spreadsheetKey . '">' . $sheet['title'] . '</a></li>'; 
} 

?> 
</ul> 

在上面的例子中,我試圖說明如何使用剛剛的關鍵。如果我在ZF自己做這件事,我會綁定$ spreadsheetKey作爲URL中的一個參數,當路由到一個行動,我想要使用一個方法,如getRows()。如果你想要一個例子,我可以把它放在一起?

欣賞我猜想你想達到什麼,但希望這有助於。

乾杯,

戴夫

約2 STEP AUTH:東西稍微偏離主題可能是有幫助的是確保2級認證被關閉的谷歌帳戶,因爲它會阻止你從這種方式連接。

+0

另外請注意,如果你不使用Zend Framework,你需要像以前一樣做你的包含 – dkcwd

+0

我仍然會得到同樣的結果。我的代碼:http://paste2.org/p/1884518我也沒有爲這個帳戶使用雙因素認證。如果我使用的是雙因素身份驗證,即使$ sheet-> getId()也不起作用。 – neubert

+0

嗨,我想嘗試一些事情(我現在能夠訪問Feed),所以我會給他們一個答案,稍後再回復。如果您在此期間獲得解決方案,請告訴我。乾杯,戴夫 – dkcwd