formulario - php google spreadsheet
¿Cómo leo una hoja de cálculo de Google Drive en PHP? (5)
Creé un proyecto de muestra que utiliza una cuenta de servicio para autenticarse en las hojas de cálculo de Google para acceder a los contenidos de una hoja de cálculo.
Eche un vistazo a README en https://github.com/juampynr/google-spreadsheet-reader .
Todo lo que trato de hacer es leer una hoja de cálculo de Google desde un sitio web. He leído y releído los documentos de la API de Google Drive y todo el PHP de Google Drive en Stack Overflow y todavía no puedo llegar a la zona de anotación.
Esto es lo que he hecho:
- He estado en la consola de Google API y:
- Habilitado "Drive API" y "Drive SDK" en "Servicios";
- Creé un ID de cliente OAuth 2.0 en ''Acceso API''. En "ID de cliente para aplicaciones web", la consola me dio "ID de cliente", "Dirección de correo electrónico", "Secreto de cliente", "Redireccionar URI" y "Origen de JavaScript";
- Descargó la "Biblioteca de clientes API API de Google";
- Abrió el documento de Google Drive (hoja de cálculo) y hizo clic en "Compartir" para obtener la "clave" del documento;
- Configura el siguiente código:
<?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();
}
?>
Todo funciona bien (no hay errores de todos modos) hasta que la $service->files->get( GDRIVE_FILE_KEY )
que activa la excepción:
Ocurrió un error: Error al llamar a GET
https://www.googleapis.com/drive/v2/files
: (403) Se excedió el límite diario para el uso no autenticado. El uso continuo requiere registro.
¿Qué estoy haciendo mal? Me he sacado el pelo (bueno, lo que quedaba).
Debe utilizar auth, si no usa Google solo le permitirá realizar algunas solicitudes.
Si todo lo que quieres hacer es leer datos de una hoja de cálculo de Google o escribir datos en ella, puedes usar la api de la hoja de cálculo. Echa un vistazo a php-google-spreadsheet-client .
Por favor, compruebe el inicio rápido de PHP de Google Drive . En realidad no ha autorizado a su cliente. A partir de $authUrl = $client->createAuthUrl();
Todas las solicitudes de Google Drive necesitan autorización de algún tipo.
Si quiere que su propio archivo sea leído, necesita una cuenta de servicio en lugar de una "Identificación de cliente para aplicaciones web". He estado luchando contra este problema por mucho tiempo y esto me trajo la solución: https://developers.google.com/drive/web/service-accounts
También hay una solución mucho más fácil, pero menos limpia, si no quiere molestarse con la API o la autenticación de Google.
- Ve a tu hoja de cálculo en Google Drive.
- Ir a archivos -> Publicar en la Web
- Seleccione la hoja de trabajo correcta y asegúrese de habilitar la casilla de verificación siempre actualizar.
- Aún en el mismo cuadro, puede obtener un enlace .csv a su hoja de cálculo.
Ahora puede acceder a los contenidos como cualquier otro archivo csv en la Web. Aquí hay un código de ejemplo:
$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");