2014-02-28 130 views
2

我想从php cron管理我的Fusion Tables。 我无法得到它的工作:无法让google-api工作

<?php 
//include_once "templates/base.php"; 
error_reporting(E_ALL-E_WARNING-E_NOTICE-E_DEPRECATED); 
ini_set('display_errors',1); 
session_start(); 

set_include_path("src/" . PATH_SEPARATOR . get_include_path()); 

require_once 'Google/Client.php'; 
require_once 'Google/Service/Fusiontables.php'; 
$client_id = 'given'; 
$service_account_name = 'given'; 
$key_file_location = 'given'; 
$tableid='given'; 

$client = new Google_Client(); 
$client->addScope("https://www.googleapis.com/auth/fusiontables"); 
$service=new Google_Service_Fusiontables($client); 

unset($_SESSION['service_token']); 
if (isset($_SESSION['service_token'])) { 
    $client->setAccessToken($_SESSION['service_token']); 
} 
$key = file_get_contents($key_file_location); 
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name, 
    array('https://www.googleapis.com/auth/fusiontables'), 
    $key 
); 
$client->setAssertionCredentials($cred); 
if($client->getAuth()->isAccessTokenExpired()) { 
    $client->getAuth()->refreshTokenWithAssertion($cred); 
} 
$_SESSION['service_token'] = $client->getAccessToken(); 

$result=$service->table->listTable(); 

$insert_statement = "SELECT tytul FROM $tableid "; 
$result = $service->query->sql($insert_statement); 
?> 

这里有结果:

object(Google_Service_Fusiontables_TableList)#14 (7) { 
    ["itemsType":protected]=> 
    string(33) "Google_Service_Fusiontables_Table" 
    ["itemsDataType":protected]=> 
    string(5) "array" 
    ["kind"]=> 
    string(22) "fusiontables#tableList" 
    ["nextPageToken"]=> 
    NULL 
    ["collection_key":protected]=> 
    string(5) "items" 
    ["data":protected]=> 
    array(0) { 
    } 
    ["processed":protected]=> 
    array(0) { 
    } 
} 

Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling POST https://www.googleapis.com/fusiontables/v1/query: (403) Forbidden' in /funkcje/google-api/src/Google/Http/REST.php:80 Stack trace: #0 /funkcje/google-api/src/Google/Http/REST.php(44): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request)) #1 /funkcje/google-api/src/Google/Client.php(499): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request)) #2 /funkcje/google-api/src/Google/Service/Resource.php(195): Google_Client->execute(Object(Google_Http_Request)) #3 /funkcje/google-api/src/Google/Service/Fusiontables.php(682): Google_Service_Resource->call('sql', Array, 'Google_Service_...') #4 /funkcje/google-api/fusion-tables.php(79): Google_Service_Fusiontables_Query_Resource->sql('SELECT tytul FR...') #5 {main} thrown in /funkcje/google-api/src/Google/Http/REST.php on line 80 

,你可以看到我用API(第一结果)连接,但它给回不表(在开发控制台它返回两个表) - 好像我连接到不同的帐户...

我作为服务帐户连接。 如果我连接作为Web应用程序的客户端ID,所有作品。

回答

3

找到anwser:https://groups.google.com/d/msg/google-api-php-client/9d2lQAppTvg/o5QGhsXiAQIJ

您必须添加新的用户文件 - 用户从谷歌API服务

  • 在谷歌文档
  • 点击 “分享”
  • 选择文档(FT)
  • 选择“添加人员”
  • 输入您的服务帐户电子邮件地址,例如myservice ... @ developer.gserviceaccount.com
  • 确保选中“可以编辑”。
  • 取消选中
  • 点击“通过电子邮件通知的人”,“分享和保存”