PHP - нужна помощь для выполнения запроса API Google Sheets - PullRequest
0 голосов
/ 13 января 2019

Что я собираюсь сделать ~ Пишите на листы Google через .php файл, который получает данные формы html.

Пока ~ Завершено быстрое начало PHP здесь: https://developers.google.com/sheets/api/quickstart/php Успешно завершен и смог читать / писать на лист, используя их пример.

Далее я использовал пример кода, чтобы добавить лист, найденный по адресу: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/append

Но, похоже, отсутствует важный фрагмент кода. Смотри ниже.

Сервер Linux, PHP5.

<code><?php
/*
 * BEFORE RUNNING:
 * ---------------
 * 1. If not already done, enable the Google Sheets API
 *    and check the quota for your project at
 *    https://console.developers.google.com/apis/api/sheets
 * 2. Install the PHP client library with Composer. Check installation
 *    instructions at https://github.com/google/google-api-php-client.
 */

// Autoload Composer.
require_once __DIR__ . '/vendor/autoload.php';

$client = getClient();

$service = new Google_Service_Sheets($client);

// The ID of the spreadsheet to update.
$spreadsheetId = 'my-spreadsheet-id';  // TODO: Update placeholder value.

// The A1 notation of a range to search for a logical table of data.
// Values will be appended after the last row of the table.
$range = 'my-range';  // TODO: Update placeholder value.

// TODO: Assign values to desired properties of `requestBody`:
$requestBody = new Google_Service_Sheets_ValueRange();

$response = $service->spreadsheets_values->append($spreadsheetId, $range, $requestBody);

// TODO: Change code below to process the `response` object:
echo '<pre>', var_export($response, true), '
', "\ n"; function getClient () { // TODO: Изменить заполнитель ниже, чтобы сгенерировать учетные данные для аутентификации. Увидеть // https://developers.google.com/sheets/quickstart/php#step_3_set_up_the_sample // // Авторизуйтесь, используя одну из следующих областей: // 'https://www.googleapis.com/auth/drive' // 'https://www.googleapis.com/auth/drive.file' // 'https://www.googleapis.com/auth/spreadsheets' вернуть ноль; } ?>

Я бы ожидал увидеть заполненную функцию getClient (). Что именно мне нужно добавить сюда?

Полагаю, что после того, как это заполнено, я могу просто сохранить файл php и вызвать приложение, так как мой сайт уже имеет авторизацию.

Заранее спасибо.

Ясиру - Спасибо за предложение. Теперь у меня есть следующее ~

<code><?php
/*
 * BEFORE RUNNING:
 * ---------------
 * 1. If not already done, enable the Google Sheets API
 *    and check the quota for your project at
 *    https://console.developers.google.com/apis/api/sheets
 * 2. Install the PHP client library with Composer. Check installation
 *    instructions at https://github.com/google/google-api-php-client.
 */

// Autoload Composer.
require_once __DIR__ . '/vendor/autoload.php';

$client = getClient();

$service = new Google_Service_Sheets($client);

// The ID of the spreadsheet to update.
$spreadsheetId = 'XXXX';  // TODO: Update placeholder value.

// The A1 notation of a range to search for a logical table of data.
// Values will be appended after the last row of the table.
$range = 'Sheet1';  // TODO: Update placeholder value.

// TODO: Assign values to desired properties of `requestBody`:
//$requestBody = new Google_Service_Sheets_ValueRange();
$requestBody = {
    "majorDimension": 'ROWS',
    "values": [
        "val1","val2"
    ]
}

$response = $service->spreadsheets_values->append($spreadsheetId, $range, $requestBody);

// TODO: Change code below to process the `response` object:
echo '<pre>', var_export($response, true), '
', "\ n"; функция getClient () { $ client = new Google_Client (); $ client-> setApplicationName («Быстрый запуск PHP Google Sheets API»); $ Client-> setScopes ( 'https://www.googleapis.com/auth/spreadsheets'); $ Client-> setAuthConfig ( 'credentials.json'); $ Client-> setAccessType ( 'отсутствует'); $ client-> setPrompt («согласие select_account»); // Загрузка ранее авторизованного токена из файла, если он существует. // Файл token.json хранит токены доступа пользователя и обновляет его и является // создается автоматически при завершении потока авторизации для первого // время $ tokenPath = 'token.json'; if (file_exists ($ tokenPath)) { $ accessToken = json_decode (file_get_contents ($ tokenPath), true); $ Client-> setAccessToken ($ маркер доступа); } // Если предыдущего токена нет или срок его действия истек. if ($ client-> isAccessTokenExpired ()) { // Обновить токен, если это возможно, иначе получить новый. if ($ client-> getRefreshToken ()) { $ Client-> fetchAccessTokenWithRefreshToken ($ client-> getRefreshToken ()); } еще { // Запрос авторизации от пользователя. $ authUrl = $ client-> createAuthUrl (); printf («Откройте в браузере следующую ссылку: \ n% s \ n», $ authUrl); напечатайте «Введите проверочный код:»; $ authCode = trim (fgets (STDIN)); // Обмен кода авторизации на токен доступа. $ accessToken = $ client-> fetchAccessTokenWithAuthCode ($ authCode); $ Client-> setAccessToken ($ маркер доступа); // Проверьте, не было ли ошибки. if (array_key_exists ('error', $ accessToken)) { бросить новое исключение (join (',', $ accessToken)); } } // Сохраняем токен в файл. if (! file_exists (dirname ($ tokenPath)))) { mkdir (dirname ($ tokenPath), 0700, true); } file_put_contents ($ tokenPath, json_encode ($ client-> getAccessToken ())); } вернуть $ client; } ?>

Однако, когда я загружаю страницу, я получаю внутреннюю ошибку сервера 500. Для пояснения приведенный выше PHP сохраняется в test.php, вызывается через url и находится в рабочем каталоге.

1 Ответ

0 голосов
/ 13 января 2019

Скопируйте функцию getClient () со страницы примера и измените следующую строку

$client->setScopes(Google_Service_Sheets::SPREADSHEETS_READONLY);

Для

$client->setScopes('https://www.googleapis.com/auth/spreadsheets');

или один из следующих

 'https://www.googleapis.com/auth/drive'
 'https://www.googleapis.com/auth/drive.file'
...