Wygenerowałem klucz serwera w menedżerze API i próbowałem wykonać następujące czynności na moim Macu:
curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager'
Ale oto, co zwraca:
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
Co ja tu robię źle?
google-api
google-sheets
google-sheets-api
Instabrite
źródło
źródło
Odpowiedzi:
Aby rozwiązać ten problem, spróbuj:
U mnie zadziałało :)
źródło
Wiem, że na odpowiedź jest trochę za późno, ale dla innych osób borykających się z tym samym problemem.
Po prostu zmień uprawnienia arkusza na publiczne na dysku, aby można było uzyskać do niego dostęp bez uwierzytelniania za pośrednictwem wywołań API.
Aby zmienić dostęp:
Wyślij żądanie API, aby pobrać dane z arkuszy bez uwierzytelniania.
Uwaga: jeśli arkusz zawiera dane wrażliwe, nie jest bezpieczne udostępnianie go publicznie i raczej robienie tego z dostępem uwierzytelnionym.
źródło
Zwróć uwagę na komentarz @ KishanPatel:
źródło
Najłatwiej jest to naprawić za pomocą gcloud cli. Więcej dokumentów tutaj https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin
zainstaluj gcloud
Wtedy zadzwoń
następnie sprawdź swój aktywny projekt i poświadczenia
Jeśli to nie jest w porządku, upewnij się, że jesteś uwierzytelniony za pomocą właściwego konta:
Zmień na konto projektu, jeśli nie:
W zależności od konta lista projektów będzie się różnić:
Przejdź do zamierzonego projektu:
Następnie utwórz domyślne dane logowania aplikacji za pomocą
gcloud auth application-default login
, a następnie google-cloud automatycznie wykryje takie poświadczenia.źródło
Moje 10 centów ... Prosty przykład czytania arkusza za pomocą 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();
źródło