Как прочитать таблицу на Google Диске в PHP?
Все, что я пытаюсь сделать, это прочитать электронную таблицу Google с веб-сайта. Я прочитал и перечитал документы Google Диска API и все, что было на Google Диске PHP на переполнении стека, и я до сих пор не могу добраться до конечной зоны.
Вот что я сделал:
- Подключитесь к консоли API Google и:
- Включено "Drive API" и "Drive SDK" в разделе "Услуги";
- Создал идентификатор клиента OAuth 2.0 в разделе "Доступ к API". В разделе "Идентификатор клиента для веб-приложений" консоль предоставила мне "Идентификатор клиента", "Адрес электронной почты", "Клиентский секрет", "Перенаправление URI" и "Исходные коды JavaScript";
- Загрузили "Клиентскую библиотеку PHP API Google API";
- Открыл документ Google Диска (электронная таблица) и нажал "Поделиться", чтобы получить документ "ключ";
- Настройте следующий код:
<?php
session_start();
require_once 'lib/gapi/Google_Client.php';
require_once 'lib/gapi/contrib/Google_DriveService.php';
define( 'GDRIVE_CLIENT_ID', '<API Console - API Access - Client ID>' );
define( 'GDRIVE_CLIENT_SECRET', '<API Console - API Access - Client secret>' );
define( 'GDRIVE_REDIRECT_URIS', '<API Console - API Access - Redirect URIs>' );
define( 'GDRIVE_SCOPE_01', 'h t t p s://www.googleapis.com/auth/drive' );
define( 'GDRIVE_SCOPE_02', 'h t t p s://www.googleapis.com/auth/drive.apps.readonly' );
define( 'GDRIVE_SCOPE_03', 'h t t p s://www.googleapis.com/auth/drive.file' );
define( 'GDRIVE_SCOPE_04', 'h t t p s://www.googleapis.com/auth/drive.metadata.readonly' );
define( 'GDRIVE_SCOPE_05', 'h t t p s://www.googleapis.com/auth/drive.readonly' );
define( 'GDRIVE_FILE_KEY', '<'key' given from 'sharing' document>' );
$client = new Google_Client();
$client->setClientId( GDRIVE_CLIENT_ID );
$client->setClientSecret( GDRIVE_CLIENT_SECRET );
$client->setRedirectUri( GDRIVE_REDIRECT_URIS );
$client->setScopes( array( GDRIVE_SCOPE_01, GDRIVE_SCOPE_02, GDRIVE_SCOPE_03, GDRIVE_SCOPE_04, GDRIVE_SCOPE_05 ) );
try {
$file = $service->files->get( GDRIVE_FILE_KEY );
echo "Title: ", $file->getTitle();
echo "Description: ", $file->getDescription();
echo "MIME type: ", $file->getMimeType();
} catch (Exception $e) {
echo "An error occurred: ", $e->getMessage();
}
?>
Все работает нормально (без ошибок) до вызова $service->files->get( GDRIVE_FILE_KEY )
, который вызывает исключение:
Произошла ошибка: Ошибка при вызове GET https://www.googleapis.com/drive/v2/files
: (403) Дневной лимит для неиспользуемого использования превышен. Для продолжения использования требуется регистрация.
Что я делаю неправильно? Я вытащил свои волосы (ну, что осталось).
Ответы
Ответ 1
Существует также гораздо более легкое, но менее чистое решение, если вы не хотите беспокоиться об API или аутентификации Google.
- Перейдите в электронную таблицу на Google Диске.
- Перейти к файлам → Опубликовать в Интернете
- Выберите правильный лист и убедитесь, что флажок всегда обновляется.
- В том же окне вы можете получить CSV-ссылку на свою электронную таблицу.
Теперь вы можете получить доступ к содержимому, как и любой другой файл csv в Интернете.
Вот пример кода:
$spreadsheet_url="https://docs.google.com/spreadsheet/pub?key=<somecode>&single=true&gid=0&output=csv";
if(!ini_set('default_socket_timeout', 15)) echo "<!-- unable to change socket timeout -->";
if (($handle = fopen($spreadsheet_url, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$spreadsheet_data[] = $data;
}
fclose($handle);
}
else
die("Problem reading csv");
Ответ 2
Пожалуйста, проверьте Быстрый запуск Google Диска PHP. Вы не авторизировали своего клиента. Начиная с $authUrl = $client->createAuthUrl();
Все запросы на Google Диск требуют авторизации.
Ответ 3
Вам нужно использовать oauth, если вы не используете Google, вы сможете сделать несколько запросов.
Если все, что вы хотите сделать, это считывать данные из электронной таблицы google или записывать в нее данные, вы можете просто использовать таблицу api. Проверьте php-google-spreadsheet-client.
Ответ 4
Если вы хотите, чтобы ваш собственный файл был прочитан, вам нужна учетная запись службы, а не "Идентификатор клиента для веб-приложений". Я сам боролся с этой проблемой надолго, и это принесло мне решение:
https://developers.google.com/drive/web/service-accounts
Ответ 5
Я создал образец проекта, который использует учетную запись службы для аутентификации против Google Spreadsheets, чтобы получить доступ к содержимому электронной таблицы.
Посмотрите README на https://github.com/juampynr/google-spreadsheet-reader.