最近、Measurement Protocol を サーバー側のプログラムから送信する記載がありました。
実装時に、何点がうまくいかなかったところがありましたので、記載します。
注意点
-
Hit Builder を使って、Query を作成して、テスト送信する
Measurement Protocol の Query を作成、テスト送信ができる Hit Builder — Google Analytics Demos & Tools というツールがあります。 プログラム側で送信しようとしている Query が Google Analytics に記録されるかチェックできます。
ここで送信して、記録されないクエリは、プログラムから送信しても記録できません。 -
Hit Builder での検証が完了したら、ヒットの検証をする
ヒットの検証 - Measurement Protocol | アナリティクス Measurement Protocol | Google Developers に記載がありますが、https://www.google-analytics.com/debug/collect
に Measurement Protocol を送信すると、送信内容の検証ができます。検証結果が返却されますので、エラー、警告が出ていないか確認できます。
python request を使用しているのであれば、以下で、検証結果を、標準出力できます。
# Measurement Protocol に 送付するパラメータを生成 payload = {"v": "1", "t": "event", "tid": "UA-XXXXXXXX-X", "cid": cid, "ni": "1", "dl": json_dict.get("document-uri", ""), "ec": "CSPReport", "ea": json_dict.get("violated-directive", ""), "el": json_dict.get("blocked-uri", ""), "ua": request.META.get('HTTP_USER_AGENT', ''), "z": random.randint(0, 99999), "ds": "WebApp", "ul": request.LANGUAGE_CODE } r = requests.post("https://www.google-analytics.com/dubug/collect", payload) print(r.text)
-
ClientID が、取得できない場合は、uuid で生成する
Google アナリティクスのデータ収集上限 | Google Developers にデータ収集上限が記載されていますが、セッション 1 回 あたり 500 イベントまでの上限があります。通常この制限を超えることは稀かと思いますが、Measurement Protocol で 同一の ClientID を使用している場合は、この制限に抵触します。
Cookie から ClientID が取得できる場合は、値を取得できない場合は。uuid を生成して設定するのがよいかと思います。 -
User Agent を設定する場合は形式を確認する
Measurement Protocol のパラメータ リファレンス | アナリティクス Measurement Protocol | Google Developers に記載がありますが、独自形式のユーザーエージェントが設定していると、記録されない場合があるようです。
python の requests の ユーザーエージェントは、python-requests/1.2.0
のような形式で、そのまま使用すると、Measurement Protocol の求めるユーザーエージェントの形式ではない可能性があります。
試しに送付してみて、記録されないようであれば、ユーザーエージェントの文字列を変更してみましょう。 -
Google Analytics の フィルターの除外設定と合致するリクエストになっていないか?
これに気づかずに、しばらく悩んでしまいました。
Google Analytics 側の フィルター設定に合致すると、そのフィルターが Measurement Protocol にも適用されます。
リファラーの値で除外していたり、ユーザーエージェントで除外していたりすると、除外設定にヒットして記録されなくなります。
フィルターをかけない VIEW で送信確認は行ったほうがいいかもしれません。
参考
記事上に記載していませんが、ユーザーエージェントについて、以下参考になりました。
- happy-scraping/fake-useragent at master · TakesxiSximada/happy-scraping
- universal analytics - How to post to Measurement Protocol using Ruby - Stack Overflow
以上です。
コメント