#はじめに
Google Analytics Advent Calender 15日目の記事です
この記事は以下の様な方々に捧げます
- Web以外のデータをGoogle Analyticsの様に計測してみたい
- WebのデータとWeb以外のデータをつなぎあわせたい
- ExcelでGoogle Analyticsを使ってみたい
- Google Analytics × IoTで何かしらやってみたい
Measurement Protocolに関しては、7日目とか14日目でも紹介されているので、ぜひ読んでみてください。むしろ、この記事よりも役立つことをみなさんお書きになっているので、そっちを読んだほうが有益です(笑)
##概要
ExcelのマクロであるVBAを使って、GAにアクセスデータを飛ばしてみたいと思います。
##Measurement Protocol とは
Measurement Protocolとは、ひとことで言うとGoogle Analytics(以下、GA)の計測方法です。Measurement Protocol自体が、Web以外のモノを計測する方法・・・というわけではなく、そもそものWebのGAもMeasurement Protocolを使っています。
そのWebも使っているGAの計測方法を、君たちお好きに使っていいよ!というのがMeasurement Protocolなわけです。
Measurement Protocolの仕様に則っていれば様々なデータが計測できるので、オンライン・オフライン問わずGAにデータを飛ばすことが可能になります。
##仕組み
公式のリファレンスはこちら
他のQiita記事でも触れられていますが、Measurement ProtocolはHTTPによるビーコンアクセスです。つまり、GAはビーコン画像(1x1の透明なGIF画像)を読むことで計測データを飛ばしています。そのビーコン画像のURLに様々なパラメーターを渡すことにより、ブラウザやデバイスなどの情報も計測できるようになっています。
もっと具体的にいうと以下のURLを読み込むと計測されます。
http://www.google-analytics.com/collect
https://ssl.google-analytics.com/collect
今回は、このURLを利用して、ExcelからGAの計測を実現してみます。
#使用例
今回は、以下の様なコードを使って検証しました。
Excelファイルの中にボタンを仕込んでおいて、それを押すと以下の処理が呼ばれてデータが飛ぶような仕組みになっているというイメージです。
例えば業務等でExcelファイルをフォーマットとして、
アンケートや申請書を社内で使用することがあると思います。
で作った場合に、プルダウンで選んだ項目をページ(イベントでも良い)として飛ばしたり、入力した項目を集計するために飛ばしたりして、社内の情報を集約するというのも一つの手段かと思います。(ただその場合、集計を取るすべてのファイルにマクロを仕込むはめにはなってしまいますが・・・)
'=============================================================
' postGA GAへデータの送信を行なう
'
' パラメーター
' cliendId : クライアントの識別(ブラウザで言うCookie ID)
' pagePath : どの階層のページか
' uid : ユーザーID(ユーザーコントロールで使用する)
' reffer : どこからきたのか。リファラー。(任意)
'=============================================================
Public Function postGA(ByVal cliendId As String, ByVal pagePath As String, ByVal uid As String, Optional ByVal reffer As String = "")
Dim result As String
'-----------------
'リクエスト生成
'-----------------
'URL(必要に応じて変更)
Dim url As String
url = "http://www.google-analytics.com/collect"
If reffer <> "" Then
reffer = "&dr=" & UrlEncodeUtf8(reffer)
End If
'パラメータ(必要に応じて動的に生成)
Dim paramStr As Variant
'UA番号はご自身のものに変更してください
paramStr = "&v=1&tid=UA-XXXXXXXX-Y" & reffer & "&cid=" & cliendId & "&uid=" & uid & "&t=pageview&dp=%2F" & pagePath
'--------------
'POST実行
'--------------
Dim xmlhttp As MSXML2.xmlhttp
Set xmlhttp = New MSXML2.xmlhttp
'方式をPOSTに設定
Call xmlhttp.Open("POST", url, False)
Call xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
'パラメータセットし、URLを叩く
Call xmlhttp.send(paramStr)
'--------------
'応答取得
'--------------
Dim retCd As String
'ステータスコード取得
retCd = xmlhttp.Status
If retCd <> 200 Then
result = "error:" & retCd
Else
'200番なら、結果HTML取得
result = StrConv(xmlhttp.responsebody, vbUnicode, 1041)
End If
'結果を返す
postGA = result
End Function
Public Function UrlEncodeUtf8(ByVal strSource As String) As String
Dim objSC As Object
Set objSC = CreateObject("ScriptControl")
objSC.Language = "Jscript"
UrlEncodeUtf8 = objSC.CodeObject.encodeURIComponent(strSource)
Set objSC = Nothing
End Function
###実際の画面
Excelで使うとこんな感じになります。
(画像クリックでYoutubeに飛びます)
#最後に
今回はExcelでもMeasurement Protocolが使えるよ!ということを紹介するのが主になった記事なので、実際の業務ではあまり「ExcelマクロでGA計測!」なんてことは無いかもしれません。HTTPアクセスさえちゃんとできれば、GAのMeasurement Protocolはどこからでもアクセスすることができるので是非使ってみてください。
#余談
どちらかというと、昨今目覚ましいIoTデバイスなどに組み込んで、センサー値をGAに飛ばすなどのほうが面白いかもしれません。