web-dev-qa-db-ja.com

.NET用Analytics Reporting API V4クライアントライブラリ

Googleアナリティクスインスタンスからデータを取得しようとしています。AnalyticsReporting API V4クライアントライブラリ(.NET用)を使用したいです( https://developers.google.com/api-client-library/dotnet/apis/analyticsreporting/v4 )これにより、このデータの一部を、作成した管理サイトに焼き付けることができます。このコードの使用例を見つけるのに苦労しており、ドキュメントは非常にまばらであるようです。制御する分析アカウントに関連付けられたデータのみを表示する必要があるため、サービスアカウントを使用して承認したいと思います。

誰かがサンプルコードを提供したり、.net APIを使用していくつかの基本的なレポートデータを取得する正しい方向を教えてくれたりするなら、大歓迎です

34
Ben

C#からGoogle Analytics Reporting APIを呼び出すことは特に難しいことではありませんが、必要な手順のすべてがGoogle Analytics APIドキュメントで明確に概説されていないようです。私はそれらをすべてここにリストしようとします。 YMMVでは、これらの手順は2016年7月20日の時点で正しいと考えています。

新しいC#プロジェクトを作成することから始めます。 GoogleAnalyticsApiConsoleというテスト用のコンソールアプリケーションを作成します。プロジェクトが作成されたら、NuGetパッケージマネージャーコンソール(Visual Studio 2015の[ツール]メニューにあります)を使用して 。NET向けGoogleアナリティクスレポートAPI V4クライアントライブラリ への参照を追加します。コンソールを起動し、_PM>_プロンプトで次のコマンドを発行します。

_PM> Install-Package Google.Apis.AnalyticsReporting.v4_

そのパッケージをインストールすると、Google Analytics Reporting Webサービスを呼び出すために必要なクライアントライブラリと他の多くの依存関係がダウンロードされます。

Webサービスを呼び出すには、アプリケーションにOAuth 2.0アクセスを設定する必要があります。この設定のドキュメント ここにあります が、以下に要約します。

  1. Google Cloud Platform Consoleにログインします: https://console.cloud.google.com/ 。レポートAPIでクエリを実行しようとしているGoogleアナリティクスアカウントにアクセスできるアカウントでログインしてください。

  2. Google Cloud Platformメニューをクリックし、API Managerを選択します。

Google Cloud Platform API Manager

  1. 左側で、Credentialsをクリックし、_Google Analytics API Console_という新しいプロジェクトを作成します。新しいプロジェクトを作成する時間を与えてください。

  2. プロジェクトが作成されたら、Credentialsがまだ選択されていない場合は再度クリックし、OAuth同意画面をクリックします右パネルのリンク。 ユーザーに表示される製品名を_Google Analytics API Console_に設定し、[保存]をクリックします。

  3. Credentialsを再度クリックし、Create Credentialsをクリックして、OAuthクライアントIDOtherforApplication typeを選択し、_Google Analytics API Console_を入力しますNameをクリックし、Createをクリックします。

  4. 資格情報が作成されると、クライアントIDとクライアントシークレットが表示されます。ダイアログウィンドウを閉じることができます。

  5. これで、Credentialsの下にOAuth 2.0クライアントidsの下にエントリが表示されます。そのエントリの右端にあるダウンロードアイコンをクリックして、_client_secret.json_ファイルをダウンロードします(このファイルの名前はもっと長くなります)。ダウンロードしたファイルをルートレベルでプロジェクトに追加し、名前を_client_secret.json_に変更します。

Google Cloud Platform API Credentials

  1. OAuth 2.0クレデンシャルが作成されたので、Reporting APIを呼び出すことができるようにする必要があります。SelectOverview右パネルでGoogle APIが選択されていることを確認します。検索ボックスにReportingと入力し、Analytics Reporting API V4リストから。次の画面で、Enableをクリックします。有効になっている場合は、右側のパネルのEnabled APIリストの下に表示されるはずです。

Google Cloud Platform Enabled Analytics Reporting

プロジェクトを作成し、OAuth 2.0資格情報を作成しました。ReportingAPI V4を呼び出します。以下のコードでは、Google APIと_client_secret.json_を使用しますファイルを指定して_Google.Apis.Auth.OAuth2.UserCredential_を作成し、Viewの指定された日付範囲内のすべてのセッションについてReporting APIにクエリを実行します。コードは ここにJavaの例 を適用しています。

コードを実行する前に、必ずビルドアクションを設定してください_client_secret.json_ファイルからContentおよび出力ディレクトリへのコピーに設定すると、新しい場合はコピーします。適切に設定する必要がある2つの変数もあります。最初に、GetCredential()メソッドで、loginEmailAddress値をOAuth 2.0資格情報の作成に使用されたメールアドレスに設定します。次に、Mainメソッドを使用する場合は、ViewId変数のreportRequestを、Reporting APIを使用してクエリするビューに設定してください。ViewIdを見つけるには、ログインしてくださいGoogleアナリティクスにアクセスし、Adminタブを選択します。そこから、View一番右のドロップダウンリストからView Settingsを選択します。View IDBasic Settingsの下に表示されます。

コードを初めて実行すると、_Google Analytics API Console_にAPIデータへのアクセスを許可するかどうかを尋ねるWebページが表示されます。 Allowを選択して続行します。それ以降、その許可はGoogleAnalyticsApiConsoleFileDataStoreに保存されます。そのファイルが削除された場合、許可を再度付与する必要があります。そのファイルは_%APPDATA%\GoogleAnalyicsApiConsole_ディレクトリにあります。

Google API Permission OAuth 2.0

このシナリオはOPのニーズを満たすと信じていることに注意してください。このアプリケーションをクライアントに配布する場合は、別のOAuth 2.0スキームが必要になる可能性が高いでしょう。

コードは次のとおりです。

_using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Google.Apis.AnalyticsReporting.v4;
using Google.Apis.AnalyticsReporting.v4.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Util.Store;

namespace GoogleAnalyticsApiConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var credential = GetCredential().Result;
                using(var svc = new AnalyticsReportingService(
                    new BaseClientService.Initializer
                    {
                        HttpClientInitializer = credential,
                        ApplicationName = "Google Analytics API Console"
                    }))
                {    
                    var dateRange = new DateRange
                    {
                        StartDate = "2016-05-01",
                        EndDate = "2016-05-31"
                    };
                    var sessions = new Metric
                    {
                        Expression = "ga:sessions",
                        Alias = "Sessions"
                    };
                    var date = new Dimension { Name = "ga:date" };

                    var reportRequest = new ReportRequest
                    {
                        DateRanges = new List<DateRange> { dateRange },
                        Dimensions = new List<Dimension> { date },
                        Metrics = new List<Metric> { sessions },
                        ViewId = "<<your view id>>"
                    };
                    var getReportsRequest = new GetReportsRequest {
                        ReportRequests = new List<ReportRequest> { reportRequest } };
                    var batchRequest = svc.Reports.BatchGet(getReportsRequest);
                    var response = batchRequest.Execute();
                    foreach (var x in response.Reports.First().Data.Rows)
                    {
                        Console.WriteLine(string.Join(", ", x.Dimensions) +
                        "   " + string.Join(", ", x.Metrics.First().Values));
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        static async Task<UserCredential> GetCredential()
        {
            using (var stream = new FileStream("client_secret.json", 
                 FileMode.Open, FileAccess.Read))
            {
                const string loginEmailAddress = "<<your account email address>>";
                return await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { AnalyticsReportingService.Scope.Analytics },
                    loginEmailAddress, CancellationToken.None, 
                    new FileDataStore("GoogleAnalyticsApiConsole"));
            }
        }
    }
}
_
62
rsbarro

私も同じ経験をしました。Googleのドキュメントはかなり詳細ですが、.NETとの接続方法の明確な例を与えるのはかなりひどいです。

最後に気付いた重要なことの1つは、OAuth2資格情報またはサービスアカウント資格情報を使用して接続できることです。アナリティクスアカウントを所有している場合は、サービスアカウントを使用してください。他のユーザーのAnalyticsアカウントに接続する必要がある場合は、OAuth2を使用します。

OAuth2クレデンシャルを使用してAnalytics APIデータを取得する方法のオンライン例がかなりあるようですが、Analyticsアカウントを所有していて、そこからデータを取得したかっただけです。 ServiceAccountCredentialを使用してAnalytics Reporting API v4に接続する方法を見つけ、同様のStack Overflowの質問について 回答 をすべての詳細とともに書きました。

5
John Washam