Python 2 は、コミュニティによるサポートを終了しました。Python 2 アプリを Python 3 に移行することをおすすめします。

Google アナリティクスとの統合

Google アナリティクス プラットフォームでは、多様なデバイスと環境でビジネスとユーザーのやりとりを測定できます。このプラットフォームは、こうしたユーザーのやり取りを収集、保存、処理、レポートするためのすべてのコンピューティング リソースを備えています。

アナリティクス コレクションは、クライアント側とサーバー側の両方で行うことができます。Google アナリティクスには、Google アナリティクスにデータを送信するための使いやすい API と SDK があります。それらに加えて、Google では、ユーザーが独自の App Engine アプリケーションで使用して、Google アナリティクスにサーバー側アナリティクスを簡単に送信できるコードも開発しています。

クライアント側アナリティクス コレクション

コレクション API と SDK を使って、ユーザーがコンテンツやマーケティング活動とどのようにやり取りをしているかを測定できます。API や SDK を実装すると、Google アナリティクスや Reporting API でユーザー操作のデータを確認できるようになります。クライアント側アナリティクス コレクションの詳細については、クライアントのタイプに応じて次のリンクを選択してください。

  • ウェブ トラッキング(analytics.js) - ウェブサイトやウェブ アプリケーションとユーザーのやり取りを測定します。
  • Android - Android アプリケーションとユーザーのやり取りを測定します。
  • iOS - iOS アプリケーションとユーザーのやり取りを測定します。
  • Measurement Protocol - この低レベル プロトコルと、任意の環境内のユーザーのやり取りを測定します。

App Engine サーバー側アナリティクス コレクション

App Engine にはアプリケーションのイベントのロギングのメカニズムがすでに用意されていますが、Google アナリティクスで特定のサーバー側イベントを追跡することに利点がある場合があります。次のような利点があります。

  • 履歴データの分析 - App Engine を使用して、ログファイルの最大日数やサイズを構成できます。その日数が経過すると、それらのログファイルにアクセスできなくなります。Google アナリティクスでイベントをトラッキングすることで、過去のイベントを表示できる期間が大幅に長くなります。
  • 重要なイベントのトラッキング - アプリケーションのさまざまなコンポーネントがデータをログファイルに書き込むことによって、ログファイルが冗長になる場合があります。イベント トラッキングを使用して、モニタリングの対象とする重要なイベントだけを特定し、追加のメタデータとともにそれらをトラックできます。
  • 強力なユーザー インターフェース - Google アナリティクスで提供される高機能なユーザー インターフェースを利用して、特定のサーバー側イベントを可視化、レポート、エクスポートできます。

下記のサンプル ソースコードを App Engine アプリケーションに組み込むことによって、簡単に特定のサーバー側イベントを追跡できるようになります。この方法の詳細については、Google アナリティクス デベロッパー ガイドでイベントのトラッキングをご覧ください。

サンプル ソースコード

Java

import com.google.appengine.api.urlfetch.URLFetchService;
import com.google.appengine.api.urlfetch.URLFetchServiceFactory;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.client.utils.URIBuilder;

@SuppressWarnings("serial")
// With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.
@WebServlet(
    name = "analytics",
    description = "Analytics: Send Analytics Event to Google Analytics",
    urlPatterns = "/analytics"
)
public class AnalyticsServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {
    String trackingId = System.getenv("GA_TRACKING_ID");
    URIBuilder builder = new URIBuilder();
    builder
        .setScheme("http")
        .setHost("www.google-analytics.com")
        .setPath("/collect")
        .addParameter("v", "1") // API Version.
        .addParameter("tid", trackingId) // Tracking ID / Property ID.
        // Anonymous Client Identifier. Ideally, this should be a UUID that
        // is associated with particular user, device, or browser instance.
        .addParameter("cid", "555")
        .addParameter("t", "event") // Event hit type.
        .addParameter("ec", "example") // Event category.
        .addParameter("ea", "test action"); // Event action.
    URI uri = null;
    try {
      uri = builder.build();
    } catch (URISyntaxException e) {
      throw new ServletException("Problem building URI", e);
    }
    URLFetchService fetcher = URLFetchServiceFactory.getURLFetchService();
    URL url = uri.toURL();
    fetcher.fetch(url);
    resp.getWriter().println("Event tracked.");
  }
}

Python

def track_event(category, action, label=None, value=0):
    data = {
        'v': '1',  # API Version.
        'tid': GA_TRACKING_ID,  # Tracking ID / Property ID.
        # Anonymous Client Identifier. Ideally, this should be a UUID that
        # is associated with particular user, device, or browser instance.
        'cid': '555',
        't': 'event',  # Event hit type.
        'ec': category,  # Event category.
        'ea': action,  # Event action.
        'el': label,  # Event label.
        'ev': value,  # Event value, must be an integer
    }

    response = requests.post(
        'http://www.google-analytics.com/collect', data=data)

    # If the request fails, this will raise a RequestException. Depending
    # on your application's needs, this may be a non-error and can be caught
    # by the caller.
    response.raise_for_status()

@app.route('/')
def track_example():
    track_event(
        category='Example',
        action='test action')
    return 'Event tracked.'