HomeControllerの修正
最後に、HomeControllerのAboutメソッドにメイン処理を記述します。
using GaMvcSample.Infra; using Google.Apis.Analytics.v3; using Google.Apis.Analytics.v3.Data; using Google.Apis.Auth.OAuth2.Mvc; using Google.Apis.Services; using System.Threading; using System.Threading.Tasks; using System.Web.Mvc; namespace GaMvcSample.Controllers { public class HomeController : Controller { // (1)Aboutメソッドを変更 public async Task<ActionResult> About(CancellationToken cancellationToken) { // MVC用のOAuth接続用クラス var authMvcApp = new AuthorizationCodeMvcApp(this, new MyFlowMetadata()); // 非同期で認証を確認 var result = await authMvcApp.AuthorizeAsync(cancellationToken); // 認可状況を確認 if (result.Credential == null) { // 未認証のときは、Googleのログイン画面にリダイレクト return new RedirectResult(result.RedirectUri); } else { // (2)認可されていれば、Analyticsのサービスを取得 var service = new AnalyticsService(new BaseClientService.Initializer { // 認可情報を設定 HttpClientInitializer = result.Credential, // アプリケーション名 ApplicationName = "GaMvcSample" }); // (3)GAのサービスから、統計データを取得する基本設定(GAのビューID、開始日、終了日、メトリクス名) DataResource.GaResource.GetRequest r = service.Data.Ga.Get("ga:79626416", "2013-11-30", "2013-12-02", "ga:pageviews"); // (4)パラメータを設定して実行 // 取得するディメンジョンとしてページタイトルを指定 r.Dimensions = "ga:pageTitle"; // ソート順を指定 r.Sort = "-ga:pageviews"; // 取得する件数を指定 r.MaxResults = 10; // (5)データ取得を実行 GaData d = r.Execute(); // 結果をViewBagに設定 ViewBag.Headers = d.ColumnHeaders; ViewBag.Rows = d.Rows; return View(); } } } }
(1)のAboutメソッドは、Taskクラスを戻り値とする非同期アクションで、MVC用のOAuth接続用クラスのAuthorizationCodeMvcAppクラス(Google.Apis.Auth.OAuth2.Mvc名前空間)のAuthorizeAsyncメソッドを呼び出しています。このメソッドでは、Googleに認証状態を確認し、必要に応じてGoogleのログイン画面を表示します。
(2)の部分では、Google Analyticsのサービスからデータを取得するロジックを記述しています。ここでは認証情報を元に、AnalyticsServiceクラス(Google.Apis.Analytics.v3名前空間)を取得しています。Google APIのサービスを取得する時には、BaseClientServiceクラスのInitializerを使用します。なお、ApplicationNameは日本語だとエラーとなるため注意してください。
(3)の部分では、AnalyticsServiceのデータリソースを取得するために「Data.Ga.Get("ga:ビューID", "統計取得開始日", "統計開始終了日", "ga:メトリクス名")」という記述をしています。分析データを取得したい対象をビューID(従来のプロファイルID)で指定します。このIDは、Google Analyticsの管理画面のアナリティクス設定から確認できます。
集計開始日、集計終了日の他、メトリクスに測定/集計する指標を設定します。ここではページビューを表す「ga:pageviews」を指定しています。カンマ区切りで「ga:visits,ga:visitors」のように複数指定することも可能です。
続いて、(4)の部分では、取得に関するパラメータを設定してします。Dimensionsプロパティには数字をグルーピングする属性を設定します。Google Analyticsの管理画面でプライマリディメンジョンやセカンダリディメンジョンとして表示されている項目です。例えば、ページURLを表す"ga:pagePath"などを設定できますが、ここではページタイトルを表す"ga:pageTitle"を設定しています。Sortプロパティでは、"-ga:pageviews"というようにページビューを降順で指定しています。マイナスをつけることで降順となります。
なお、これらの設定内容は、Analyticsのリファレンスページから確認できます。さらに、Google Analytics Query Explorerというツールを使用すると、GUIから簡単にリクエストのテストができます。
(5)の部分では、設定したリクエストをExecuteメソッドで実行しています。実行した結果は、GaDataクラス(Google.Apis.Analytics.v3.Data名前空間)に格納されます。
なお、Google Analytics APIのリファレンスドキュメントやソースコードも公開されているので、クラス概要やメンバーの情報を知りたい時には参考にすると良いでしょう。
ビューAbout.cshtmlの変更
APIから取得したデータを表示するために、Views\HomeのAbout.cshtmlを変更しています。ここでは、APIから取得したデータを画面に表示しています。
@{ ViewBag.Title = "GoogleAnalyticsのデータ取得表示"; } <h2>@ViewBag.Title</h2> <table border="1"> <thead> <tr> @foreach (var item in @ViewBag.Headers) { <td>@item.Name (@item.DataType / @item.ColumnType) </td> } </tr> </thead> <tbody> @foreach (var item in @ViewBag.Rows) { <tr> <td>@item[0]</td> <td>@item[1]</td> </tr> } </tbody> </table>
以上で、コーディングは完了です。