Подтвердить что ты не робот

Как прочитать таблицу на 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) Дневной лимит для неиспользуемого использования превышен. Для продолжения использования требуется регистрация.

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

4b9b3361

Ответ 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.