いすたの日記

備忘録から読んだ本や使ってみたガジェットの紹介など。 データ分析/マーケティング/EC周辺に関心ありです。

Google Analytics(GA) API v3 をjavaで実装する3(Servlet実装)

前回までの準備
Google Analytics(GA) API v3 をjavaで実装する1(準備) - isuta3's diary
Google Analytics(GA) API v3 をjavaで実装する2(Server側実装) - isuta3's diary

今回行うのは、以下を想定。

  • 諸々の準備(済)
  • 複数のプロファイルをまとめてGA API実行(済)
  • 出力に利用する指標(Metric, Dimension)は複数パタンの固定とする(済)
  • Servletを作成し実行してブラウザに表示させる。 (★)
  • jsp、angularJSを利用したクライアントからservlet経由でAPI実行のデータの取得

tomcatServletを実行するための環境を作る

tomcatプロジェクトを作成し、server.xmlにcontectPathを記述。
プロジェクトのコンテキストルートを設定し、Servletを作成したらweb.xmlに記述。
localhostで実行してブラウザに表示する。

1. server.xmlの記述
eclipsetomcatプロジェクトを作成すれば自動的にserver.xmlにContextPathが追記できるが、
追記された内容は例えば下記。今回はプロジェクト名を「AnalyticsSrv」コンテキストルートは「/」のままにした。

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

 <Context path="/AnalyticsSrv" reloadable="true"
                docBase="/workspace/AnalyticsSrv"
                workDir="/workspace/AnalyticsSrv/work" />

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>


2. servletを作成
URLをたたいてGA APIを実行してjsonの結果Stringを表示するだけのServletを作成する。
GaExecMainのgetResultDataは前回までに作ったもので、アナリティクスの複数のプラファイルをまとめて実行しjson形式のテキストを返すメソッド。

public class GaSearchServlet extends HttpServlet  {

	private static final long serialVersionUID = 1L;

	@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    
	}

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json; charset=UTF-8");
        PrintWriter out = resp.getWriter();
        
        GaExecMain main = new GaExecMain();
        String json = main.getResultData("2013-12-01", "2013-12-31", 25, 1);
        out.println(json);
        out.close();
        
    }

3. web.xmlを設定
web.xmlには、上記のservletを登録する。

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         version="2.4"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>ga api</display-name>

    <servlet>
        <display-name>gaapi</display-name>
        <servlet-name>gaapi</servlet-name>
        <servlet-class>analytics.servlet.GaSearchServlet</servlet-class>
        <load-on-startup>50</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>gaapi</servlet-name>
        <url-pattern>/gaapi</url-pattern>
    </servlet-mapping>
</web-app>

これでtomcatを起動して確認、と思ったらlibを読み込んでなかったのでNoClassDefFoundErrorが出た。tomcatプロジェクトのWEB-INF/libに準備編で取得してライブラリをつっこむ。


4. 起動確認
tomcatはport8080で設定していたので、下記URLで確認した。
http://localhost:8080/AnalyticsSrv/gaapi
こんな感じでブラウザ上に出力された。

{
  "normal": [
    {
      "shopNm": "shop name",
      "pageTitle": "title",
      "pageviews": "45",
      "visits": "6",
      "percentNewVisits": "33.33333333333333",
      "bounces": "3",
      "timeOnSite": "1329.0",
      "exitRate": "22.22222222222222",
      "visitBounceRate": "50.0"
    },
    {
      "shopNm": "shop name2",
      "pageTitle": "title2",
      "pageviews": "12",
      "visits": "1",
      "percentNewVisits": "100.0",
      "bounces": "1",
      "timeOnSite": "0.0",
      "exitRate": "41.66666666666667",
      "visitBounceRate": "100.0"
    }
  ]
}