Как получить список альбомов пользователя, используя новый API Google Photos - PullRequest
0 голосов
/ 22 мая 2018

Я хочу получить список моих альбомов из Google Фото.И я использую новый REST API.

Я написал код, который выполняет запрос GET:

GET
https://photoslibrary.googleapis.com/v1/albums

в соответствии с официальным руководством: https://developers.google.com/photos/library/guides/list
И этот код возвращает толькоответ со статусом 200, но без тела json:

Листинг:

public static void main(String[] args) throws IOException, GeneralSecurityException, ServiceException, ParseException {
    GoogleCredential credential = createCredential();

    if (!credential.refreshToken()) {
        throw new RuntimeException("Failed OAuth to refresh the token");
    }

    System.out.println(credential.getAccessToken());
    doGetRequest(credential.getAccessToken(), "https://photoslibrary.googleapis.com/v1/albums");
}


private static GoogleCredential createCredential() {
    try {
        return new GoogleCredential.Builder()
                .setTransport(HTTP_TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setServiceAccountId(emailAccount)
                .setServiceAccountPrivateKeyFromP12File(ENCRYPTED_FILE)
                .setServiceAccountScopes(SCOPE)
                .setServiceAccountUser(emailAccount)
                .build();
    } catch (Exception e) {
        throw new RuntimeException("Error while creating Google credential");
    }
}

private static void doGetRequest(String accessToken, String url) throws IOException, ParseException {
    logger.debug("doGetRequest, with params: url: {}, access token: {}", accessToken, url);
    HttpGet get = new HttpGet(url);
    get.addHeader("Authorization",
            "Bearer" + " " + accessToken);
    HttpClient client = HttpClientBuilder.create().build();
    HttpResponse response = client.execute(get);
    String json = EntityUtils.toString(response.getEntity());
    System.out.println(json);
}

Также я попытался использовать другие клиенты REST (например, Почтальон) и тот же результат яполучить это:

{}

1 Ответ

0 голосов
/ 28 мая 2018

Похоже, вы используете служебную учетную запись для доступа к API. Сервисные учетные записи не поддерживаются API библиотеки Google Photos.

Вам потребуется настроить OAuth 2.0 для веб-приложения , как описано здесь :

  • Перейдите на Консоль разработчиков Google и откройте свой проект
  • Перейдите на Страница учетных данных из меню
  • Нажмите Создать учетные данные > Идентификатор клиента OAuth
  • Установите тип приложения Веб-приложение и заполните форму.Также укажите URI перенаправления для вашего приложения для получения обратного вызова из запроса OAuth и URI вашего приложения .

Затем вы будете использовать client Id и client secret возвращены на этой странице как часть ваших запросов.Если вам нужен автономный доступ, то есть доступ, когда пользователь отсутствует в браузере, вы также можете запросить offline access_type и использовать refresh tokens для поддержки доступа.

Похоже, что вы естьс помощью Java-клиента Google API, который также поддерживает этот поток.Установите клиентские секреты на сборщике, вызвав setClientSecrets(..) следующим образом:

 return new GoogleCredential.Builder()
                .setTransport(HTTP_TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setClientSecrets(CLIENT_ID, CLIENT_SECRET)
                .build();

Вам также необходимо обработать обратный вызов из запроса OAuth в вашем приложении, где вы получите доступтокены по URL-адресу обратного вызова , который вы настроили в консоли разработчика.

В документации для клиентской библиотеки .

также есть более полный пример.
...