想要在PHP中添加Google电子表格中的新记录/行

时间:2015-05-31 05:31:31

标签: php google-sheets google-spreadsheet-api

我想通过php编码在Google电子表格中添加新记录。我搜索过并找到了一个使用gmail id和密码系统进行身份验证的解决方案。它最初工作,但2天后突然停止工作。代码如下所述:

<?php

include 'spreadsheet.php';
$Spreadsheet = new Spreadsheet("xxxxx@gmail.com", "xxxxxxx");
$Spreadsheet->setSpreadsheet("Tester")->setWorksheet("Sheet1")->add(array("First Name" => "Cell 1", "Last Name" => "Cell 2"));

?>

停止工作后,我发现Google已经更改了它的登录系统,我需要迁移到Oauth系统进行身份验证。

做了很长时间的R&amp; D我找到了一个例子 - &#34; https://github.com/asimlqt/php-google-spreadsheet-client&#34; 。但它没有工作,在梳理了我的各种搜索源后,我开发了以下代码:

<?php

include_once "google-api-php-client/examples/templates/base.php";

/************************************************
  Make an API request authenticated with a service
  account.
 ************************************************/
require_once realpath(dirname(__FILE__) . '/google-api-php-client/src/Google/autoload.php');

$accessToken = getGoogleTokenFromKeyFile("XXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX");

use Google\Spreadsheet\DefaultServiceRequest;
use Google\Spreadsheet\ServiceRequestFactory;

//ServiceRequestFactory::setInstance(new DefaultServiceRequest($accessToken));

// Load spreadsheet and worksheet
$worksheet = (new Google\Spreadsheet\SpreadsheetService())
    ->getSpreadsheets()
    ->getByTitle('Sheet1')       // Spreadsheet name
    ->getWorksheets()
    ->getByTitle('Tester');      // Worksheet name
$listFeed = $worksheet->getListFeed();

// Uncomment this to find out what Google calls your column names
// print_r($listFeed->getEntries()[0]->getValues());

// Add a new blank row to the spreadsheet, using the column headings
$listFeed->insert(['name' => 'Simon', 'age' => 25, 'gender' => 'male']);

/**
 * Retrieves a Google API access token by using a P12 key file,
 * client ID and email address
 *
 * These three things may be obtained from 
 * https://console.developers.google.com/
 * by creating a new "Service account"
 */
function getGoogleTokenFromKeyFile($clientId, $clientEmail, $pathToP12File) {
    $client = new Google_Client();
    $client->setClientId($clientId);

    $cred = new Google_Auth_AssertionCredentials(
        $clientEmail,
        array('https://spreadsheets.google.com/feeds'),
        file_get_contents($pathToP12File)
    );

    $client->setAssertionCredentials($cred);

    if ($client->getAuth()->isAccessTokenExpired()) {
        $client->getAuth()->refreshTokenWithAssertion($cred);
    }

    $service_token = json_decode($client->getAccessToken());
    return $service_token->access_token;
}


?>

但不幸的是,这个也没有用,在突然的时间范围之后,它在我的本地xampp服务器中显示请求超时错误。

到目前为止,我的申请被搁置。真的不知道现在该做什么。如果有人有任何具体的解决方案,请与我分享。我的主要目的是在用户在我的网站上提交他的详细信息时向谷歌电子表格添加数据。或者,如果谷歌认证系统发生变化后无法实现,请同时确认。我希望找到解决这个问题的最终解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您能够检索有效的令牌,那么请使用&#34; Bearer yourtokenstring&#34;在请求标头中传递令牌。谷歌最近改变了这一点,并且#34; GoogleLogin auth = yourtokenstring&#34;。请改用Bearer标签。

如果您在努力检索有效的访问令牌,请考虑使用带有p12密钥文件的服务帐户。将电子表格的编辑权限授予服务帐户电子邮件地址。