невозможно открыть электронные таблицы с помощью Zend_Gdata? - PullRequest
0 голосов
/ 26 января 2012
<?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 () его вернуть?

1 Ответ

0 голосов
/ 26 января 2012

РЕДАКТИРОВАТЬ: Обновил это, чтобы привести его в соответствие с тем, что я думаю, вы хотите - дайте мне знать, если это не так, но это может помочь.Я предполагаю, что вы используете шаблон MVC с Zend Framework, поэтому вам, возможно, придется настроить соответственно, попробуйте этот класс:

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 самостоятельно, я бы привязал $ spreadsheetKey в качестве параметра в URL-адресе при маршрутизации к действию, где я хотел бы использовать метод, такой как getRows ().Если вы хотите пример, который я мог бы собрать?

Оцените Я немного догадываюсь о том, чего вы хотите достичь, но, надеюсь, это поможет.

Приветствия,

Дейв

О 2-х ШАГОВОМ АВТОМАТИЧЕСКОМ: Немного не по теме, что может оказаться полезным, - убедиться, что двухэтапная аутентификация отключена в учетной записи Google, так как это не позволит вам подключиться таким образом..

...