Я создал ключ сервера в диспетчере API и попытался выполнить на своем Mac следующее:
curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager'
Но вот что он возвращает:
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
Что я здесь делаю не так?
google-api
google-sheets
google-sheets-api
Instabrite
источник
источник
Ответы:
Чтобы решить эту проблему, попробуйте:
У меня сработало :)
источник
Я знаю, что сейчас немного поздно отвечать, но для других людей, которые борются с той же проблемой.
Просто измените разрешение листа на общедоступное на вашем диске, чтобы к нему можно было получить доступ без аутентификации через вызовы API.
Чтобы изменить доступ:
Отправить запрос API для извлечения данных из таблиц без аутентификации.
Примечание: если лист содержит конфиденциальные данные, то делать его общедоступным небезопасно, а лучше делать это с доступом с проверкой подлинности.
источник
Обязательно обратите внимание на комментарий @ KishanPatel:
источник
Самый простой способ - исправить с помощью gcloud cli. Больше документов здесь https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin
установить gcloud
тогда позвони
затем проверьте свой активный проект и учетные данные
Если это не так, убедитесь, что вы прошли аутентификацию с правильной учетной записью:
Если нет, перейдите в аккаунт проекта:
В зависимости от аккаунта список проектов будет разным:
Перейти к предполагаемому проекту:
Затем создайте учетные данные приложения по умолчанию с помощью
gcloud auth application-default login
, а затем google-cloud автоматически обнаружит такие учетные данные.источник
Мои 10 центов ... Простой пример чтения листа с помощью 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();
источник