Archiv für den Monat: Oktober 2011

G+ API in Java nutzen

Mit diesem Blogpost soll Beschrieben werden, wie man auf der Google+ API mittels Java zugreifen kann. Da die Dokumentation von Google leider nicht so berauschend ist und auch ein wenig verstreut, trage ich hier einfach mal alles zusammen, was ich auf dem Weg zur Benutzung gefunden habe. Grund ist unter anderem, dass wir bei der GTUG RM einen kleinen Hackathon zur G+ API veranstalten.

Vorbereitung

Um mit der Google+ API arbeiten zu können benötigt man folgende Dinge:

API-Key

Zuerst registriert man sich einen API-Key. Das macht man über die Google API-Console. Bei mir sieht es nach der Registrierung dann so aus. Wichtig ist noch, das man sich eine oder mehrere Redirect URIs einträgt, die man später auch nutzt.

 

Libs

Um auf die API zugreifen zu können, benötigt man zwei Libs-Pakete von Google. Zum einen die Google APIs Client Library for Java (Stand 1.5.1 Beta) und die Google+ API (Stand 1.2.5 Beta).

Da ich kein Maven genutzt habe, musste ich die benötigten Libs manuell zusammensuchen.

Unter der Setup-Seite für die Google APIs Client Library for Java finden sich die Informationen, welche Libs grundsätzlich benötigt werden. Die abhängigen Libs (Dependencies) werde ebenfalls aufgeführt. Netterweise liefert Google alle benötigten Libs gleich mit dazu (zu finden im Unterverzeichnis dependencies der Zip-Datei).

Folgende Libs werden benötigt:

Umsetzung

OAuth

Um die G+ API nutzen zu können, braucht man zum Teil eine OAuth-basierte Autorisierung (man bekommt einen sogenannten Access-Token für die weiteren Zugriff auf die APIs) und/oder einen API-Key. Infos dazu finden sich auf der G+ API OAuth-Seite.

Für die Nutzung von OAuth stellt Google Beispielcode bereit.

Mein Beispiel ist als Web-App (für die Google Appengine) ausgelegt.

Code

Autorisierung anfordern

Um die Autorisierung und damit den Access-Token anzufordern benötigt man folgenden Code:

private void doAuthRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException {
   String redirectUrl = getRedirectUrl(req);
   String authorizeUrl = new GoogleAuthorizationRequestUrl(CLIENT_ID, redirectUrl, SCOPE_GOOGLE_PLUS ).build();
   resp.sendRedirect(authorizeUrl);
}

private String getRedirectUrl( HttpServletRequest req ){
   return "http://" + req.getServerName() + ":" + req.getLocalPort() + "/start";
}

Die CLIENT_ID ist die ID als String, die man in der API-Console zugeordnet bekommen hat. SCOPE_GOOGLE_PLUS erhält den sogenannten Scope der verwendeten API als String, in diesem Fall also für die Google+ API. Der passende Scope-Wert findet sich auf der G+ OAuth-Seite und hat den Wert https://www.googleapis.com/auth/plus.me.

Autorisierungscode auslesen

Nach erfolgter Autorisierung springt die OAuth-API zurück zur angegebenen Redirect-URL. Im Erfolgsfall wird ein Code als Parameter in der URL mitgeschickt, den man ausliest und zum Abfragen eines Access-Tokens verwenden muss.

private void doAuthExtract(HttpServletRequest req, HttpServletResponse resp) throws IOException {
   String code = req.getParameter( "code" );
   HttpTransport TRANSPORT = new NetHttpTransport();
   JsonFactory JSON_FACTORY = new JacksonFactory();
   GoogleAuthorizationCodeGrant authRequest = new GoogleAuthorizationCodeGrant(TRANSPORT, JSON_FACTORY, CLIENT_ID, CLIENT_SECRET, code, getRedirectUrl(req));
   authRequest.useBasicAuthorization = false;
   AccessTokenResponse authResponse = authRequest.execute();
   String accessToken = authResponse.accessToken;

   if( session != null ){
      session.setAttribute( SESSION_PARM_ACCESS_TOKEN, accessToken);
      session.setAttribute(SESSION_PARM_REFRESH_TOKEN, authResponse.refreshToken);
      this.accessToken = accessToken;
      this.refreshToken = authResponse.refreshToken;
   }

   resp.sendRedirect( getRedirectUrl(req));
}

Somit haben wir jetzt den Access-Token und können damit auf die G+ API zugreifen.

Zugriff auf G+ API

Ein einfaches Beispiel, ohne den Bezug zur Webanwendung, der Zugriff auf die Personensuche.

Plus plus = new Plus( new NetHttpTransport(), new JacksonFactory() );
plus.setKey( API_KEY );
plus.setOauthToken( accessToken );

Search search = plus.people.search();
search.setQuery(query);
PeopleFeed peopleFeed = search.execute();

if( peopleFeed.isEmpty() == false ){
   List<Person> peopleList = peopleFeed.getItems();

   if( peopleList != null ){
      for (Person person : peopleList) {
         System.out.println( person.getDisplayName() );
      }
   }
}

API_KEY ist der API-Key, der über die Google API-Console erstellt wurde. accessToken ist der über OAuth zugewiesene Access-Token und query ist schliesslich der Suchtext.

Die Plus-Klasse (JavaDoc) ist generell der Ausgangspunkt. Über sie greift man auf die G+ API zu.

Von Seiten Google wird noch ein Starter Projekt bereitgestellt, in dem man sich den Sourcecode als Ausgangspunkt für eigene ENtwicklungen vornehmen kann.

Mein Beispielprojekt findet sich bei Google Code.