gdata-java-client + oauth2 + access_token secret - PullRequest
5 голосов
/ 22 ноября 2011

В настоящее время я пытаюсь использовать новый клиент (ы) Java, и в связи с устаревшими причинами текущего состояния библиотек Google мне нужно использовать как gdata, так и новый API Java-клиента Google.

Очевидно, что я хотел бы использовать OAuth2 - однако с OAuth2 я не получаю секрет токена доступа - что вызывает проблему, поскольку b / c gdata требует секрета токена доступа.

Может ли кто-нибудь, пожалуйста, дать совет об обходном пути, например. ли использовать библиотеки Java gdata только с токен доступа (OAuth2) и не секрет токена доступа? Примеры кода (и попытки) не подтверждают это, но, возможно, я что-то делаю неправильно

  • или мне нужно использовать OAuth1 как для gdata, так и для нового API Java-клиента Google?
  • или есть другой способ?

Спасибо

1 Ответ

13 голосов
/ 28 декабря 2011

Я нашел решение. Вы можете установить специальный HTTP-заголовок (Authorization: Bearer ACCESS_TOKEN), как описано в http://code.google.com/apis/accounts/docs/OAuth2WebServer.html#callinganapi

Как только вы получили accessToken (например, вот так http://code.google.com/p/google-api-java-client/wiki/OAuth2Draft10), вы можете позвонить в свою "старую" службу gdata следующим образом:

SpreadsheetService service = new SpreadsheetService("yourAppName");
service.setHeader("Authorization", "Bearer " + accessToken);
URL metafeedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");
SpreadsheetFeed feed = service.getFeed(metafeedUrl, SpreadsheetFeed.class);

List<SpreadsheetEntry> spreadsheets = feed.getEntries();
for (int i = 0; i < spreadsheets.size(); i++) {
  SpreadsheetEntry entry = spreadsheets.get(i);
  System.out.println("\t" + entry.getTitle().getPlainText());
}

Немного странно, что я не смог найти это действительно задокументированным. Я просто нашел это по стечению обстоятельств.

...