API de Google Drive – Buscar archivos compartidos Descargar enlaces

Soy nuevo en Google Drive y he cargado muchos archivos. Cambié el estado de todos los archivos que se compartirán si se conoce el vínculo de descarga.

Me gustaría usar PHP para generar una lista de todos los enlaces de descarga directa para los archivos. El script PHP se ejecuta en mi servidor local y solo necesito que el conjunto se guarde en un archivo de texto para usarlo más adelante.

Me ha costado mucho intentar hacer funcionar a Oauth, pero encontré este script que se parece a lo que necesito. Configuré mi cuenta de servicio y tengo el correo electrónico de mi cuenta de servicio y el archivo .p12.

Descargué la base de código del cliente de Google PHP y configuré un script de prueba en mi servidor local. Esto es lo que tengo

require_once "Google/Client.php"; require_once "Google/Service/Drive.php"; require_once "Google/Service/Oauth2.php"; require_once "Google/Auth/AssertionCredentials.php"; session_start(); function buildService($userEmail) { $SERVICE_ACCOUNT_EMAIL = '[email protected]'; $SERVICE_ACCOUNT_PKCS12_FILE_PATH = '12345-privatekey.p12'; $key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH); $auth = new Google_AssertionCredentials( $SERVICE_ACCOUNT_EMAIL, array('https://www.googleapis.com/auth/drive'), $key); $auth->sub = $userEmail; $client = new Google_Client(); $client->setUseObjects(true); $client->setAssertionCredentials($auth); return new Google_DriveService($client); } //... function retrieveAllFiles($service) $service = buildService("[email protected]"); $allFiles = retrieveAllFiles($service); print_r($allFiles); 

Estoy trabajando fuera de este ejemplo

 http://stackoverflow.com/questions/21046631/google-drive-api-php-cant-list-files 

y esto

 https://developers.google.com/drive/web/delegation#instantiate_a_drive_service_object 

No estoy seguro de qué hacer, he agregado las bibliotecas requeridas pero las siguientes funciones están apareciendo como desconocidas en el script PHP

 Google_AssertionCredentials setUseObjects Google_DriveService retrieveAllFiles 

¿Me estoy perdiendo una biblioteca obvia? Se nombran diferentes en el ejemplo, pero supongo que los nombres base han cambiado desde que hubo actualizaciones … He pasado mucho tiempo leyendo en Google Drive y Oauth sin suerte. Mi único objective con este script es obtener una lista de los enlaces de descarga directa. Puedo hacerlo manualmente pero hay demasiados archivos.

Cualquier ayuda sería genial.

Gracias.


* EDITAR: *


Entonces, esto es lo que he intentado obtener mi token:

Estoy siguiendo esta guía de inicio rápido:

 https://developers.google.com/drive/web/quickstart/quickstart-php 

Aquí está mi código

 setClientId('xxx.apps.googleusercontent.com'); $client->setClientSecret('xxx'); $client->setRedirectUri('http://localhost/test/fetch.php'); //same as registered one $client->setScopes(array('https://www.googleapis.com/auth/drive')); $service = new Google_Service_Drive($client); $authUrl = $client->createAuthUrl(); //Request authorization print "Please visit:\n$authUrl\n\n"; print "Please enter the auth code:\n"; $authCode = trim(fgets(STDIN)); // Exchange authorization code for access token $accessToken = $client->authenticate($authCode); $client->setAccessToken($accessToken); 

Esto da como resultado un error

 Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'Invalid code' in C:\Apache24\htdocs\test\Google\Auth\OAuth2.php:95 Stack trace: #0 C:\Apache24\htdocs\test\Google\Client.php(135): Google_Auth_OAuth2->authenticate('') #1 C:\Apache24\htdocs\test\new.php(26): Google_Client->authenticate('') #2 {main} thrown in C:\Apache24\htdocs\test\Google\Auth\OAuth2.php on line 95 

Alguna idea ?

Gracias.


OTRO EDITAR


Así que volví a la antigua biblioteca de Drive PHP ya que la nueva biblioteca de Drive PHP no tiene documentación ni ejemplos.

Este es mi bash de obtener un token y buscar los enlaces del archivo de descarga directa

 require_once 'google-old/google-api-php-client/src/Google_Client.php'; require_once 'google-old/google-api-php-client/src/contrib/Google_DriveService.php'; $client = new Google_Client(); // Get your credentials from the console $client->setClientId('xx.apps.googleusercontent.com'); $client->setClientSecret('xx'); $client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob'); $client->setScopes(array('https://www.googleapis.com/auth/drive')); $service = new Google_DriveService($client); $authUrl = $client->createAuthUrl(); //Request authorization print "Please visit:\n$authUrl\n\n"; print "Please enter the auth code:\n"; $authCode = trim(fgets(STDIN)); // Exchange authorization code for access token $accessToken = $client->authenticate($authCode); $client->setAccessToken($accessToken); $getAll = retrieveAllFiles($service); print "
"; print_r($getAll); print "

"; /** * Retrieve a list of File resources. * * @param Google_DriveService $service Drive API service instance. * @return Array List of Google_DriveFile resources. */ function retrieveAllFiles($service) { $result = array(); $pageToken = NULL; do { try { $parameters = array(); if ($pageToken) { $parameters['pageToken'] = $pageToken; } $files = $service->files->listFiles($parameters); $result = array_merge($result, $files->getItems()); $pageToken = $files->getNextPageToken(); } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); $pageToken = NULL; } } while ($pageToken); return $result; }

El problema que ahora enfrento es que estoy atrapado en la parte “Pegar el código en la aplicación”.

los

 $authCode = trim(fgets(STDIN)); 

no parece querer ejecutar.

Además, creo que el código de búsqueda de archivos simplemente obtendrá los nombres de los archivos, y no los enlaces de descarga directa. No pude encontrar un ejemplo para esto.

Cualquier sugerencia sería muy apreciada.

Gracias.

Estoy probando esto en mi servidor local.

En primer lugar, separe su aprendizaje sobre OAuth de su aprendizaje sobre Drive. Como un problema combinado, es difícil, pero como dos problemas separados, es bastante simple.

Para OAuth, todo lo que necesita saber está en esta página web https://developers.google.com/accounts/docs/OAuth2WebServer

Después de leer esa página y entenderla, si desea usar una biblioteca para hacer las llamadas, continúe. En mi humilde opinión, las bibliotecas OAuth no hacen un gran trabajo, pero mmm. Con o sin una biblioteca, es esencial que comprenda lo que está sucediendo.

Habiendo descifrado OAuth, terminaste con un access_token shiny que ingresas en la API de Drive, ya sea como un encabezado http si estás llamando a la API rar, o envuelto en un objeto de credencial si estás utilizando una de las bibliotecas.

Reemplaza las cosas de STDIN.

poner esto en su lugar:

 if (!isset($_GET['code'])) { print "Please visit:\n$authUrl\n\n"; print "Please enter the auth code:\n"; } else { $authCode = ''; } //$authCode = trim(fgets(STDIN)); $authCode = $_GET['code']; 

El código de Google es defectuoso en términos de su cosa. Una vez hecho esto, estoy obteniendo la creación de archivos (todavía está sacando un error pero está produciendo los archivos).

reemplace su línea file_get_contents por:

 $data = 'blahblah blah';//file_get_contents('document.txt'); 

y ahí tienes.