【发布时间】:2015-09-12 06:57:58
【问题描述】:
我已安装 用于 OAuth2 php 库的谷歌 api;在这里:https://code.google.com/p/google-api-php-client/ 谷歌电子表格 api php 库;这里:https://github.com/asimlqt/php-google-spreadsheet-client
使用服务帐户 https://console.developers.google.com/ 在 API 控制台上创建了凭据
这是我结合上面使用的php脚本:
require_once('vendor/autoload.php');
require_once('vendor/composer/autoload_classmap.php');
require_once('vendor/composer/autoload_real.php');
require_once __DIR__.'/vendor/google/apiclient/src/Google/Auth/AssertionCredentials.php';
use Google\Spreadsheet\DefaultServiceRequest;
use Google\Spreadsheet\ServiceRequestFactory;
use Google\Spreadsheet\SpreadsheetService;
const G_CLIENT_ID = 'my_client_id';
const G_CLIENT_EMAIL = 'email address';
const G_CLIENT_KEY_PATH = 'key.p12';
const G_CLIENT_KEY_PW = 'notasecret';
$obj_client_auth = new Google_Client ();
$obj_client_auth -> setApplicationName ('newproject');
$obj_client_auth -> setClientId (G_CLIENT_ID);
$obj_client_auth -> setAssertionCredentials (new Google_Auth_AssertionCredentials (
G_CLIENT_EMAIL,
array('https://spreadsheets.google.com/feeds','https://docs.google.com/feeds'),
file_get_contents (G_CLIENT_KEY_PATH),
G_CLIENT_KEY_PW
));
$obj_client_auth -> getAuth () -> refreshTokenWithAssertion ();
$obj_token = json_decode ($obj_client_auth -> getAccessToken ());
$accessToken = $obj_token->access_token;
$serviceRequest = new DefaultServiceRequest($accessToken);
ServiceRequestFactory::setInstance($serviceRequest);
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService();
$spreadsheetFeed = $spreadsheetService->getSpreadsheets();
$spreadsheet = $spreadsheetFeed->getByTitle('NewSpreadSheet');
$worksheetFeed = $spreadsheet->getWorksheets();
$worksheet = $worksheetFeed->getByTitle('sssNew Worksheet');
$listFeed = $worksheet->getListFeed();
$row = array('name'=>'John', 'age'=>25);
我收到以下错误: 在非对象上调用成员函数 getWorksheets()... 我不明白它有多正确...... 任何帮助和建议
【问题讨论】:
-
首先确定您是否使用以下代码行从 getSpreadsheets() 方法获得任何结果: print_r(count($spreadsheetFeed));如果您没有看到任何结果,请确保您与客户电子邮件共享表格以获取它。也可能会输入错误的工作表名称。
-
谢谢,但我已经打印了 $spreadsheetFeed 并且计数为 0...我不会分享任何表格...表格名称是正确的...任何其他建议
-
因此,如果电子表格提要显示计数为 0,则服务不会返回任何内容。
-
但是当我使用 Web 应用程序凭据手动生成访问令牌时,我能够访问工作表数据......但是在那个令牌很快过期......所以我选择了服务帐户并在我收到此错误是他们在我的代码中的任何其他问题吗?或任何其他使用 Web 应用程序刷新访问令牌的过程...任何其他建议...
-
访问令牌在大约 1 小时后过期 - 使用刷新令牌获取新的访问令牌。令牌带有过期时间,因此您可以检查它是否已过期。 - 我有同样的问题,OAuth2 不容易。
标签: php google-sheets google-spreadsheet-api google-api-php-client