Использовать API Google Sheets с ключом API, а не с OAuth?
Есть ли способ использовать "Google Sheet Java API" с ключом API, а не с OAuth, который приведен в их примерах
https://developers.google.com/sheets/api/quickstart/java
Я знаю, что вы можете использовать HTTP-запрос для получения данных с помощью ключа API, но я подумал, есть ли способ сделать это с помощью API Java, предоставляемого Google, чтобы мне не приходилось анализировать JSON для каждого запроса.
5 ответов
Я не нашел официального способа добиться этого, но смог сделать это, как описано в разделе "Получение и использование ключа API":
После того, как у вас есть ключ API, ваше приложение может добавить параметр запроса
key=yourAPIKey
ко всем URL-адресам запроса.
с помощью перехватчика запросов и добавления key
параметр запроса вручную, например:
private Sheets getSheets() {
NetHttpTransport transport = new NetHttpTransport.Builder().build();
JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance();
HttpRequestInitializer httpRequestInitializer = request -> {
request.setInterceptor(intercepted -> intercepted.getUrl().set("key", API_KEY));
};
return new Sheets.Builder(transport, jsonFactory, httpRequestInitializer)
.setApplicationName(APPLICATION_NAME)
.build();
}
public List<List<Object>> getValues(String spreadsheetId, String range) throws IOException {
return getSheets()
.spreadsheets()
.values()
.get(spreadsheetId, range)
.execute()
.getValues();
}
Да, вы можете, по сути, вам нужно что-то вроде следующего:
public NetHttpTransport netHttpTransport() throws GeneralSecurityException, IOException {
return GoogleNetHttpTransport.newTrustedTransport();
}
public JacksonFactory jacksonFactory() {
return JacksonFactory.getDefaultInstance();
}
private Set<String> googleOAuth2Scopes() {
Set<String> googleOAuth2Scopes = new HashSet<>();
googleOAuth2Scopes.add(SheetsScopes.SPREADSHEETS_READONLY);
return Collections.unmodifiableSet(googleOAuth2Scopes);
}
public GoogleCredential googleCredential() throws IOException {
File serviceAccount = new ClassPathResource("serviceAccount.json").getFile();
return GoogleCredential.fromStream(new FileInputStream(serviceAccount))
.createScoped(googleOAuth2Scopes());
}
public Sheets googleSheets() {
return new Sheets(netHttpTransport(), jacksonFactory(), googleCredential());
}
Вы можете прочитать больше о serviceAccount.json
здесь: https://cloud.google.com/iam/docs/creating-managing-service-account-keys
Это было взято из примера проекта Spring Boot, который я интегрировал с API Google: https://github.com/ciscoo/spring-boot-google-apis-example
Это возможно. Вот как я инициализирую экземплярSheets
используя ключ API вместо OAuth:
SheetsRequestInitializer REQUEST_INITIALIZER = new SheetsRequestInitializer(API_KEY);
JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
Sheets service = new Sheets.Builder(httpTransport, JSON_FACTORY, null)
.setApplicationName("HelloWorld")
.setGoogleClientRequestInitializer(REQUEST_INITIALIZER)
.build();
Да, вы можете использовать ключ API. С https://developers.google.com/sheets/api/guides/authorizing
Каждый запрос, который ваше приложение отправляет в API Google Sheets, должен идентифицировать ваше приложение в Google. Существует два способа идентификации вашего приложения: с помощью токена OAuth 2.0 (который также авторизует запрос) и / или с помощью ключа API приложения.
вы также можете использовать этот код:
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.setGoogleClientRequestInitializer(CommonGoogleClientRequestInitializer.newBuilder().setKey(API_KEY).build())
.build();