Google API 第13回

投稿者: | 2015年7月1日

Google API 第13回

今回はGoogle AnalyticsのAPIについて紹介します。

■Google AnalyticsのAPI
ウェブサイトの分析に特化したAPIです。APIの機能は大きく分けて2つあります。
分析してレポートを作成できるAnalytics Reporting APIsとアカウントやプロパティなどを管理できるConfiguration APIsです。Analytics Reporting APIsには5つのAPI、Configuration APIsには2つのAPIがあります。

■Analytics Reporting APIsについて
・Analytics Core Reporting API
カスタムレポートを作成できるAPIです。

・Analytics Multi-Channel Funnels Reporting API
コンバージョンに到るまでの経路を分析できるAPIです。
・Analytics Real Time Reporting API
ウェブサイトで発生しているアクティビティをリアルタイムで分析できるAPIです。
・Analytics Embed API
ウェブサイトにダッシュボードを作成し埋め込むことができるAPIです。
・Analytics Metadata API
レポート作成に必要なリストや列の属性(ディメンションと指標)を取得できるAPIです。
このAPIは列属性の概要や今後廃止される列属性を調べるのに役立ちます。

■Configuration APIsについて
・Analytics Management API
アカウントやプロパティ、ビューなどを管理できるAPIです。
・Analytics Provisioning API
新しいGoogle Analyticsアカウントを作成できるAPIです。

APIが7つあるので複数回に分けて紹介します。
今回はAnalytics Core Reporting APIについて紹介します。

■Analytics Core Reporting APIについて
Google Analyticsで収集されたデータからカスタムレポートを作成できます。
レポートはディメンションとメトリックから構成されます。
ディメンションはサイトを訪問したユーザーのセッションや行動の性質で
メトリックはその性質を定量化したデータです。

■APIのバージョンについて
現在、APIのバージョンはXMLに対応しているバージョン2.4と
JSONに対応しているバージョン3.0があります。
※以前のバージョン2.3は廃止されています。

■Analytics Core Reporting APIを使用方法
VBAを用いた方法を紹介します。
Google APIを用いたVBAの認証方法は前回紹介しているので省略します。
※Google APIを用いたVBAの認証方法は
参考サイトにあるGoogle API 第12回を参照してください。

バージョン2.4とバージョン3.0のレスポンス処理の仕方を説明します。

・バージョン2.4
まずリクエストするURLを作成します。

    baseUrl = "https://www.googleapis.com/analytics/v2.4/data"
    sUrl = baseUrl
    sUrl = sUrl & "?ids=ga:" & CStr(viewID)
    sUrl = sUrl & "&start-date=" & Format(sDate, "YYYY-MM-DD")
    sUrl = sUrl & "&end-date=" & Format(eDate, "YYYY-MM-DD")
    sUrl = sUrl & "&metrics=ga:pageviews"
    sUrl = sUrl & "&dimensions="

必須パラメータはids、start-date、end-date、metricsです。
idsには解析するビューIDを指定します。
start-dateとend-dateには解析する期間を指定します。
metricsとdimensionsには取得するパラメータを指定します。
※パラメータは参考サイトのAnalyticsのdimensionsとmetricsを参照してください。

次にヘッダーにAPI通信するためのアクセストークンとXMLを取得するためのコンテンツタイプを付与しリクエストを行います。

    oHTTP.Open "GET", sUrl, False
    oHTTP.setRequestHeader "Authorization", "Bearer " & access_token
    oHTTP.setRequestHeader "Content-Type", "application/atom+xml"
    oHTTP.send

返り値は下記のようなXMLで取得できます。
リクエストしたデータは「entry/dxp:metric」タグに格納されています。
データを取得するときは「entry/dxp:metric」タグのnameを指定する必要があります。
ここでは「ga:pageviews」を指定すると値が取得できます。

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dxp="http://schemas.google.com/analytics/2009" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">
 <id>https://www.googleapis.com/analytics/v2.4/data?ids=ga:xxxxxx&amp;metrics=ga:pageviews&amp;start-date=2014-05-01&amp;end-date=2014-05-31</id>
 <updated>2015-06-25T05:15:32.044Z</updated>
 <title type="text">Google Analytics Data for View (Profile) xxxxxx</title>
 <link rel="self" type="application/atom+xml" href="https://www.googleapis.com/analytics/v2.4/data?ids=ga:xxxxxx&amp;metrics=ga:pageviews&amp;start-date=2014-06-01&amp;end-date=2014-06-25"/>
 <author>
  <name>Google Analytics</name>
 </author>
 <generator>Google Analytics</generator>
 <openSearch:totalResults>1</openSearch:totalResults>
 <openSearch:startIndex>1</openSearch:startIndex>
 <openSearch:itemsPerPage>1000</openSearch:itemsPerPage>
 <dxp:aggregates>
  <dxp:metric name="ga:pageviews" type="integer" value="1000"/>
 </dxp:aggregates>
 <dxp:containsSampledData>false</dxp:containsSampledData>
 <dxp:dataSource>
  <dxp:property name="ga:profileId" value="xxxxxx"/>
  <dxp:property name="ga:webPropertyId" value="UA-xxxxxxx-1"/>
  <dxp:property name="ga:accountName" value="test"/>
  <dxp:tableId>ga:xxxxxx</dxp:tableId>
  <dxp:tableName>テストサイト</dxp:tableName>
 </dxp:dataSource>
 <dxp:endDate>2014-06-25</dxp:endDate>
 <dxp:startDate>2014-06-01</dxp:startDate>
 <entry>
  <id>https://www.googleapis.com/analytics/v2.4/data?ids=ga:xxxxxx&amp;start-date=2014-06-01&amp;end-date=2014-06-30</id>
  <updated>2015-06-25T05:15:32.044Z</updated>
  <title type="text"/>
  <link rel="alternate" type="text/html" href="http://www.google.com/analytics"/>
  <dxp:metric name="ga:pageviews" type="integer" value="1000"/>
 </entry>
</feed>

下記のような処理をすることで「ga:pageviews」の値を取得できます。

Set oXML = CreateObject("MSXML2.DOMDocument")
    oXML.LoadXML oHTTP.ResponseText
    For Each oEle In oXML.getElementsByTagName("entry/dxp:metric")
    If oEle.getAttribute("name") = "ga:pageviews" Then
        lPV = CLng(oEle.getAttribute("value"))
    End If
Next

・バージョン3.0
まずリクエストするURLを作成します。
バージョン2.4との違いはベースとなるURLです。

    baseUrl = "https://www.googleapis.com/analytics/v3/data/ga"
    sUrl = baseUrl
    sUrl = sUrl & "?ids=ga:" & CStr(viewID)
    sUrl = sUrl & "&start-date=" & Format(sDate, "YYYY-MM-DD")
    sUrl = sUrl & "&end-date=" & Format(eDate, "YYYY-MM-DD")
    sUrl = sUrl & "&metrics=ga:pageviews"
    sUrl = sUrl & "&dimensions="

次にヘッダーにAPI通信するためのアクセストークンとJSONを取得するためのコンテンツタイプを付与しリクエストを行います。

    oHTTP.Open "GET", sUrl, False
    oHTTP.setRequestHeader "Authorization", "Bearer " & access_token
    oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"
    oHTTP.send

返り値は下記のようなJSONで取得できます。
リクエストしたデータはrowsに配列として格納されています。

{
    "columnHeaders": [
        {
            "columnType": "METRIC", 
            "dataType": "INTEGER", 
            "name": "ga:pageviews"
        }
    ], 
    "containsSampledData": false, 
    "id": "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:xxxxxx&metrics=ga:visits,ga:pageviews&start-date=2015-06-01&end-date=2015-06-25", 
    "itemsPerPage": 1000, 
    "kind": "analytics#gaData", 
    "profileInfo": {
        "accountId": "xxxxxxxx", 
        "internalWebPropertyId": "xxxxxxx", 
        "profileId": "xxxxxx", 
        "profileName": "すべてのウェブサイトのデータ", 
        "tableId": "ga:xxxxxx", 
        "webPropertyId": "UA-xxxxxxxx-1"
    }, 
    "query": {
        "end-date": "2015-06-25", 
        "ids": "ga:xxxxxx", 
        "max-results": 1000, 
        "metrics": [
            "ga:pageviews"
        ], 
        "start-date": "2015-06-01", 
        "start-index": 1
    }, 
    "rows": [
        [
            "593"
        ]
    ], 
    "selfLink": "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:xxxxxx&metrics=ga:visits,ga:pageviews&start-date=2015-06-01&end-date=2015-06-25", 
    "totalResults": 1, 
    "totalsForAllResults": {
        "ga:pageviews": "593"
    }
}

下記のような処理をすることで「ga:pageviews」の値を取得できます。

    json = "(" & oHTTP.ResponseText & ")"
    Set d = CreateObject("htmlfile")
    Set elm = d.createElement("span")
    elm.setAttribute "id", "result"
    d.appendChild elm
    d.parentWindow.execScript "document.getElementById('result').innerText=eval(" & json & ").rows[0][0];"
    lPV = elm.innerText

以上がAnalytics Core Reporting APIの説明になります。
Analytics Core Reporting APIのバージョン2.4とバージョン3.0の差はXMLとJSON処理の差だけなので、使い勝手にほとんど違いはありませんでした。

Analytics Core Reporting APIはVBAとの相性が良く取得したデータを直接Excelに書き出したり、データの出力先を固定し簡単にグラフを作成することができます。

VBAを用いてウェブサイト解析を行いたい方や独自のウェブサイト解析を考えている方はこの機会に是非試してみてはいかがでしょうか。

次回は、Analytics Multi-Channel Funnels Reporting APIについて紹介します。

<参考サイト>
Analytics Core Reporting API
Analyticsのdimensionsとmetrics
Google API 第12回