Клиентская библиотека API аналитики V4 для.NET

Я пытаюсь получить некоторые данные из нашего экземпляра Google Analytics и хотел бы использовать клиентскую библиотеку V4 API Analytics Reporting для.NET ( https://developers.google.com/api-client-library/dotnet/apis/analyticsreporting/v4), чтобы я мог запекать некоторые из этих данных на созданный нами сайт администрирования. У меня проблемы с поиском каких-либо примеров использования этого кода, и документация кажется невероятно редкой. Я хотел бы использовать служебную учетную запись для авторизации, поскольку нам нужно только просматривать данные, связанные с аналитической учетной записью, которую мы контролируем.

Если кто-то может предоставить пример кода или указать мне правильное направление, чтобы получить некоторые основные данные отчета с использованием.net API, было бы очень полезно

4 ответа

Решение

Вызов API отчетности Google Analytics из C# не представляет особой сложности, однако все необходимые шаги, по-видимому, не очень четко описаны в документации по Google Analytics API. Я постараюсь перечислить их все здесь. Хотя YMMV, я считаю, что эти шаги будут правильными по состоянию на 20.07.2016.

Вы можете начать с создания нового проекта C#. Мы сделаем консольное приложение для тестирования под названием GoogleAnalyticsApiConsole, После создания проекта мы добавим ссылку на клиентскую библиотеку V4 API Google Analytics Reporting для.NET с помощью консоли диспетчера пакетов NuGet (находится в меню "Инструменты" в Visual Studio 2015). Запустите консоль и введите следующую команду на PM> незамедлительный:

PM> Install-Package Google.Apis.AnalyticsReporting.v4

При установке этого пакета будут загружены клиентские библиотеки, необходимые для вызова веб-служб отчетов Google Analytics, а также ряд других зависимостей.

Для вызова веб-сервисов вам необходимо настроить доступ OAuth 2.0 для вашего приложения. Документацию по этой настройке можно найти здесь, но я подведу итоги ниже:

  1. Войдите в консоль Google Cloud Platform: https://console.cloud.google.com/. Обязательно войдите в систему с учетной записью, имеющей доступ к учетным записям Google Analytics, которые вы пытаетесь запросить с помощью API отчетов.

  2. Откройте меню облачной платформы Google и выберите " Диспетчер API".

Менеджер API Google Cloud Platform

  1. В левой части нажмите Credentials, а затем создайте новый проект с именем Google Analytics API Console, Дайте ему время для создания нового проекта.

  2. После создания проекта снова нажмите Credentials, если он еще не выбран, а затем нажмите ссылку OAuth Consent Screen на правой панели. Установите отображаемое пользователям имя продукта на Google Analytics API Console и затем нажмите Сохранить.

  3. Снова нажмите Credentials, затем нажмите Create Credentials и выберите OAuth Client ID. Выберите Другое для Тип приложения и затем введите Google Analytics API Console в качестве имени и нажмите кнопку " Создать".

  4. После того, как учетные данные созданы, вам будет представлен идентификатор клиента и секрет клиента. Вы можете закрыть диалоговое окно.

  5. Теперь в разделе " Учетные данные" вы должны увидеть запись под идентификаторами клиента OAuth 2.0. Нажмите на значок загрузки справа от этой записи, чтобы загрузить client_secret.json файл (этот файл будет иметь гораздо более длинное имя). Добавьте этот файл в свой проект на корневом уровне после его загрузки и переименуйте в client_secret.json,

Учетные данные API облачной платформы Google

  1. Теперь, когда учетные данные OAuth 2.0 созданы, нам нужно разрешить ему вызывать API отчетности. Выберите Обзор и убедитесь, что Google API выбран на правой панели. Введите Reporting в окне поиска и выберите API отчетов Analytics V4 из списка. На следующем экране нажмите Включить. Как только этот API будет включен, вы сможете увидеть его в списке Enabled APIs на правой панели.

Аналитика Google Cloud Platform с поддержкой отчетов

Теперь, когда мы создали наш проект и создали учетные данные OAuth 2.0, пришло время вызвать Reporting API V4. Приведенный ниже код будет использовать Google API и client_secret.json файл для создания Google.Apis.Auth.OAuth2.UserCredential запросить API отчетов для всех сеансов между заданным диапазоном дат для представления. Код адаптирован из примера Java здесь.

Перед выполнением кода обязательно установите действие Build на client_secret.json file to Content и настройку Copy to Output Directory для копирования, если новее. Есть также две переменные, которые должны быть правильно установлены. Во-первых, в GetCredential() метод, установите loginEmailAddress значение адреса электронной почты, использованного для создания учетных данных OAuth 2.0. Затем в Main метод, не забудьте установить ViewId в reportRequest переменная для представления, которое вы хотите запросить с помощью API отчетности. Чтобы найти ViewIdВойдите в Google Analytics и выберите вкладку " Администратор ". Оттуда выберите представление, которое вы хотите запросить, в раскрывающемся меню " Вид" в правом углу и выберите " Параметры просмотра". Идентификатор вида будет отображаться в разделе " Основные настройки".

Когда код выполняется в первый раз, появится веб-страница с вопросом, хотите ли вы разрешить Google Analytics API Console иметь доступ к данным API. Выберите Разрешить, чтобы продолжить. С этого момента это разрешение будет храниться в GoogleAnalyticsApiConsoleFileDataStore, Если этот файл удален, то разрешение необходимо будет предоставить снова. Этот файл можно найти в %APPDATA%\GoogleAnalyicsApiConsole каталог.

Разрешение API Google OAuth 2.0

Обратите внимание, что я считаю, что этот сценарий будет соответствовать потребностям ОП. Если бы это приложение распространялось среди клиентов, то, скорее всего, понадобилась бы другая схема 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"));
            }
        }
    }
}

Вот шаги, которые обновляются для сентября 2019 года.

Во-первых, имейте в виду, что в OAuth есть два варианта: учетные данные пользователя и учетные данные учетной записи службы. Учетные данные пользователя предназначены для использования, когда вы не знаете, к какой учетной записи Google Analytics вы будете подключены, поэтому пользователь предоставляет разрешение вашему приложению. Учетные данные учетной записи службы предназначены для использования, например, если вы создаете собственную панель управления для своей компании для отображения данных Google Analytics.

В большинстве случаев, если вам нужен программный доступ к данным Analytics, это второй случай.

Следующие шаги должны помочь вам начать работу с простым примером C#. Обратите внимание, что часть веб-консоли Google может немного отличаться, но, тем не менее, ее будет легко найти.

  1. Перейдите в консоль Google API. Создайте проект, если будет предложено.
  2. Зайдите в Сервисные аккаунты.
  3. Создайте новую учетную запись службы. У вас должна быть учетная запись со случайно сгенерированным адресом электронной почты (мой заканчивается наxxx@xxx.iam.gserviceaccount.com)
  4. Найдите кнопку " Создать ключ". Выберите JSON и загрузите файл. Это ваш закрытый ключ и ваша единственная копия. Не потерять его.
  5. Перейдите в панель администратора Google Analytics. Предоставьте доступ к учетной записи службы, используя ее адрес электронной почты, точно так же, как вы предоставляете доступ другим пользователям.

Конфигурация Google завершена. Теперь перейдите в Visual Studio.

  1. Создайте новый консольный проект C#.
  2. Получите пакет Nuget Google.Apis.AnalyticsReporting.v4. Он также должен автоматически загружать основные пакеты.
  3. Возьмите загруженный ранее файл JSON, поместите его в проект, установите для его свойства значение Content и всегда копируйте.
using Google.Apis.AnalyticsReporting.v4.Data;
using System;

namespace ConsoleApplication {
    class Program {
        static void Main(string[] args) {
            var credential = Google.Apis.Auth.OAuth2.GoogleCredential.FromFile("serviceAccount.json")
                .CreateScoped(new[] { Google.Apis.AnalyticsReporting.v4.AnalyticsReportingService.Scope.AnalyticsReadonly });

            using (var analytics = new Google.Apis.AnalyticsReporting.v4.AnalyticsReportingService(new Google.Apis.Services.BaseClientService.Initializer {
                HttpClientInitializer = credential
            })) {
                var request = analytics.Reports.BatchGet(new GetReportsRequest {
                    ReportRequests = new[] {
                        new ReportRequest{
                            DateRanges = new[] { new DateRange{ StartDate = "2019-01-01", EndDate = "2019-01-31" }},
                            Dimensions = new[] { new Dimension{ Name = "ga:date" }},
                            Metrics = new[] { new Metric{ Expression = "ga:sessions", Alias = "Sessions"}},
                            ViewId = "99999999"
                        }
                    }
                });
                var response = request.Execute();
                foreach (var row in response.Reports[0].Data.Rows) {
                    Console.Write(string.Join(",", row.Dimensions) + ": ");
                    foreach (var metric in row.Metrics) Console.WriteLine(string.Join(",", metric.Values));
                }
            }

            Console.WriteLine("Done");
            Console.ReadKey(true);
        }
    }
}

У меня был такой же опыт: документация Google довольно глубока, но довольно ужасна, давая четкие примеры того, как подключиться к.NET.

Я наконец понял одну ключевую вещь: вы можете подключиться, используя учетные данные OAuth2 или учетные данные службы. Если у вас есть аккаунт Google Analytics, используйте сервисный аккаунт. Если вам необходимо подключиться к учетным записям Google Analytics других пользователей, используйте OAuth2.

Кажется, в Интернете довольно много примеров того, как получить данные API Analytics с использованием учетных данных OAuth2, но у меня есть учетная запись Analytics, и я просто хотел получить данные из нее. Я выяснил, как подключиться к API отчетов Analytics v4 с помощью ServiceAccountCredentialи я написал ответ на аналогичный вопрос переполнения стека со всеми подробностями.

Вот код, который вы действительно ищете -

          protected void Page_Load(object sender, EventArgs e)
    {
        IRestRequest request = new RestRequest("", Method.POST, DataFormat.Json);
        string url = "https://analyticsreporting.googleapis.com/v4/reports:batchGet";

        RestClient restClient = new RestClient();
        RestRequest Tokenrequest = new RestRequest();
        Tokenrequest.AddQueryParameter("client_id", "<CLIENTID>");
        Tokenrequest.AddQueryParameter("client_secret", "<CLIENTSECRET>");
        Tokenrequest.AddQueryParameter("grant_type", "refresh_token");
        Tokenrequest.AddQueryParameter("refresh_token", "<REFRESH_TOKEN>");
        restClient.BaseUrl = new System.Uri("https://oauth2.googleapis.com/token");
        restClient.Post(Tokenrequest);
        var responseToken = restClient.Execute(Tokenrequest);
        //Response.Write(responseToken);
        dynamic Tokendata = JObject.Parse(responseToken.Content);
        var newToken = Tokendata.access_token.Value;

        request.AddHeader("authorization", string.Concat("Bearer "+newToken));
        string jsonString = "{" +
                "\"reportRequests\": [{" +
                    "\"dateRanges\" : [{\"" +
                     "startDate\" :'2021-07-01' ," +
                     "\"endDate\" : '2021-07-07'" +
                "}]," +
                
                "\"metrics\":["+
                "{\"expression\":'ga:totalEvents'},"+
                "{\"expression\": 'ga:pageviews'}"+
                  "]," +


                "\"dimensions\": ["+
            "{\"name\": 'ga:eventCategory'}" +
                ",{" +
            "\"name\": 'ga:eventAction'"+
                "},"+
                //"{\"name\": 'ga:deviceCategory'}"+
                "]," +


                "\"dimensionFilterClauses\": [{"+
            "\"filters\": [{"+
                "\"dimensionName\": 'ga:eventCategory',"+
          "\"operator\": 'EXACT',"+
          "\"expressions\": ["+
            "\"Login_Form"+
                "\"]}]}],"+



                "\"viewId\":'<VIEWID>'" +
                "}]" +
            "}";

        IRestClient client = new RestClient(url);
        request.AddHeader("Content-Type", "application/json; CHARSET=UTF-8");
        request.Resource = "";
        request.AddParameter("application/json", jsonString, ParameterType.RequestBody);
        var response = client.Execute(request);
        dynamic jdata = JObject.Parse(response.Content);

        var Row_data = jdata.reports[0].data.rows;
        Response.Write(Row_data);
       
    }

   

Прочтите документ, чтобы получить access_token через refresh_token.

https://developers.google.com/identity/protocols/oauth2/web-server#offline