Google + API HowTo

Die Google + API ist da und das ist Grund genug alles stehen und liegen zu lassen und erst mal ein wenig mit der Google+ API zu Spielen. :-)

Google Plus API Start

Um mit der Google Plus API starten zu können, benötigt man einen API Key. Die meisten von Euch werden vermutlich schon einen API Key haben, da Google eine zentrale API Key Verwaltung unter https://code.google.com/apis/console/ hat und den API Key für alle möglichen und unmöglichen API Zugriffe benötigt.

Hier muss man nur noch die Google+ API aktivieren. Schon hat man (leider nur lesenden) Zugriff auf die Google Plus API und darf bis zu 1000 Requests pro Tag ausführen. Diese Limitierung ist meiner Meinung nach OK.
Schlimmer ist die Tatsache, dass es momentan nur lesenden Zugriff gibt.

 

 

 

 Einblick in die Arbeitsweise

In dem Blog Post unter http://googlecode.blogspot.com/2011/09/getting-started-on-google-api.html?m=1 bekommt man einen ersten Einblick in die Arbeitsweise und ein sehr einfaches Beispiel steht auch direkt zur Verfügung.
Man muss einfach nur den URL: https://www.googleapis.com/plus/v1/ people/117587356132722080869?key= nehmen und den eigenen API Key ergänzen. Schon hat man den ersten Request gegen die Google plus API abgesetzt und sieht ein Google Profil. Das Ergebnis ist ein JSON Objekt der Person mit der ID: 117587356132722080869. Das JSON Objekt hat dann den folgenden Aufbau:

{ "kind": "plus#person","id": "117587356132722080869",
"displayName":"Michael Jentsch",
"gender": "male",
"aboutMe": "\u003cspan\u003eNach der Schule habe ich eine Ausbildung zum Radio- und Fernsehtechniker bei Nokia in Bochum gemacht. Später habe ich dann in Dortmund Informatik studiert. Während und nach dem Studium habe ich bei Quantum gearbeitet. Später habe ich dann mit ein paar Kollegen die \u003ca href=\"http://w3logistics.com/\"\u003ew3logistics \u003c/a\u003eAG gegründet und bin nun sei 2006 bei der \u003ca href=\"http://itellium.com/\"\u003eItellium\u003c/a\u003e Services GmbH angestelt.\u003c/span\u003e","relationshipStatus": "married","url": "https://plus.google.com/117587356132722080869","image":
{"url": "https://lh5.googleusercontent.com/-8QmI4xCqo1Y/AAAAAAAAAAI/AAAAAAAAAGs/k33am4X0H1Y/photo.jpg"},  "urls": [
{  "value": "http://fadeout.de"  },
{  "value": "http://exif-viewer.de"  },
{   "value": "http://sudoku-ebook.de/"  },
{   "value": "http://datei-safe.de/"  },
{   "value": "http://smileytreff.de/"  },
{   "value": "http://www.handy-ortung.com/"  },
{   "value": "http://m-software.de/"  },
{  "value": "http://www.suchmaschinenoptimierung-lexikon.de/" },
{  "value": "http://youtube.com/user/RobbieNXT"  },
{   "value": "http://jpg-exif.blogspot.com/"  },
{   "value": "https://plus.google.com/117587356132722080869", "type": "profile"  },  {
"value": "https://www.googleapis.com/plus/v1/people/117587356132722080869",
"type": "json"
} ],  "organizations": [  {
"name": "Fachhochschule Dortmund",
"title": "Technische Informatik",
"type": "school"  },  {
"name": "",
"title": "Software Architekt, Entwickler und SEO",
"type": "work"  } ],
"placesLived": [  {"value": "Herne"} ]}

Sieht doch eigentlich ganz einfach aus. Diese Informationen lassen sich nun mit ein paar Zeilen PHP Code auslesen und weiter verarbeiten.

<?
 $id = "117587356132722080869";
 $key = "Your API Key";
 $url = "https://www.googleapis.com/plus/v1/people/$id?key=$key";
 $json = json_decode(file_get_contents($url));
 ?>

 

Eine umfangreiche Doku zu dem API Call findet man unter http://developers.google.com/+/api/. Hier wird auch das JSON Objekt noch einmal genau erläutert. Einfacher geht es doch nun wirklich nicht. Damit haben wir unser Google Plus API Hello World fertig.

OAuth 2.0 Client ID beantragen

Natürlich kann die Google API noch viel mehr. Dieser erste API Call dient nur dazu, die Entwickler ein wenig anzufixen. Denn spätestens wenn man die Daten von anderen Usern abrufen möchte,  benötigt man eine  OAuth 2.0 Client ID. Diese ID kann man auch in der Google API Konsole beantragen.


Google API Access Step 1



Google API Access Step 2



Google API Access Step 3


Ich habe mich beim Erzeugen der „OAuth 2.0 for native applications“ entschieden, da ich bei meinen Experimenten mit der Google Plus API nicht gleich eine Web Anwendung bauen möchte. (Auch wenn die folgenden Beispiele in PHP sind, bedeutet es nicht, dass es sich um Web-Anwendungen handelt. Ich persönlich bin dazu übergegangen, so gut wie alles in PHP zu programmieren. Das gilt auch für Desktop Anwendungen und (Shell) Scripte.) Hat man also nun die OAuth 2.0 Client ID erzeugt, kann man sich mit Hilfe von OAuth 2.0 bei der Google+ API anmelden. Genauere Details dazu findet man unter http://code.google.com/apis/accounts/docs/OAuth2.html.

 Access Token anzufordern

Mit den Werten für Client ID, Client Secret und Redirect URIs erzeugt man sich nun einen URL, um einen Access Token anzufordern. Bei mir sieht das dann z.B. so aus.

<?
$clientID = "Meine Client ID"; $clientSecret = "Mein Client Secret (nicht wichtig)";
$redirectURIs = "Meine Redirect URIs";
$url = "https://accounts.google.com/o/oauth2/auth?" .
 "client_id=$clientID&redirect_uri=$redirectURIs&" .
 "scope=https://www.google.com/m8/feeds/&response_type=code";
echo $url;
?>

Der hier ausgegebene URL kann nun im Browser geöffnet werden und es erscheint folgende Webseite. Wenn man die Berechtigung mit „Allow Access“ freigibt, erhält man einen Code, mit dem man den Access Token anfordern kann. Hat man dann den Access Token, hat man damit  Zugriff auf die Google Plus API.

Mein Code zum Abfragen des Access Codes sieht wie folgt aus:

<?
 $url = "https://accounts.google.com/o/oauth2/token";
 $clientID = " Meine Client ID ";
 $clientSecret = " Mein Client Secret ";
 $redirectURIs = " Meine Redirect URIs ";
 $code = "Der vorher erstellte Code";
 $fields = array(
 'client_id'     => $clientID,
 'client_secret' => $clientSecret,
 'code'          => $code,
 'redirect_uri'  => $redirectURIs,
 'grant_type'    => 'authorization_code');
 foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
 rtrim($fields_string,'&');
 $ch = curl_init();
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch,CURLOPT_POST,count($fields));
 curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
 $result = curl_exec($ch);
 curl_close($ch);
 var_dump ($result);
 ?>

Das Ergebnis ist ein Response Objekt, in dem der Access Token hinterlegt ist.

{"access_token":"#########","token_type":"Bearer","expires_in":3600,"refresh_token":"########## "}

Den Access Token kann man nun dazu verwenden, um die API Calls für den Google Plus User auszuführen, der vorher auf „Allow Access“ geklickt hat. Hier mal ein einfaches Beispiel:Mit dem URL curl https://www.google.com/m8/feeds/contacts/default/full?access_token=ACCESS_TOKEN kann man nun die Protected-API aufrufen. Eigentlich ganz einfach. Allerdings gibt es noch ein kleines Problem. Der Accesss Token hat nur eine sehr kurze Lebenszeit. Nach 3600 Sekunden (Einer Stunde) ist er nicht mehr gültig und man muss wieder einen neuen Access Token anfordern. Um das zu vermeiden, kann man mit einem Refresh_Token die Gültigkeit des Tokens verlängern.

Gültigkeit des Accress_Tokens verlängern

Zum Verlängern des Accress_Tokens kann man folgenden Code verwenden. In dem Code verwendet man den vorher abgefragten Refresh_Token und den ‘grant_type‘ = ‘refresh_token’.

<?
 $url = "https://accounts.google.com/o/oauth2/token";
 $clientID = " Meine Client ID ";
 $clientSecret = "Mein Client Secret ";
 $redirectURIs = "Mein URL";
 $refreshToken = "Mein Refresh Token";
 $fields = array(
 'client_id'     => $clientID,
 'client_secret' => $clientSecret,
 'refresh_token' => $refreshToken,
 'grant_type'    => 'refresh_token');
 foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
 rtrim($fields_string,'&');
 $ch = curl_init();
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch,CURLOPT_POST,count($fields));
 curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
 $result = curl_exec($ch);
 curl_close($ch);
 var_dump ($result);
 echo "\r\n";
 ?>
{"access_token":"##########", "token_type":"Bearer", "expires_in":3600}

Das Ergebnis dieser Abfrage ist ein neuer Token, mit dem ich wieder meine Protected-API Aufrufe starten kann. Auch dieser Access_Code hat wieder eine Laufzeit von 3600 Sekunden, so dass man den refresh_token mindestens einmal in der Stunde aufrufen muss, damit der Access_Token gültig bleibt.

Zum Schluss noch eine kleines Beispiel dafür, wie man mit Hilfe des Access_Tokens die public activities eines Google+ Users abruft.

<?
 $id = "117587356132722080869";
 $key = "Mein API Key";
 $accessToken = "Mein Access Token";
 $url = "https://www.googleapis.com/plus/v1/people/$id/activities/public“ .
 "?alt=json&pp=1&key=$key";
 $ch = curl_init();
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($curl, CURLOPT_HEADER, false);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authorization: OAuth $accessToken"));
 $result = curl_exec($ch);
 curl_close($ch);
 var_dump ($result);
 echo "\r\n";
 ?>

Als Result bekommt man ein JSON Objekt, in dem die öffentlichen Aktivitäten (public activities) des jeweiligen Users zu finden sind.

So, mehr Zeit habe ich leider nicht daher war es das erst mal von mir.
Fragen, Anregungen und Ergänzungen wie immer gerne als Kommentar.

CU
Michael

Weiterführende Themen:

  1. Die Google+ API ist da
  2. Google +1