Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

347
Views
¿Cómo usar la cuenta de servicio de Google para recuperar las actividades de Google Drive a través de la API de actividad?

Tengo un Google Drive en mi cuenta personal de Google. También configuré una aplicación de Google con una cuenta de servicio en mi cuenta personal de Google. Esa cuenta de servicio tiene la función de Propietario.

Estoy tratando de usar la cuenta de servicio para obtener una lista de la actividad reciente en alguna carpeta en mi Google Drive. Agregué el correo electrónico de la cuenta de servicio como usuario compartido para la carpeta con permiso de edición. Pero cada vez que ejecuto la API de actividad de Google, no obtengo resultados para las actividades, aunque estoy haciendo varias cosas en la carpeta compartida, como agregar archivos.

Estoy haciendo esto en PHP a través de

 $client = new Google_Client(); $client->setApplicationName('Some App'); $client->setAuthConfig( __DIR__ . '/service_account.json'); $client->setScopes(Google_Service_DriveActivity::DRIVE_ACTIVITY_READONLY); $client->fetchAccessTokenWithAssertion(); $service = new Google_Service_DriveActivity($client); // Print the recent activity in your Google Drive. $request = new Google_Service_DriveActivity_QueryDriveActivityRequest(); $request->setPageSize(10); $results = $service->activity->query($request); if (count($results->getActivities()) == 0) { print "No activity.\n"; else // do something

Siempre activa "Sin actividad". Repaso el código y no hay errores. El proyecto al que está asociada la cuenta de servicio tiene habilitada la API de actividad de Google.

¿Quizás esto no funciona porque la cuenta de servicio no es la que realiza las actividades? Aunque pensé que el objetivo de una cuenta de servicio es obtener acceso a los datos en nombre de alguien (en este caso, ese alguien soy yo).

Acabo de hacer una prueba: utilicé mis credenciales Oauth2 para mi aplicación en lugar de las credenciales de la cuenta de servicio y funciona. Pero esa es la cuestión: realmente necesito que esto funcione para la cuenta de servicio.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

si revisa la sección Auth de la documentación para la API de actividad de Drive. Notará que no dice que las cuentas de servicio son compatibles.

La razón por la que no funciona bien en realidad funciona es esta.

La API de actividad consta del recurso DriveActivity, que representa los cambios realizados en los objetos dentro de Google Drive de un usuario , y el método de consulta, que le permite recuperar información sobre esos cambios.

Está buscando cambios para ese usuario. no para una carpeta o directorio en la unidad que compartió con la cuenta de servicio

La cuenta de servicio es un usuario y si ese usuario no ha cambiado nada, verá "Sin actividad".

Aunque pensé que el objetivo de una cuenta de servicio es obtener acceso a los datos en nombre de alguien (en este caso, ese alguien soy yo).

Lo es en cierto modo, pero actualmente lo está haciendo en nombre de la cuenta de servicio. No ha delegado permisos a otro usuario. Para ser claros, compartir una carpeta con una cuenta de servicio NO constituye configurar una delegación para que pueda actuar en su nombre. Tan ...

Para hacerlo, debe habilitar la delegación en todo el dominio desde una cuenta de espacio de trabajo. Esto es algo que puede valer la pena probar.

over 4 years ago · Santiago Trujillo Report

0

(Solución publicada en nombre del autor de la pregunta para moverla al espacio de respuesta) .

Usando la respuesta aceptada, y leyendo un poco sobre esto, tengo las cosas funcionando. Esto es lo que hice para que esto funcione.

  1. Cuenta de servicio creada según las instrucciones habituales (como aquí: https://developers.google.com/admin-sdk/directory/v1/guides/delegation , en "Crear la cuenta de servicio y las credenciales")

  2. En el mismo enlace anterior, en "Delegar la autoridad de todo el dominio a su cuenta de servicio", configure la cuenta de servicio para que tenga delegación de dominio. Estas instrucciones no son tan buenas, ya que en realidad no hablan mucho sobre los visores. Al hacer todo esto, no está claro si se necesita algún alcance para que funcione la suplantación de identidad del usuario, así como el alcance de algunas API, como Google Drive API o Drive Activity. Fui con estos:

 https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.activity.readonly https://www.googleapis.com/auth/admin.directory.user

pero realmente no estoy seguro si en mi caso, solo se necesita https://www.googleapis.com/auth/drive.activity.readonly . Podría probar eso fácilmente, pero por ahora no me preocupo.

  1. Luego, en mi código PHP, hago lo que estaba haciendo anteriormente, pero con el necesario $client->setSubject('myemail'); línea, que finalmente entendí después de leer aquí:

https://github.com/googleapis/google-api-php-client#delegatingauthority

en "Autenticación de cuentas de servicio". Así como esto:

 $client = new Google_Client(); $client->setApplicationName('Some App'); $client->setAuthConfig( __DIR__ . '/service_account.json'); $client->setScopes(Google_Service_DriveActivity::DRIVE_ACTIVITY_READONLY); $client->fetchAccessTokenWithAssertion(); $client->setSubject('myemail'); $service = new Google_Service_DriveActivity($client); // Print the recent activity in your Google Drive. $request = new Google_Service_DriveActivity_QueryDriveActivityRequest(); $request->setPageSize(10); $results = $service->activity->query($request);
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!