【问题标题】:unable to open spreadsheets with Zend_Gdata?无法使用 Zend_Gdata 打开电子表格?
【发布时间】:2012-01-26 05:06:03
【问题描述】:
<?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('myemail@gmail.com', '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;
}

这是我这样做时遇到的错误:

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

这对我来说没有多大意义。如果他们的电子表格密钥无效,为什么 $sheet->getId() 会返回它?

【问题讨论】:

    标签: php zend-framework zend-gdata google-spreadsheet-api


    【解决方案1】:

    编辑:已对此进行了更新,以使其更符合我认为您想要的 - 如果它不符合要求,请告诉我,但这可能会有所帮助。我假设您在 Zend Framework 中使用 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>
    

    注意:虽然可能有其他方法可以做到这一点,但您可以使用类似这样的方法来获取电子表格键(我刚刚修改了视图中的内容):

    <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 中执行此操作,我会在路由到我想使用 getRows() 之类的方法的操作时将 $spreadsheetKey 作为参数绑定到 url。如果你想要一个例子,我可以把一个放在一起?

    感谢我猜测您想要实现的目标,但希望这会有所帮助。

    干杯,

    戴夫

    关于两步验证:有点离题可能会有所帮助的是确保在 Google 帐户上关闭两步验证,因为它会阻止您以这种方式连接。 p>

    【讨论】:

    • 另请注意,如果您不使用 Zend Framework,则需要像以前一样进行包含
    • 我还是一样。我的代码:paste2.org/p/1884518 我也没有为此帐户使用两因素身份验证。如果我使用两因素身份验证,甚至 $sheet->getId() 都不起作用。
    • 您好,我有一些事情想尝试(我现在可以访问提要),所以我会试一试并返回你稍后。如果您在此期间得到解决方案,请告诉我。干杯,戴夫
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    相关资源
    最近更新 更多