2012-01-26 29 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