Как прочитать таблицу на Google Диске в PHP?

Все, что я пытаюсь сделать, это прочитать электронную таблицу Google с веб-сайта. Я прочитал и перечитал документы API Google Диска и все, что Google Drive PHP на переполнение стека, и я до сих пор не могу добраться до конечной зоны.

Вот что я сделал:

  1. Для консоли Google API и:
    1. Включено «Drive API» и «Drive SDK» в разделе «Услуги»;
    2. Создал идентификатор клиента OAuth 2.0 в разделе «Доступ к API». В разделе «Идентификатор клиента для веб-приложений» консоль предоставила мне «Идентификатор клиента», «Адрес электронной почты», «Клиентский секрет», «Перенаправление URI» и «Основания JavaScript»;
  2. Загрузили «Клиентскую библиотеку PHP API Google»;
  3. Открыл документ Google Диска (электронная таблица) и нажал «Поделиться», чтобы получить «ключ» документа;
  4. Настройте следующий код:
<?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', 'https://www.googleapis.com/auth/drive' ); define( 'GDRIVE_SCOPE_02', 'https://www.googleapis.com/auth/drive.apps.readonly' ); define( 'GDRIVE_SCOPE_03', 'https://www.googleapis.com/auth/drive.file' ); define( 'GDRIVE_SCOPE_04', 'https://www.googleapis.com/auth/drive.metadata.readonly' ); define( 'GDRIVE_SCOPE_05', 'https://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 ) вызов $service->files->get( GDRIVE_FILE_KEY ) который вызывает исключение:

Произошла ошибка: Ошибка при вызове GET https://www.googleapis.com/drive/v2/files : (403) Дневной лимит неиспользуемого использования превышен. Для продолжения использования требуется регистрация.

Что я делаю не так? Я вытащил свои волосы (ну, что осталось).

Существует также гораздо более легкое, но менее чистое решение, если вы не хотите беспокоиться об API или аутентификации Google.

  1. Перейдите в таблицу на Google Диске.
  2. Перейти к файлам -> Опубликовать в Интернете
  3. Выберите правильный лист и убедитесь, что флажок всегда обновляется.
  4. Тем не менее в том же поле вы можете получить .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"); 

Пожалуйста, ознакомьтесь с быстрым стартом PHP на Google Диске . Вы не авторизировали своего клиента. Начиная с $authUrl = $client->createAuthUrl();

Все запросы на Google Диск требуют авторизации.

Вам нужно использовать oauth, если вы не используете Google, вы сможете сделать несколько запросов.

Если все, что вы хотите сделать, это считывать данные из электронной таблицы google или записывать в нее данные, вы можете просто использовать таблицу api. Проверьте php-google-электронную таблицу-клиент .

Если вы хотите, чтобы ваш собственный файл читался, вам нужна учетная запись службы, а не «Идентификатор клиента для веб-приложений». Я сам боролся с этой проблемой, и это принесло мне решение: https://developers.google.com/drive/web/service-accounts

Я создал образец проекта, который использует учетную запись службы для аутентификации против Google Spreadsheets, чтобы получить доступ к содержимому электронной таблицы.

Посмотрите README на странице https://github.com/juampynr/google-spreadsheet-reader .