Google+ APIで遊んでみた。

JavaScriptで遊んでみた

JavaScript編です。Javaよりも作るのが簡単でした。
Ajax通信をするので、JQueryがあると楽です。

動きの流れとしては一般的なWebサービス同様に

1. クライアントからhttp通信
2. GoogleJson形式でデータを返す
3. 戻りデータを加工
とよくある動きです。

個人のデータを取得するコードはこんな感じです。api_keyはGoogle apis で事前に取得します。Activiesも同じような感じなので省略します。

function person(){
  var url = 'https://www.googleapis.com/plus/v1/people/'+user_id+'?callback=?';
  var params = {
    key : api_key
  };
  $.getJSON(url, params, function(data){
     // dataの中に戻りのデータが返却される。
  });
}

こんな感じでとれます。

Javaで遊んでみた

とりあえず個人的に一番ラクなJavaで実装してみました。
クライアントライブラリをダウンロードすることでも行けますが、Mavenでやると楽です。

Mavenの設定

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>jp.ne.hachi</groupId>
  <artifactId>googleplus-sample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>googleplus-sample</name>
     <properties>
          <java-version>1.6</java-version>
          <google-api-services-plus-version>v1-1.2.1-beta</google-api-services-plus-version>
     </properties>
     <dependencies>
          <dependency>
            <groupId>com.google.apis</groupId>
            <artifactId>google-api-services-plus</artifactId>
            <version>${google-api-services-plus-version}</version>
          </dependency>
     </dependencies>
      <repositories>
    <repository>
      <id>google-api-services</id>
      <url>http://mavenrepo.google-api-java-client.googlecode.com/hg</url>
    </repository>
  </repositories>
</project>

Activitiesのデータを取得。
JavaScriptでは、Personデータを取得したので、JavaではActivitesを取得します。
1)のHttpTransportはJavaDocにも書いてあるとおり、Google App Engineと通常のApacheでは違うものを使います。
HttpTransportのJavaDocの引用

The recommended concrete implementation HTTP transport library to use depends on what environment you are running in:

Google App Engine: use com.google.api.client.appengine.UrlFetchTransport.
com.google.api.client.apache.ApacheHttpTransport doesn't work on App Engine because the Apache HTTP Client opens its own sockets (though in theory there are ways to hack it to work on App Engine that might work).
com.google.api.client.javanet.NetHttpTransport is discouraged due to a bug in the App Engine SDK itself in how it parses HTTP headers in the response.

それを実装するとこんな感じです。GETメソッドを実行するときにはplus.activities.get(activitiesのID)とすればOKです。

public static void main(String[] args) {
  HttpTransport transport = new ApacheHttpTransport(); // ・・・1)
  HttpRequestInitializer requestInitializer = createRequestFactory(transport).getInitializer();
  JsonFactory jsonFactory = new JacksonFactory();
  Plus plus = new Plus(transport, requestInitializer, jsonFactory);
  plus.setKey(API_KEY);
  try {
    ActivityFeed feed = plus.activities.list(USER_ID, COLLECTION_PUBLIC).execute(); //  COLLECTION_PUBLICには"public"が設定
    System.out.println(feed.getId());
    System.out.println(feed.getKind());
    System.out.println(feed.getNextLink());
    System.out.println(feed.getNextPageToken());
    System.out.println(feed.getSelfLink());
    System.out.println(feed.getTitle());
    System.out.println(feed.getResponseHeaders());
    System.out.println(feed.getUnknownKeys());
    System.out.println(feed.getUpdated());
   
    List<Activity> list = feed.getItems();
    for(Activity activity : list){
      System.out.println(activity.toString());
    }
   
  } catch (IOException e) {
    e.printStackTrace();
  }
}
public static HttpRequestFactory createRequestFactory(HttpTransport transport){
  return transport.createRequestFactory(new HttpRequestInitializer() {
    public void initialize(HttpRequest request) throws IOException {
      request.setConnectTimeout(0);
      request.setReadTimeout(0);
    }
  });
}

リンク集
クライアントライブラリ
http://developers.google.com/+/downloads

Google+JavaDoc
http://javadoc.google-api-java-client.googlecode.com/hg/apis/plus/v1/index.html