2012年2月23日木曜日

GoogleAnalyticsにアクセスしてみる

そのまま勢いでv3のOAuthを作りました。

Google AnalyticsはWeb解析ソリューションです。
何も考えずにサイトにJavaSriptコードを埋め込む事でWebの訪問者などを調べる事をできます。
素晴らしいサービスであれこれ機能がありますが、
今回はAPIにJavaでアクセスしてみたいと思いました。

準備
・gdata-core-1.0.jar ・gdata-analytics-2.1.jar ・google-collections-1.0.jar を読み込みます。 見つけて行く過程で「google-api-service-analytics-v3-1.3.3-beta.jar」を見つけました。 これでアクセスするのが良かったかもなのですが、 ちょっと使い方がわからなかったので後日試します。 サンプルを元におこなってみます。
まずは認証
gdataに関してOAuthやAuthSubなどの認証方式がありますが、ClientLoginで試しました。
  1. AnalyticsService service = new AnalyticsService("applicationName");  
  2. service.setUserCredentials(username, password);  
ClientLoginはOAuthなどを触った事がある人ならわかると思いますが あまり好ましいと思える認証方式ではありません。 実際文献にも「てめーで使うようなアプリにしか使うなよ」って書いてあります。 OAuthなどを行いたかったのですが、今回はアクセスしてみる事を目標にしてますので 一旦この方式でアクセスしてみます。
サイトの一覧を取得
AnalytisServiceからアカウントの情報を取得してきます。
  1. URL feedUrl = new URL(""https://www.google.com/analytics/feeds/accounts/default"");   
  2. AccountFeed service.getFeed(feedUrl, AccountFeed.class);  
  3. for (AccountEntry entry : accountFeed.getEntries()) {  
  4. }  
AccountFeedのgetEntries()によってそのアカウントが所有しているデータを取得する事が可能です。
サイトの訪問者を見てみる
AccountEntryには「TableId」というものがあって、それによりどのサイトかを識別できるようになってます。 そのテーブルIDを元にDataQueryを作成します。
  1. DataQuery query = new DataQuery(new URL(DATA_URL));  
  2. query.setIds(tableId);  
  3. query.setStartDate("2012-01-01");  
  4. query.setEndDate("2012-01-31");  
  5. query.setDimensions("ga:browser");  
  6. query.setMetrics("ga:visits,ga:bounces");  
setDimensions()は何を取ってくるか? setMetrics()何を取ってくるか?です。 まぁ日付はそのままですね。 この場合、ブラウザについての訪問者を調べています。 このデータクエリに対して
  1. query.setSort("-ga:visits");  
  2. query.setFilters("ga:browser!@Explorer");  
  3. DataFeed dataFeed = service.getFeed(query, DataFeed.class);  
というようにソートやフィルタをつけてあります。 この場合訪問者数の降順、「Explorer」とついたブラウザの排他ですね。 ・・・Googleのサンプルに悪意を見た。 これで取得したDataFeedに情報が入ってますので
  1. for (DataEntry entry : dataFeed.getEntries()) {  
  2.   System.out.println("\tBrowser: " + entry.stringValueOf("ga:browser"));  
  3.   System.out.println("\t\tVisits: " + entry.stringValueOf("ga:visits"));  
  4.   System.out.println("\t\tBounces: " + entry.stringValueOf("ga:bounces"));  
  5.   System.out.println("\t\tBounce rate: "  
  6.       + entry.longValueOf("ga:bounces") / (double) entry.longValueOf("ga:visits"));  
  7. }  
みたいな感じで情報にアクセスできます。
感想
まぁサービスに埋め込むにはまだ色々と考えないとなぁと思いました。 ※まぁとにかく認証ですよね。 案外調べていてPHPで文献(ブログ)を出している人が多そうでした。 まぁ現状では埋め込むサイトはPHPの方が多そうですね。 Javaでアクセス解析必要なサービスって少し前なら想像できませんが 今はGoogleAppEngineもあるので、Javaでこういったものが必要なサービスも増えてくると思います。 1.6辺りからGoogleAppEngine対応されているみたいで

0 件のコメント: