Все, что я пытаюсь сделать, это прочитать электронную таблицу Google с веб-сайта. Я прочитал и перечитал документы API Google Диска и все, что Google Drive PHP на переполнение стека, и я до сих пор не могу добраться до конечной зоны.
Вот что я сделал:
<?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.
Теперь вы можете получить доступ к содержимому, как и любой другой файл 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 .