如何使用新 Google 照片 API 获取用户相册列表
How to get list of the user's albums using new Google Photos API
我想从 Google 照片中获取我的相册列表。
我正在使用新的 REST API.
我写了执行 GET 请求的代码:
GET
https://photoslibrary.googleapis.com/v1/albums
根据官方指南:https://developers.google.com/photos/library/guides/list
并且此代码仅 returns 状态为 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 客户端(例如 Postman),我收到的结果相同:
{}
您似乎正在使用服务帐户访问 API。 Service accounts Google 照片库 API 不支持。
您需要按照 here:
中所述为 Web 应用程序 设置 OAuth 2.0
- 转到 Google Developers console 并打开您的项目
- 从菜单转到 Credentials Page
- 单击创建凭据 > OAuth 客户端 ID
- 将应用程序类型设置为 Web 应用程序 并填写表格。还要为您的应用程序指定一个 重定向 URI 以接收来自 OAuth 请求的回调和您的应用程序的 URI.
然后您将使用此页面上返回的 client Id
和 client secret
作为您请求的一部分。如果您需要离线访问,这意味着当用户不在浏览器中时访问,您也可以请求一个 offline
access_type
并使用 refresh tokens
来保持访问。
看来您使用的是Google API Java 客户端,该客户端也支持此流程。通过像这样调用 setClientSecrets(..)
在构建器上设置客户端机密:
return new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.build();
您还需要在您的应用程序中处理来自 OAuth 请求的回调,您将在 回调 URL 中收到您在开发者控制台。
documentation for the client library中还有一个更完整的例子。
我想从 Google 照片中获取我的相册列表。 我正在使用新的 REST API.
我写了执行 GET 请求的代码:
GET
https://photoslibrary.googleapis.com/v1/albums
根据官方指南:https://developers.google.com/photos/library/guides/list
并且此代码仅 returns 状态为 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 客户端(例如 Postman),我收到的结果相同:
{}
您似乎正在使用服务帐户访问 API。 Service accounts Google 照片库 API 不支持。
您需要按照 here:
中所述为 Web 应用程序 设置 OAuth 2.0- 转到 Google Developers console 并打开您的项目
- 从菜单转到 Credentials Page
- 单击创建凭据 > OAuth 客户端 ID
- 将应用程序类型设置为 Web 应用程序 并填写表格。还要为您的应用程序指定一个 重定向 URI 以接收来自 OAuth 请求的回调和您的应用程序的 URI.
然后您将使用此页面上返回的 client Id
和 client secret
作为您请求的一部分。如果您需要离线访问,这意味着当用户不在浏览器中时访问,您也可以请求一个 offline
access_type
并使用 refresh tokens
来保持访问。
看来您使用的是Google API Java 客户端,该客户端也支持此流程。通过像这样调用 setClientSecrets(..)
在构建器上设置客户端机密:
return new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.build();
您还需要在您的应用程序中处理来自 OAuth 请求的回调,您将在 回调 URL 中收到您在开发者控制台。
documentation for the client library中还有一个更完整的例子。