He generado 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í?
google-api
google-sheets
google-sheets-api
Instabrite
fuente
fuente
Respuestas:
Para resolver este problema, intente:
Funcionó para mí :)
fuente
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 se pueda acceder sin autenticación a través de llamadas a la API.
Para cambiar el acceso:
Envíe una solicitud de API para obtener datos de hojas sin autenticación.
Nota: si la hoja contiene datos confidenciales, no es seguro hacerla pública y más bien hacerlo con acceso autenticado.
fuente
Asegúrese de prestar atención al comentario de @ KishanPatel:
fuente
La forma más sencilla es solucionarlo con gcloud cli. Más documentos aquí https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin
instalar gcloud
luego llame
luego verifique su proyecto activo y sus credenciales
Si no está bien, asegúrese de estar autenticado con la cuenta correcta:
Cambie a la cuenta del proyecto si no:
Según la cuenta, la lista de proyectos será diferente:
Cambiar al proyecto previsto:
Luego, cree las credenciales predeterminadas de la aplicación con
gcloud auth application-default login
, y luego google-cloud detectará automáticamente dichas credenciales.fuente
Mis 10 centavos ... Un ejemplo sencillo para leer la hoja usando Java .
private Credential getCredentials() throws IOException { final InputStream accessKey = new ByteArrayInputStream("<credential json>"); final GoogleCredential credential = GoogleCredential.fromStream(accessKey) .createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS_READONLY)); return credential; } private HttpTransport httpTransport() { try { return GoogleNetHttpTransport.newTrustedTransport(); } catch (GeneralSecurityException | IOException e) { throw new SpreadSheetServiceException(e); } } Sheets service = new Sheets.Builder(httpTransport(), JSON_FACTORY, getCredentials()) .setApplicationName("app-name") .build(); ValueRange response = service.spreadsheets().values() .get("<spread_sheet_id>", "A1:A") .execute();
fuente