2013-02-12 294 views
1

我需要将HTML表单/调查结果发布到Google文档电子表格。现在我正在尝试使用api最简单的场景,这只是在我的电子表格中写一个简单的行,尽管我不断收到错误。 (我不是太大,使用PHP,所以请多多包涵!)使用PHP和Google Docs API将表单数据保存到Google电子表格

代码:

<?php 
set_include_path(get_include_path() . PATH_SEPARATOR . "$_SERVER[DOCUMENT_ROOT]/ZendGdata-1.12.1/library"); 
require_once 'Zend/Loader.php'; 
Zend_Loader::loadClass('Zend_Gdata'); 
Zend_loader::loadClass('Zend_Gdata_Query'); 
Zend_Loader::loadClass('Zend_Gdata_Spreadsheets'); 
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 
?> 
<!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"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<?php 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 

$user = "######"; 
$pass = "######"; 
$service = "xapi"; 

$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service, null, Zend_Gdata_ClientLogin::DEFAULT_SOURCE, null, null, Zend_Gdata_ClientLogin::CLIENTLOGIN_URI, 'GOOGLE'); 

$spreadsheetService = new Zend_Gdata_Spreadsheets($client); 

$feed = $spreadsheetService->getSpreadsheetFeed(); 

foreach ($feed as $entry) { 
echo 'Title: ' . $entry->title . ' - '; 
echo 'Id: ' . $entry->id . '<br />'; 
} 
$rowData = array('wood' => 'oak'); 

$spreadsheetKey = '######'; 
$worksheetId = 'od6'; 

try{ 
$insertedListEntry = $spreadsheetService->insertRow($rowData, 
                $spreadsheetKey, 
                $worksheetId); 
} 
catch(Zend_Gdata_App_HttpException $exception) { 
    echo "Error: " . $exception->getResponse()->getRawBody(); 
} 
?> 
</body> 
</html> 

错误:

> Fatal error: Uncaught exception 'Zend_Gdata_App_HttpException' with 
> message 'Expected response code 200, got 401 <HTML> <HEAD> 
> <TITLE>Token invalid</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" 
> TEXT="#000000"> <H1>Token invalid</H1> <H2>Error 401</H2> </BODY> 
> </HTML> ' in 
> C:\xampp\htdocs\ZendGdata-1.12.1\library\Zend\Gdata\App.php:714 Stack 
> trace: #0 
> C:\xampp\htdocs\ZendGdata-1.12.1\library\Zend\Gdata.php(219): 
> Zend_Gdata_App->performHttpRequest('GET', 'https://spreads...', Array, 
> NULL, NULL, NULL) #1 
> C:\xampp\htdocs\ZendGdata-1.12.1\library\Zend\Gdata\App.php(880): 
> Zend_Gdata->performHttpRequest('GET', 'https://spreads...', Array) #2 
> C:\xampp\htdocs\ZendGdata-1.12.1\library\Zend\Gdata\App.php(768): 
> Zend_Gdata_App->get('https://spreads...', NULL) #3 
> C:\xampp\htdocs\ZendGdata-1.12.1\library\Zend\Gdata\App.php(210): 
> Zend_Gdata_App->importUrl('https://spreads...', 'Zend_Gdata_Spre...', 
> NULL) #4 C:\xampp\htdocs\ZendGdata-1.12.1\library\Zend\Gdata.php(162): 
> Zend_Gdata_App->getFeed('https://spreads...', 'Zend_Gdata_Spre...') #5 
> C:\xa in C:\xampp\htdocs\ZendGdata-1.12.1\library\Zend\Gdata\App.php 
> on line 714 

任何帮助表示赞赏! :]

+0

你仍不能使用谷歌文档的形式保存自己的头痛太糟糕了。 – JakeParis 2013-02-25 04:12:45

回答

1

这已经有一段时间了,但我相信您看到的具体错误信息与您使用的服务名称有关。 'xapi'是Google服务的通用服务名称,但您试图专门访问Google电子表格。

尝试改变:

$service = 'xapi'; 

要:

$service = 'wise'; 

由于'wise'是谷歌电子表格的正确ClientLogin service name

+0

这实际上摆脱了我的错误!但现在我收到了:'“标题:我的电子表格 - 标识:spreadsheets.google.com/feeds/spreadsheets/xxxxxxxxxxApgZPKzA错误:很抱歉,发生服务器错误。请稍等一下,然后尝试重新载入电子表格。 “任何想法是什么? – 2013-03-22 14:31:34

+1

有时候,Google的团队可能真的是一个间歇性的服务器错误 - 在Google Groups中发现很多人抱怨这个错误,他们只是回过头来说,如果不改变他们的代码,问题就会消失。我知道如果脚本中的列名与电子表格上的实际列名不同,您也会看到该错误。但不幸的是,这对我来说已经进入了一个更陌生的领域,所以希望更熟悉API的人可以从这里获得更多帮助。 :) – Liv 2013-03-24 15:49:57

+0

谢谢!我其实只是没有意识到,我必须首先在实际的电子表格中添加一个列名作为“标签”。我为A1添加了一个名称,它的功能就像一个魅力。 – 2013-03-25 02:09:36

0

您的错误消息是指无效的令牌,这意味着Google不接受您的登录信息。我认为错误在$service行。试试这个:

$user = //user name @ gmail here 
$pass = //password here 
$sheet = //spreadsheet id/key here 
$worksheet = "od6"; 

require_once('Zend/Loader.php'); 
Zend_Loader::loadClass('Zend_Gdata'); 
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 
Zend_Loader::loadClass('Zend_Gdata_Spreadsheets'); 
Zend_Loader::loadClass('Zend_Http_Client'); 

$service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME; 
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service); 
$spreadsheetService = new Zend_Gdata_Spreadsheets($client); 

然后,所有你需要做的是这样的:

$rowData = array("column1"=>"blah", "column2"=>"blah"); //replace column1 and column2 with your actual column names and replace blah with the information you want to add 
$insertedListEntry = $spreadsheetService->insertRow($rowData, 
                $spreadsheetKey, 
                $worksheetId); 
+0

我试过了,但仍然出现错误。 “未捕获的异常'Zend_Gdata_App_HttpException'带有消息'预期的响应代码200,得到了400我们'很抱歉,发生服务器错误。请稍等一下,然后尝试重新加载您的电子表格。'在C:\ xampp \ htdocs \ ZendGdata-1.12.1 \ library \ Zend \ Gdata \ App.php:714 .......“ – 2013-03-22 01:31:43

相关问题