開発室ブログ

Google Google Analytics Node.js SEO

Google Analytics Reporting API(v4)への移行

はじめに

 前回、私の投稿Google Analytics APIのNodeモジュール(OAuth2)でsetCredentials is not a functionで Google AnalyticsAPIを利用してしている旨を記載してましたが、今回はそのAPI自体についてです。

 以前まではGoogle Analytics API(v3)を利用していました。

f:id:ajdev:20180201085452p:plain

 システム構築の際にクライアント情報としてクライアントのアカウントにてGoogle APIのページで諸々の設定をする中で

f:id:ajdev:20180201085457p:plain

のアナウンスがありましたが、見なかったことにしてクライアント情報の設定をしていました。(ぉいぉい)

移行への決断

 そんなある日、社長からレポート対象のクライアント追加の指示があり、私とA君はその作業に着手しました。 いつものようにクライアントアカウントでGoogle APIライブラリのページにアクセスしてGoogle Analytics API(v3)を有効化すべく、 API選択画面を表示しましたが選択候補からGoogle Analytics API(v3)が消えていました。 かなり慌てたことは言うまでも無く途方にくれてましたが、為す術も無くその日は作業を中断しました。

 しかしながら翌日になるとAPI選択画面の候補にGoogle Analytics API(v3)が現れて、昨日の慌てふためく様はナンだったのだろうかと思うほど、あっけなくAPIを有効化することが出来きました。でもこれはトットとv4へ移行しなさい」というお告げであろうと解釈し、 移行への重い腰を上げることにしました。

移行への道

 今までGoogle APIライブラリのページからGoogle Analytics API(v3)を有効化していましたが、v4へ移行するに当たって今度はGoogle Analytics Reporting API(v4)を有効化します。

f:id:ajdev:20180209092820p:plain

これがv4と呼ばれるAPIGoogle Analytics API(v3)と間違わないように気をつけてください。

 Google Analytics Reporting API(v4)を使って実装するのですが、今回のシステム構築ではバックエンドとフロントエンドに分かれており Google Analytics Reporting API(v4)はバックエンド側でコールします。 バックエンドの機能としてはAPIのパラメータを生成してコールし、その結果をそのまんまフロントエンドへ まる投げ 引き渡すのですが、APIの結果は非同期で取得します。(これがミソ)

 移行ガイドとにらめっこしながら、 どうにかこうにか実装することが出来ましたが、フロント側はまだ対応していないので旧APIも残しつつエンドポイントでAPIを切り替えるありがちな対応をしました。 一言で言うとAPIに渡すパラメータがカンマ区切りの文字列から配列になった感じですかね。

 モチロン、インスタンス生成やメソッドも様変わりしてましたが各項目ごとにv3/v4との比較が簡単にできる移行ガイドだったのでとても分かりやすく参考になりました。

v3のコールシーケンス

"use strict";
var googleapis  = require('googleapis'),
:
var analytics = googleapis.analytics({auth: OAuth2認証オブジェクト, version: 'v3'});
var param = { パラメータ };
return analytics.data.ga.get( param, function(err, rows){ コールバック処理 });

v4のコールシーケンス

"use strict";
var googleapis  = require('googleapis'),
:
var analytics = googleapis.analyticsreporting({auth: OAuth2認証オブジェクト, version: 'v4'});
var param = { パラメータ };
return analytics.reports.batchGet( param, function(err, rows){ コールバック処理 });

ただ一箇所だけドキュメントに記載されている内容に違いがありましたが、他のサイトを参考にしながらどうにかv4へ移行することが出来ました。

v4移行ガイドに記載のパラメータ

{
"reportRequests":[
{
"viewId":"XXXX",
...
}]
}

実際のパラメータ

{
"resource":{
"reportRequests":[
{
"viewId"    : XXXX,
...
}]
}
}

 APIのレスポンスは文字列データと数値データが分割されたので、使用するグラフ描画のAPIによっては数値データをそのまま、パラメータとして渡せるのでしょうね。

v3のレスポンス(rows部分抜粋)

"rows": [
[
"google / organic",
"215",
"82.32558139534883",
"177",
"86.9767441860465",
"1.1813953488372093",
"52.665116279069764"
],
[
"yahoo / organic",
"93",
"87.09677419354838",
"81",
"75.26881720430107",
"1.4086021505376345",
"67.72043010752688"
],
[
"(direct) / (none)",
"32",
"84.375",
"27",
"78.125",
"1.3125",
"86.40625"
],
[
"arisbudiman.com / referral",
"1",
"100.0",
"1",
"100.0",
"1.0",
"0.0"
]
],

v4のレスポンス(rows部分抜粋)

"rows": [
{
"dimensions": [
"google / organic"
],
"metrics": [
{
"values": [
"215",
"82.32558139534883",
"177",
"86.9767441860465",
"1.1813953488372093",
"52.665116279069764"
]
}
]
},
{
"dimensions": [
"yahoo / organic"
],
"metrics": [
{
"values": [
"93",
"87.09677419354838",
"81",
"75.26881720430107",
"1.4086021505376345",
"67.72043010752688"
]
}
]
},
{
"dimensions": [
"(direct) / (none)"
],
"metrics": [
{
"values": [
"32",
"84.375",
"27",
"78.125",
"1.3125",
"86.40625"
]
}
]
},
{
"dimensions": [
"arisbudiman.com / referral"
],
"metrics": [
{
"values": [
"1",
"100.0",
"1",
"100.0",
"1.0",
"0.0"
]
}
]
}
],

おわりに

 いかんせん大変なのはフロント側で隣にいるA君の努力の末、無事v4への完全移行が完了いたしました。A君ご苦労様でした。

RecentPost