Используйте Google Analytics API для отображения информации на C #

Я весь день искал хорошее решение, но Google развивается так быстро, что я не могу найти что-то работающее. Что я хочу сделать, так это то, что у меня есть веб-приложение с разделом администратора, в котором пользователю нужно войти в систему, чтобы просмотреть информацию. В этом разделе я хочу показать некоторые данные из GA, например просмотры страниц для определенных URL. Поскольку я показываю не информацию о пользователе, а пользователь Google Analytics, я хочу подключить передачу информации (имя пользователя/пароль или APIKey), но я не могу понять, как это сделать. Все образцы, которые я нашел, используют OAuth2 (ведьма, если я понимаю, попросит посетителя войти в систему с помощью google).

То, что я нашел до сих пор:

  • Официальная клиентская библиотека Google для .Net: http://code.google.com/p/google-api-dotnet-client/, без образца для GA
  • официальная справка разработчиков: https://developers.google.com/analytics/
  • другой вопрос с кодом на SO: Google Analytics API — программно получать просмотры страниц на стороне сервера, но я получаю 403, когда пытаюсь аутентифицироваться
  • какой-то источник, имеющий доступ к API: http://www.reimers.dk/jacob-reimers-blog/added-google-analytics-reader-for-net загрузил исходный код, но я могу ‘ t выяснить, как это работает
  • этот другой вопрос по SO: доступ к Google Analytics с C #, но это не помогает
  • при написании этого они предлагают мне этот старый пост 09 Google Analytics API и .Net …

Может быть, я просто устал и завтра будет легко найти решение, но прямо сейчас мне нужна помощь!

Спасибо


Я много искал и, наконец, либо поискал код из нескольких мест, а затем обернул вокруг него свой собственный интерфейс, я пришел к следующему решению. Не уверен, что люди вставляют сюда весь свой код, но я думаю, почему бы не сэкономить время всем остальным 🙂

Предварительные требования, вам нужно будет установить Google.GData.Client и google.gdata.analytics package/dll.

Это основной класс, который выполняет всю работу.

  namespace Utilities.Google {public class Analytics {private readonly String ClientUserName  ;  закрытый только для чтения String ClientPassword;  закрытый только для чтения String TableID;  private AnalyticsService analyticsService;  общедоступная аналитика (строковый пользователь, строковый пароль, строковая таблица) {this.ClientUserName = user;  this.ClientPassword = пароль;  this.TableID = table; //Настроить GA API.  analyticsService = new AnalyticsService ("gaExportAPI_acctSample_v2.0"); //Авторизация входа клиента.  analyticsService. setUserCredentials (ClientUserName, ClientPassword);  }//////Получить просмотры страниц для определенного пути к странице////// /// /// /// сделать это false, если pagePath является регулярным выражением ///  public int GetPageViewsForPagePath (строка pagePath, DateTime startDate, DateTime endDate, bool isPathAbsolute = true) {int output = 0; //Запрос фида данных Google Analytics uri.  String baseUrl = "https://www.google.com/analytics/feeds/data";  Запрос DataQuery = новый DataQuery (baseUrl);  query.Ids = TableID; //query.Dimensions = "ga: source, ga: medium";  query.Metrics = "ga: pageviews"; //query.Segment = "gaid :: - 11";  var filterPrefix = isPathAbsolute?  "ga: pagepath ==": "ga: pagepath = ~";  query.Filters = filterPrefix + pagePath; //query.Sort = "-ga: посещений"; //query.NumberToRetrieve = 5;  query.GAStartDate = startDate.ToString ("гггг-ММ-дд", CultureInfo.InvariantCulture);  query.GAEndDate = endDate.ToString ("гггг-ММ-дд", CultureInfo.InvariantCulture);  Uri url = query.Uri;  DataFeed feed = analyticsService.Query (запрос);  output = Int32.Parse (feed.Aggregates.Metrics [0] .Value);  возвратный вывод;  } public Dictionary  PageViewCounts (string pagePathRegEx, DateTime startDate, DateTime endDate) {//Запрос фида данных GA uri.  String baseUrl = "https://www.google.com/analytics/feeds/data";  Запрос DataQuery = новый DataQuery (baseUrl);  query.Ids = TableID;  query.Dimensions = "ga: pagePath";  query.Metrics = "ga: pageviews"; //query.Segment = "gaid :: - 11";  var filterPrefix = "ga: pagepath = ~";  query.Filters = filterPrefix + pagePathRegEx; //query.Sort = "-ga: посещений"; //query.NumberToRetrieve = 5;  query.GAStartDate = startDate.ToString ("гггг-ММ-дд", CultureInfo.InvariantCulture);  query.GAEndDate = endDate.ToString ("гггг-ММ-дд", CultureInfo.InvariantCulture);  Uri url = query.Uri;  DataFeed feed = analyticsService.Query (запрос);  var returnDictionary = new Dictionary  ();  foreach (запись var в feed.Entries) returnDictionary.Add (((DataEntry) entry) .Dimensions [0] .Value, Int32.Parse (((DataEntry) entry) .Metrics [0] .Value));  return returnDictionary;  }}}  

И это интерфейс и реализация, которые я использую для завершения.

  Utilities namespace {public  интерфейс IPageViewCounter {int GetPageViewCount (строка relativeUrl, DateTime startDate, DateTime endDate, bool isPathAbsolute = true);  Dictionary  PageViewCounts (строка pagePathRegEx, DateTime startDate, DateTime endDate);  } открытый класс GooglePageViewCounter: IPageViewCounter {частная строка GoogleUserName {get {return ConfigurationManager. AppSettings ["googleUserName"];  }} закрытая строка GooglePassword {get {return ConfigurationManager.AppSettings ["googlePassword"];  }} закрытая строка GoogleAnalyticsTableName {get {return ConfigurationManager.AppSettings ["googleAnalyticsTableName"];  }} приватная аналитика Analytics;  общедоступный GooglePageViewCounter () {analytics = new Analytics (GoogleUserName, GooglePassword, GoogleAnalyticsTableName);  } #region IPageViewCounter Члены public int GetPageViewCount (string relativeUrl, DateTime startDate, DateTime endDate, bool isPathAbsolute = true) {int output = 0;  попробуйте {output = analytics.GetPageViewsForPagePath (relativeUrl, startDate, endDate, isPathAbsolute);  } catch (Exception ex) {Logger.Error (ex);  } вернуть вывод;  } общедоступный словарь  PageViewCounts (строка pagePathRegEx, DateTime startDate, DateTime endDate) {var input = analytics.PageViewCounts (pagePathRegEx, startDate, endDate);  var output = new Dictionary  ();  foreach (var item in input) {if (item.Key.Contains ('&')) {string [] key = item.Key.Split (новый символ [] {'?', '&'});  строка newKey = ключ [0] + "?"  + key.FirstOrDefault (k => k.StartsWith ("p ="));  если (output.ContainsKey (newKey)) output [newKey] + = item.Value;  иначе вывод [newKey] = item.Value;  } еще output.Add (item.Key, item.Value);  } вернуть вывод;  } #endregion}}  

А теперь остальное очевидное — вам нужно будет добавить значения web.config в конфигурацию вашего приложения или webconfig и вызвать IPageViewCounter.GetPageViewCount


Требуется небольшая настройка со стороны Google, но на самом деле это довольно просто. Перечислю шаг за шагом.

Сначала вам нужно создать приложение в облачной консоли Google и включить Analytics API.

  • Перейдите на http://code.google.com/apis/console
  • . Выберите раскрывающийся список и создайте проект, если у вас его еще нет.
  • Один раз проект создан, нажмите на сервисы
  • Отсюда включите Analytics API

Теперь, когда Analytics API включен, следующий шаг позволит учетной записи службы получить доступ к желаемым профилям/сайтам аналитики. Учетная запись службы позволит вам войти в систему, не запрашивая у пользователя учетные данные.

  • Перейдите на http://code.google.com/apis/ консоли и выберите созданный вами проект в раскрывающемся списке.
  • Затем перейдите в раздел «Доступ к API» и нажмите кнопку «Создать другой идентификатор клиента».
  • В в окне «Создание идентификатора клиента» выберите учетную запись службы и нажмите «Создать идентификатор клиента».
  • Загрузите открытый ключ для этой учетной записи, если она не запускает загрузку автоматически. Он понадобится вам позже, когда вы будете писать код для авторизации.
  • Перед выходом скопируйте автоматически сгенерированный адрес электронной почты сервисных аккаунтов, так как он понадобится вам на следующем шаге.. Электронный адрес клиента выглядит так: @ developer.gserviceaccount.com

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

  • Войдите в Google Analytics.
  • После входа в систему нажмите кнопку «Администратор» слева внизу. на экране.
  • В разделе «Администратор» щелкните раскрывающийся список учетных записей и выберите учетную запись/сайт, к которой должна иметь доступ ваша учетная запись службы, затем нажмите «Управление пользователями» в разделе учетной записи.
  • Введите адрес электронной почты, созданный для вашей учетной записи службы, и дайте ему разрешение на чтение и анализ.
  • Повторите эти шаги для любой другой учетной записи/сайта, к которым ваш сервис должен иметь доступ.

Теперь, когда настройка выполняется для учетной записи службы для доступа к Google Analytics через API, который мы можем начать кодировать.

Получите этот пакет из NuGet:

Google.Apis .Analytics.v3 Клиентская библиотека

Добавьте следующие варианты использования:

  с помощью Google.Apis.Analytics.v3; с помощью Google.Apis.Analytics.v3  .Data; используя Google.Apis.Services; используя System.Security.Cryptography.X509Certificates; используя Google.Apis.Auth.OAuth2; используя System.Collections.Generic;  using System.Linq;  

Следует отметить следующие моменты.

  • keyPath путь к загруженному вами ключевому файлу с расширением .p12.
  • accountEmailAddress — это адрес электронной почты API, который мы получили ранее.
  • Scope — это Enum в Google. Apis.Analytics.v3.AnalyticService — класс, который определяет URL-адрес, используемый для авторизации (например, AnalyticsService.Scope.AnalyticsReadonly ).
  • Имя приложения — это имя по вашему выбору, которое сообщает API Google, что к нему обращается (иначе: это может быть все, что вы выберете).

Затем код для выполнения некоторых основных вызовов выглядит следующим образом.

  открытый класс GoogleAnalyticsAPI {общедоступная служба AnalyticsService {get;  набор;  } общедоступный GoogleAnalyticsAPI (строка keyPath, строка accountEmailAddress) {var certificate = new X509Certificate2 (keyPath, "notasecret", X509KeyStorageFlags.Exportable);  var credentials = new ServiceAccountCredential (новый ServiceAccountCredential.Initializer (accountEmailAddress) {Scopes = new [] {AnalyticsService.Scope.AnalyticsReadonly}} .FromCertificate (сертификат));  Служба = новая служба аналитики (новая служба BaseClientService.Initializer () {HttpClientInitializer = учетные данные, ApplicationName = "WorthlessVariable"});  } общедоступные AnalyticDataPoint GetAnalyticsData (строковый profileId, строковые [] измерения, строковые [] показатели, DateTime startDate, DateTime endDate) {AnalyticDataPoint data = new AnalyticDataPoint ();  если (! profileId.Contains ("ga:")) profileId = string.Format ("ga: {0}", profileId); //Первоначальный вызов службы. //Затем проверяем, существует ли следующая ссылка в ответе,//если это так, анализируем и вызываем снова, используя параметр начального индекса. GaData response = null;  сделать {int startIndex = 1;  if (response! = null &&! string.IsNullOrEmpty (response.NextLink)) {Uri uri = new Uri (response.NextLink);  var paramerters = uri.Query.Split ('&');  строка s = paramerters.First (i => i.Contains ("start-index")). Split ('=') [1];  startIndex = int.Parse (s);  } var request = BuildAnalyticRequest (profileId, размеры, метрики, startDate, endDate, startIndex);  ответ = запрос.Execute ();  data.ColumnHeaders = response.ColumnHeaders;  data.Rows.AddRange (response.Rows);  } while (! string.IsNullOrEmpty (response.NextLink));  вернуть данные;  } private DataResource.GaResource.GetRequest BuildAnalyticRequest (string profileId, string [] sizes, string [] metrics, DateTime startDate, DateTime endDate, int startIndex) {DataResource.GaResource.GetRequest request = Service.Data.Ga.Get (profileId  .ToString ("гггг-ММ-дд"), endDate.ToString ("гггг-ММ-дд"), string.Join (",", метрики));  request.Dimensions = string.Join (",", размеры);  request.StartIndex = startIndex;  запрос на возврат;  } public IList  GetAvailableProfiles () {var response = Service.Management.Profiles.List ("~ все", "~ все"). Execute ();  return response.Items;  } открытый класс AnalyticDataPoint {public AnalyticDataPoint () {Rows = new List > ();  } общедоступный IList  ColumnHeaders {получить;  набор;  } public List > Rows {get;  набор;  }}}  

Другие ссылки, которые могут оказаться полезными:

Analytic API Explorer — API запросов из Интернета

Analytic API Explorer версии 2 — API запросов из Интернета

Справочник по измерениям и показателям

Надеюсь, это поможет кому-то, кто пытается это сделать в будущем.

24


Этот ответ для тех из вас, кто хочет получить доступ к своей учетной записи Google Analytics и использовать новую версию Analytics Reporting API v4.

Недавно я написал в блоге сообщение о том, как получить данные Google Analytics с помощью C #. Прочтите там все подробности.

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

После создания загрузите файл JSON и вставьте его в ваш проект (я поместил свой в свою папку App_Data ).

Затем установите пакет Nuget Google.Apis.AnalyticsReporting.v4. Также установите Newtonsoft Json.NET.

Включите этот класс где-нибудь в вашем проекте:

  открытый класс PersonalServiceAccountCred {общедоступный строковый тип {get;  набор;  } публичная строка project_id {получить;  набор;  } публичная строка private_key_id {получить;  набор;  } публичная строка private_key {получить;  набор;  } общедоступная строка client_email {получить;  набор;  } общедоступная строка client_id {получить;  набор;  } публичная строка auth_uri {получить;  набор;  } публичная строка token_uri {получить;  набор;  } публичная строка auth_provider_x509_cert_url {get;  набор;  } общедоступная строка client_x509_cert_url {get;  набор;  }}  

И вот чего вы так долго ждали: полный пример!

  string keyFilePath = Server.MapPath (  "~/App_Data/Your-API-Key-Filename.json"); string json = System.IO.File.ReadAllText (keyFilePath); var cr = JsonConvert.DeserializeObject (json); var xCred = new ServiceAccountCredential (новый ServiceAccountCredential.  Инициализатор (cr.client_email) {Scopes = new [] {AnalyticsReportingService.Scope.Analytics}}. FromPrivateKey (cr.private_key)); using (var svc = new AnalyticsReportingService (new BaseClientService.Initializer {HttpClientInitializer = xCred, Application  Имя вашего приложения] "})) {//Создайте объект DateRange.  DateRange dateRange = новый DateRange () {StartDate = "2017-05-01", EndDate = "2017-05-31"}; //Создаем объект Metrics.  Показатели сессий = новая метрика {Expression = "ga: sessions", Alias ​​= "Sessions"}; //Создаем объект Dimensions.  Браузер измерения = новое измерение {Name = "ga: browser"}; //Создаем объект ReportRequest.  ReportRequest reportRequest = new ReportRequest {ViewId = "[ViewId в вашем аккаунте]", DateRanges = new List () {dateRange}, Dimensions = new List () {browser}, Metrics = new List () {sessions}};  Список запросов = новый список ();  request.Add (reportRequest); //Создаем объект GetReportsRequest.  GetReportsRequest getReport = новый GetReportsRequest () {ReportRequests = requests}; //Вызов метода batchGet.  GetReportsResponse response = svc.Reports.BatchGet (getReport) .Execute ();}  

Мы начинаем с десериализации информации о ключе учетной записи службы из файла JSON и преобразования ее в формат PersonalServiceAccountCred . Затем мы создаем ServiceAccountCredential и подключаемся к Google через AnalyticsReportingService . Затем, используя эту службу, мы подготавливаем некоторые базовые фильтры для передачи в API и отправки запроса.

Вероятно, лучше всего установить точку останова в строке, где находится ответ объявлена ​​переменная, нажмите F10 один раз, затем наведите указатель мыши на переменную, чтобы увидеть, какие данные доступны для использования в ответе.

3


Я надеялся просто добавить комментарий к ответу для v3 Beta, но точки репутации мешают этому. Однако я подумал, что было бы неплохо, если бы другие получили эту информацию, поэтому вот она:

  с использованием Google.Apis.Authentication.OAuth2; с использованием Google.Apis.Authentication.OAuth2  .DotNetOpenAuth; using System.Security.Cryptography.X509Certificates; using Google.Apis.Services;  

Эти пространства имен используются во всем коде в этом сообщении. Я всегда хочу, чтобы люди чаще публиковали пространства имен, я, кажется, трачу много времени на их поиск. Я надеюсь, что это сэкономит некоторым людям несколько минут работы.

0


Я установил что-то очень похожее на ответ выше в пакете nuGet. Он выполняет следующие действия: — подключается к «учетной записи службы», которую вы настроили в консоли API — извлекает любые данные Google Analytics, которые вы хотите — отображает эти данные с помощью Google Charts API, и все это очень легко изменить. . Вы можете увидеть больше здесь: https://www.nuget.org/packages/GoogleAnalytics.GoogleCharts.NET/.


Надеюсь, что когда-нибудь Google предоставит надлежащую документацию. Здесь я перечисляю все шаги по интеграции аутентификации на стороне сервера Google Analytics в ASP.NET C #.

Шаг 1. Создайте проект в консоли Google

Перейдите по ссылке https://console.developers.google.com/iam-admin/projects и создайте проект, нажав кнопку «Создать проект», укажите имя проекта во всплывающем окне и отправьте его. .

Шаг 2: Создайте учетные данные и учетную запись службы

После создания проекта вы будете перенаправлены в «API Manager «страница. Щелкните учетные данные и нажмите кнопку» Создать учетные данные «. выберите «ключ учетной записи службы» из раскрывающегося списка, вы будете перенаправлены на следующую страницу. В раскрывающемся списке учетной записи службы выберите «Новая учетная запись службы». Введите имя учетной записи службы и загрузите ключ p12. Он будет иметь расширение p12. вы получите всплывающее окно с паролем « notasecret «, который установлен по умолчанию, и ваш закрытый ключ будет загружен.

Шаг 3: Создайте 0auth идентификатор клиента

щелкните раскрывающееся меню «Создать учетные данные» и выберите «Идентификатор клиента 0auth», вы будете перенаправлены на вкладку «Экран согласия 0auth». укажите случайное имя в текстовом поле имени проекта. выберите тип приложения как «Веб-приложение» и нажмите кнопку «Создать». Скопируйте сгенерированный идентификатор клиента в блокнот.

Шаг 4. Включите API

Слева нажмите » Обзор «и выберите» Включенные API «на горизонтальной вкладке. В строке поиска найдите «Analytics API», щелкните раскрывающийся список и нажмите кнопку «Включить».. Теперь снова найдите «Analytics Reporting V4» и включите его.

Шаг 5. Установите пакеты nuget

В Visual Studio Перейдите в Инструменты> Диспетчер пакетов Nuget> Консоль диспетчера пакетов. Скопируйте и вставьте приведенный ниже код в консоль, чтобы установить пакеты nuget.

Install-Package Google.Apis.Analytics.v3

Install-Package DotNetOpenAuth.Core -Version 4.3.4.13329

Два вышеуказанных пакета — это Google Analytics и Пакеты DotNetOpenAuth nuget.

Шаг 6. Предоставьте разрешение «Просмотр и анализ» учетной записи службы

Перейдите в учетную запись Google Analytics и перейдите на вкладку «Администратор» и выберите «Управление пользователями» в меню слева, выберите домен, в котором вы хотите получить доступ к аналитическим данным, вставьте под ним идентификатор электронной почты учетной записи службы и выберите разрешение «Чтение и анализ» из раскрывающегося списка. Идентификатор электронной почты служебного аккаунта выглядит так: googleanalytics@googleanalytics.iam.gserviceaccount.com .

Рабочий код

КОД ФРОНТАЛЬНОГО КОНЦА:

Скопируйте и вставьте приведенный ниже скрипт встраивания аналитики в свой интерфейс, иначе вы можете получить этот код из Google Analytics. также страницу документации.

   (function (w, d, s, g, js, fs) {g = w.gapi || (w.gapi = {  }); g.analytics = {q: [], ready: function (f) {this.q.push (f);}}; js = d.createElement (s); fs = d.getElementsByTagName (s) [  0]; js.src = 'https://apis.google.com/js/platform.js'; fs.parentNode.insertBefore (js, fs); js.onload = function () {g.load ('analytics  ');};} (окно, документ,' скрипт '));   

Вставьте приведенный ниже код в тег тела вашей передней страницы.

   
var access_token = document.getElemen tById (''). значение; gapi.analytics.ready (function () {/** * Авторизуйте пользователя с токеном доступа, полученным на стороне сервера. */gapi.analytics.auth.authorize ({'serverAuth': {'access_token': access_token}}); /** * Создает новый экземпляр DataChart, показывающий сеансы. * Он будет отображаться внутри элемента с идентификатором «chart-1-container». */Var dataChart1 = new gapi.analytics.googleCharts.DataChart ({query: {' ids ':' ga: 53861036 ',//VIEW ID <- перейдите в свою учетную запись Google Analytics и выберите домен, данные аналитики которого вы хотите отображать на своей веб-странице. Из URL-адреса, например: a507598w53044903p53861036. Скопируйте цифры после "p". Это ваш идентификатор представления 'start-date': '2016-04-01', 'end-date': '2016-04-30', 'metrics': 'ga: sessions', 'sizes': 'ga: дата '}, диаграмма: {' контейнер ':' диаграмма-1-контейнер ',' тип ':' ЛИНИЯ ',' параметры ': {' ширина ':' 100% '}}}); dataChart1.execute (); /** * Создает новый экземпляр DataChart, показывающий 5 самых популярных демонстраций/инструментов * только среди вернувшихся пользователей. * Он будет отображаться внутри элемента с идентификатором "диаграмма-3-контейнер". */});

Вы также можете получить свой идентификатор представления из https://ga-dev-tools.appspot.com/account-explorer/

КОД ЗАВЕРШЕНИЯ:

  using System;  using System.Linq;  using System.Collections.Generic;  using System.Collections.Specialized;  с использованием System.Web.Script.Serialization;  используя System.Net;  using System.Text;  с помощью Google.Apis.Analytics.v3;  с использованием Google.Apis.Analytics.v3.Data;  с помощью Google.Apis.Services;  using System.Security.Cryptography.X509Certificates;  с помощью Google.Apis.Auth.OAuth2;  с помощью Google.Apis.Util;  с использованием DotNetOpenAuth.OAuth2;  с использованием System.Security.Cryptography;  пространство имен googleAnalytics {общедоступный api частичного класса: System.Web.UI.Page {общедоступная константная строка SCOPE_ANALYTICS_READONLY = "https://www.googleapis.com/auth/analytics.readonly";  строка ServiceAccountUser = "googleanalytics@googleanalytics.iam.gserviceaccount.com"; //строка идентификатора электронной почты сервисного аккаунта keyFile = @ "D:  key.p12"; //ссылка файла на загруженный ключ с расширением p12 protected void Page_Load (объект-отправитель, EventArgs e) {string Token = Convert.ToString (GetAccessToken (ServiceAccountUser, keyFile, SCOPE_ANALYTICS_READONLY));  accessToken.Value = Токен;  var certificate = new X509Certificate2 (keyFile, «notasecret», X509KeyStorageFlags.Exportable);  var credentials = new ServiceAccountCredential (новый ServiceAccountCredential.Initializer (ServiceAccountUser) {Scopes = new [] {AnalyticsService.Scope.AnalyticsReadonly}} .FromCertificate (сертификат));  var service = new AnalyticsService (new BaseClientService.Initializer () {HttpClientInitializer = credentials, ApplicationName = "Google Analytics API"});  строка profileId = "ga: 53861036";  строка startDate = "2016-04-01";  строка endDate = "2016-04-30";  string metrics = "ga: sessions, ga: users, ga: pageviews, ga: bounceRate, ga: sessions";  DataResource.GaResource.GetRequest request = service.Data.Ga.Get (profileId, startDate, endDate, metrics);  Данные GaData = request.Execute ();  Список  ColumnName = новый список  ();  foreach (var h в data.ColumnHeaders) {ColumnName.Add (h.Name);  } List  values ​​= new List  ();  foreach (переменная строка в data.Rows) {foreach (переменная элемент в строке) {values.Add (Convert.ToDouble (элемент));  }} values ​​[3] = Math.Truncate (100 * values ​​[3])/100;  txtSession.Text = значения [0] .ToString ();  txtUsers.Text = значения [1]. Нанизывать();  txtPageViews.Text = значения [2] .ToString ();  txtBounceRate.Text = значения [3] .ToString ();  txtVisits.Text = значения [4] .ToString ();  } общедоступный статический динамический GetAccessToken (строка clientIdEMail, строка keyFilePath, область действия строки) {//сертификат var certificate = new X509Certificate2 (keyFilePath, "notasecret"); //заголовок var header = new {typ = "JWT", alg = "RS256"}; //набор требований var times = GetExpiryAndIssueDate ();  var Claimset = new {iss = clientIdEMail, scope = scope, aud = "https://accounts.google.com/o/oauth2/token", iat = times [0], exp = times [1],};  JavaScriptSerializer ser = новый JavaScriptSerializer (); //закодированный заголовок var headerSerialized = ser.Serialize (header);  var headerBytes = Encoding.UTF8.GetBytes (headerSerialized);  var headerEncoded = Convert.ToBase64String (headerBytes); //закодированный набор утверждений var ClaimsetSerialized = ser.Serialize (Claimset);  var ClaimsetBytes = Encoding.UTF8.GetBytes (ClaimsetSerialized);  var ClaimsetEncoded = Convert.ToBase64String (ClaimsetBytes); //ввод var input = headerEncoded + "."  + claimsetEncoded;  var inputBytes = Encoding.UTF8.GetBytes (ввод); //подпись var rsa = certificate.PrivateKey as RSACryptoServiceProvider;  var cspParam = new CspParameters {KeyContainerName = rsa.CspKeyContainerInfo.KeyContainerName, KeyNumber = rsa.CspKeyContainerInfo.KeyNumber == KeyNumber.Exchange?  1: 2};  вар aescsp = новый RSACryptoServiceProvider (cspParam) {PersistKeyInCsp = false};  var signatureBytes = aescsp.SignData (inputBytes, «SHA256»);  var signatureEncoded = Convert.ToBase64String (signatureBytes); //jwt var jwt = headerEncoded + "."  + claimsetEncoded + "."  + signatureEncoded;  var client = new WebClient ();  client.Encoding = Encoding.UTF8;  var uri = "https://accounts.google.com/o/oauth2/token";  var content = new NameValueCollection ();  содержание ["утверждение"] = jwt;  content ["grant_type"] = "urn: ietf: params: oauth: grant-type: jwt-bearer";  строковый ответ = Encoding.UTF8.GetString (client.UploadValues ​​(uri, «POST», content));  var result = ser.Deserialize  (ответ);  объект вытащилObject = null;  строковый токен = "токен_доступа";  если (результат.ContainsKey (токен)) {pullObject = результат [токен];  }//возвращаем результат;  return pullObject;  } private static int [] GetExpiryAndIssueDate () {var utc0 = new DateTime (1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);  var issueTime = DateTime.UtcNow;  var iat = (int) issueTime.Subtract (utc0) .TotalSeconds;  var exp = (int) issueTime.AddMinutes (55) .Subtract (utc0). TotalSeconds;  return new [] {iat, exp};  }}}  

1


Другой рабочий подход

Добавьте приведенный ниже код в ConfigAuth

  var googleApiOptions = new GoogleOAuth2AuthenticationOptions  () {AccessType = "offline",//можно использовать, только если требуется ClientId = ClientId, ClientSecret = ClientSecret, Provider = new GoogleOAuth2AuthenticationProvider () {OnAuthenticated = context => {context.Identity.AddClaim (new Claim ("Google_AccessToken",  context.AccessToken));  если (context.RefreshToken! = null) {context.Identity.AddClaim (новое утверждение ("GoogleRefreshToken", context.RefreshToken));  } context.Identity.AddClaim (новое утверждение ("GoogleUserId", context.Id));  context.Identity.AddClaim (новое утверждение ("GoogleTokenIssuedAt", DateTime.Now.ToBinary (). ToString ()));  var expiresInSec = 10000;  context.Identity.AddClaim (новое утверждение ("GoogleTokenExpiresIn", expiresInSec.ToString ()));  вернуть Task.FromResult (0);  }}, SignInAsAuthenticationType = DefaultAuthenticationTypes.ApplicationCookie};  googleApiOptions.Scope.Add ("openid"); //Нужно добавить для google + googleApiOptions.Scope.Add ("profile");//Нужно добавить для google + googleApiOptions.Scope.Add ("email");//Нужно добавить для google + googleApiOptions.Scope.Add ("  https://www.googleapis.com/auth/analytics.readonly ");  app.UseGoogleAuthentication (googleApiOptions);  

Добавьте ниже код, пространства имен и относительные ссылки

  с помощью Google.Apis.Analytics.  v3;  с использованием Google.Apis.Analytics.v3.Data;  с помощью Google.Apis.Auth.OAuth2;  с помощью Google.Apis.Auth.OAuth2.Flows;  с помощью Google.Apis.Auth.OAuth2.Responses;  с помощью Google.Apis.Services;  с использованием Microsoft.AspNet.Identity;  с помощью Microsoft.Owin.Security;  используя Систему;  using System.Threading.Tasks;  using System.Web;  с использованием System.Web.Mvc; открытый класс HomeController: Controller {служба AnalyticsService;  общедоступный IAuthenticationManager AuthenticationManager {получить {вернуть HttpContext.GetOwinContext (). Аутентификация;  }} общедоступная асинхронная задача  AccountList () {service = new AnalyticsService (new BaseClientService.Initializer () {HttpClientInitializer = await GetCredentialForApiAsync (), ApplicationName = "Analytics API sample",}); //Управление списком учетных записейResource.AccountsResource.ListRequest AccountListRequest = service.Management.Accounts.List (); //service.QuotaUser = "MyApplicationProductKey";  Аккаунты AccountList = AccountListRequest.Execute ();  return View ();  } приватная асинхронная задача  GetCredentialForApiAsync () {var initializer = new GoogleAuthorizationCodeFlow.Initializer {ClientSecrets = new ClientSecrets {ClientId = ClientId, ClientSecret = ClientSecret,}, Scopes = new [] {"https://www.googleapis.com /auth/analytics. readonly "}}; var flow = new GoogleAuthorizationCodeFlow (инициализатор); var identity = await AuthenticationManager.GetExternalIdentityAsync (DefaultAuthenticationTypes.ApplicationCookie); if (identity == null) {Redirect ("/Account/Login ");} var userId = identity  .FindFirstValue ("GoogleUserId"); var token = new TokenResponse () {AccessToken = identity.FindFirstValue ("Google_AccessToken"), RefreshToken = identity.FindFirstValue ("GoogleRefreshToken"), Issued = DateTime.FromBinary (identity.  FindFirstValue ("GoogleTokenIssuedAt"))), ExpiresInSeconds = long.Parse (identity.FindFirstValue ("GoogleTokenExpiresIn")),}; вернуть новый UserCredential (flow, userId, token);}}  

Добавьте это в Application_Start () в Global.asax

  AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;  



/java-analytics-data

Я v стандартный клиент для данных аналитики.

  • Документация по продукту
  • Документация клиентской библиотеки

Примечание. Работа над этим клиентом еще не завершена, и иногда он может делать обратную работу. несовместимые изменения.

Быстрый запуск

Если вы используете Maven, добавьте это в свой файл pom.xml:

   com.google.analytics   google-analytics-data  0.5.4 

Если вы используете Gradle без спецификации, добавьте это в свои зависимости

 compile 'com.google.analytics:google-analytics-data:  0.5.4 '

Если вы используете SBT, добавьте это в свои зависимости

 libraryDependencies + = "com.google.  analytics "%" google-analytics-data "%" 0.5.4 "

Аутентификация

См. раздел Аутентификация в README базового каталога.

Получение S tarted

Предварительные требования

Вам понадобится проект консоли Google Cloud Platform с включенным API данных Google Analytics. Для использования данных Google Analytics необходимо включить выставление счетов. Следуйте этим инструкциям. инструкции по настройке вашего проекта. Вам также потребуется настроить локальную среду разработки, установив Google Cloud SDK и выполнив следующие команды в командной строке: gcloud auth login и gcloud config set project [ВАШ ПРОЕКТ ID] .

Установка и настройка

Вам понадобится библиотека google-analytics-data . См. Раздел «Быстрый старт», чтобы добавить google-analytics-data в качестве зависимости в код.

О данных Google Analytics

Данные Google Analytics предоставляют программные методы для доступа к данным отчета в Google Analytics App + Web ресурсов.

См. документацию по клиентской библиотеке данных Analytics, чтобы узнать, как использовать эту клиентскую библиотеку данных Analytics.

Примеры

Примеры находятся в разделе samples/ каталог. README.md образцов содержит инструкции по запуску образцов.

Sample Исходный код Попробуйте
Образец быстрого старта исходный код

Устранение неполадок

Чтобы получить помощь, следуйте инструкциям в общем документе по устранению неполадок.

Транспорт

Данные Google Analytics используют gRPC для транспортного уровня.

Версии Java

Для использования этого клиента требуется Java 7 или выше.

Управление версиями

Эта библиотека следует за семантическим управлением версиями.

В настоящее время она находится в нулевой основной версии ( 0.yz ), что означает что что-либо может измениться в любое время, и общедоступный API не следует считать стабильным.

Содействие

Вклад в эту библиотеку всегда приветствуется и настоятельно рекомендуется.

Дополнительную информацию о том, как начать работу, см. в разделе ВКЛАД.

Обратите внимание, что этот проект выпущен с Кодексом поведения для авторов. Участвуя в этом проекте, вы соглашаетесь соблюдать его условия. Для получения дополнительной информации см. Кодекс поведения.

Лицензия

Apache 2.0 - см. ЛИЦЕНЗИЮ для получения дополнительной информации.

Статус CI

Версия Java Статус
Java 7
Java 8
Java 8 OSX
Java 8 Windows
Java 11

Java является зарегистрированным товарным знаком Oracle и/или ее дочерних компаний.

Оцените статью
clickpad.ru
Добавить комментарий