google-api - example - python google sheets
La API de Google Sheets devuelve "La persona que llama no tiene permiso" cuando usa la clave del servidor (4)
Asegúrate de prestar atención al comentario de @ KishanPatel:
Además, puede compartir esta hoja con un correo electrónico específico, ej. tu cuenta de servicio (proyecto) email. "client_email": "[email protected]", Esto le permitirá acceder a la hoja desde su script.
Generé una clave de servidor en el Administrador de API e intenté ejecutar lo siguiente en mi Mac:
curl ''https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager''
Pero esto es lo que devuelve:
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
¿Qué estoy haciendo mal aquí?
La forma más fácil es arreglarlo usando gcloud cli. Más documentos aquí https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin
Cuando pueda utilizar esta herramienta, llame al
gcloud init
entonces revisa tu proyecto activo y credenciales
gcloud config configurations list
Si no está bien, asegúrese de estar autenticado con la cuenta correcta:
gcloud auth list
* account 1
account 2
Cambie a la cuenta del proyecto si no:
gcloud config set account `ACCOUNT`
Dependiendo de la cuenta, la lista de proyectos será diferente:
gcloud projects list
- project 1
- project 2...
Cambiar al proyecto previsto:
gcloud config set project `PROJECT NAME`
A continuación, gcloud auth application-default login
credenciales predeterminadas de la gcloud auth application-default login
y, a continuación, google-cloud detectará automáticamente dichas credenciales.
Para resolver este problema, intente:
- cree una cuenta de servicio: https://console.developers.google.com/iam-admin/serviceaccounts/
- en opciones, cree una clave: esta clave es su cliente habitual_secret.json - úsela de la misma manera
- agregar permiso de propietario a esta cuenta de servicio (nombre de miembro = ID de cuenta de servicio = correo electrónico de la cuenta de servicio ej: [email protected]
- Copie la dirección de correo electrónico de su cuenta de servicio = ID de cuenta de servicio
- simplemente vaya en su navegador a la hoja de Google con la que desea interactuar
- Ve a COMPARTIR en la parte superior derecha de tu pantalla
- vaya a la configuración avanzada y compártala con la dirección de correo electrónico de su cuenta de servicio, por ejemplo, [email protected]
Funciono para mi :)
Sé que es un poco tarde para responder, pero para otras personas que luchan con el mismo problema.
Simplemente cambie el permiso de la hoja a público en su disco para que pueda acceder a él sin autenticación a través de llamadas API.
Para cambiar el acceso:
- Abrir hoja en google drive
- En la esquina superior derecha, haga clic en compartir
- En la parte inferior de la ventana de solicitud, haga clic en Avanzado
- Cambiar el permiso a público o personas con enlace (no se requiere inicio de sesión)
Enviar solicitud de API para recuperar datos de hojas sin autenticación.
Nota: si la hoja contiene datos confidenciales, no es seguro hacerlo público y, más bien, hacerlo con acceso autenticado.