Использовать 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();
Другие вопросы по тегам