LoginSignup
5
7

More than 3 years have passed since last update.

皆さんこんにちは。@best_not_bestです。

GoogleアナリティクスのMeasurement Protocolを使用することで、HTTPリクエストで生データを Googleアナリティクスサーバに直接送信することが出来ます。
これにより、オンラインとオフラインでの行動を結び付け、Googleアナリティクス上で分析することが可能になります。

Measurement Protocolについて

公式ドキュメント

データインポートとの違い

Googleアナリティクスにはデータインポートという似たような機能がありますが、違いは(ざっくりと)以下になります。

Measurement Protocol データインポート
データの送信方法 HTTPリクエスト 主にファイルアップロード
送信対象のユーザ Googleアナリティクス内に存在しないユーザ(新規ユーザ)のデータ送信も可能 Googleアナリティクス内に存在するユーザ(既存ユーザ)のみ
反映時間 ほぼリアルタイム 24時間程度かかることもある
Pythonでの使用例を記した公式ドキュメント なし あり(Management API

利用例

Googleアナリティクス無償版

カスタムディメンションで会員IDを取得。システムデータと結合させた後、Measurement Protocolでデータ送信。
Googleアナリティクスに送信したデータは広告配信等にも利用可能です。

スクリーンショット 2019-12-08 22.47.26.png

Googleアナリティクス有償版 + Google Cloud Platform

GoogleアナリティクスデータのBigQuery Exportが使えますので、BigQuery上でシステムデータと結合させた後、DataflowやCloud ComposerからMeasurement Protocolでデータを送信するのが良いと思います。

スクリーンショット 2019-12-08 22.47.38.png

前置きが長くなりましたが、以下からMeasurement Protocolの使用例となります。

環境

マシン/OS

$ cat /etc/os-release

PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Python

  • Python: 3.5.3
    • urllib3: 1.24

プログラム

mp.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

"""send Google Analytics data using MeasurementProtocol."""

import sys
import urllib.parse
import urllib.request
from urllib.request import urlopen

if __name__ == '__main__':
    mp_url = 'https://www.google-analytics.com/collect'
    tid = 'UA-XXXXX-X'
    ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:71.0) Gecko/20100101 Firefox/71.0'
    t = 'event'
    ec = 'sample_event_category'
    ea = 'sample_event_action'
    el = 'sample_event_labe'
    v = '1'
    ni = 1

    # url params
    url_params = [
        {
            'v': v,
            'tid': tid,
            'ua': ua,
            't': t,
            'ec': ec,
            'ea': ea,
            'el': el,
            'ni': '1',
            'cid': '11111.11111',
        },
        {
            'v': v,
            'tid': tid,
            'ua': ua,
            't': t,
            'ec': ec,
            'ea': ea,
            'el': el,
            'ni': '1',
            'cid': '22222.22222',
        },
        {
            'v': v,
            'tid': tid,
            'ua': ua,
            't': t,
            'ec': ec,
            'ea': ea,
            'el': el,
            'ni': '1',
            'cid': '33333.33333',
        },
    ]

    try:
        for url_param in url_params:
            # url encode
            data = urllib.parse.urlencode(url_param).encode('utf-8')
            request = urllib.request.Request(mp_url, data)
            response = urlopen(request)
    except Exception as e:
        print(e)
        sys.exit(1)

    sys.exit(0)

tidには送信先のGoogleアナリティクスのトラッキングIDを、uaには適当なユーザエージェントを指定ください。
url_paramsがAPIのパラメータとなります。cidにはGoogleアナリティクスのクライアントIDをそれぞれ設定ください。
使用できるパラメータは以下を参照ください。
https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters

実行方法

$ python mp.py

実行結果

Googleアナリティクスのリアルタイムイベントを見ると、設定したイベントがトラッキングされていることが確認できます。

スクリーンショット 2019-12-09 0.41.01.png

その他どうでも良い話

Macのpyenvをアップデートしたらopensslが上手く動作しなくなったので、クラウド環境で実行しています・・・。
(Pythonのバージョンが3.5なのはそれが理由です。)
直すのめんどそう・・・。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7