Ответ 1
Вызов API отчетов Google Analytics с С# не является особенно сложным, однако все необходимые шаги, как представляется, не очень четко изложены в документации API Google Analytics. Я попробую перечислить их всех здесь. Хотя YMMV, я считаю, что эти шаги должны быть правильными с 7/20/2016.
Вы можете начать с создания нового проекта С#. Мы создадим консольное приложение для тестирования под названием GoogleAnalyticsApiConsole
. После создания проекта мы добавим ссылку на Клиентскую библиотеку API-интерфейсов Google Analytics API V4 для .NET с помощью консоли управления пакетами NuGet (в меню "Сервис" ) в Visual Studio 2015). Запустите консоль и введите следующую команду в приглашении PM>
:
PM> Install-Package Google.Apis.AnalyticsReporting.v4
Установка этого пакета будет загружать клиентские библиотеки, необходимые для вызова веб-служб Google Analytics Reporting вместе с рядом других зависимостей.
Чтобы вызвать веб-службы, вам необходимо настроить доступ OAuth 2.0 для своего приложения. Документацию для этой установки можно найти здесь, но я опишу ниже:
-
Войдите в консоль Google Cloud Platform: https://console.cloud.google.com/. Обязательно войдите в аккаунт с учетной записью, которая имеет доступ к учетным записям Google Analytics, которые вы пытаетесь запросить с помощью API отчетов.
-
Выберите Облачная платформа Google и выберите Диспетчер API.
-
С левой стороны нажмите Credentials, а затем создайте новый проект под названием
Google Analytics API Console
. Дайте ему некоторое время для создания нового проекта. -
После создания проекта снова нажмите Credentials, если он еще не выбран, а затем нажмите ссылку OAuth Consent Screen на правой панели. Установите Имя продукта, показанное пользователям, на
Google Analytics API Console
, а затем нажмите "Сохранить". -
Нажмите Учетные данные снова, а затем нажмите Создать учетные данные и выберите Идентификатор клиента OAuth. Выберите Другое для Тип приложения, а затем введите
Google Analytics API Console
в качестве Имя и нажмите Создать. -
После создания учетных данных вам будет предоставлен идентификатор клиента и секрет клиента. Вы можете закрыть диалоговое окно.
-
Теперь под Credentials вы должны увидеть запись в OAuth 2.0 client ids. Нажмите значок загрузки в крайнем правом углу этой записи, чтобы загрузить файл
client_secret.json
(этот файл будет иметь гораздо более длинное имя). Добавьте этот файл в проект на корневом уровне после его загрузки и переименуйте его вclient_secret.json
.
- Теперь, когда учетные данные OAuth 2.0 были созданы, нам необходимо включить его для вызова API отчетов. Выберите Обзор и убедитесь, что на правой панели выбран API Google. В поле поиска введите
Reporting
и выберите из списка API отчетов Google Analytics V4. На следующем экране нажмите Включить. После того как этот API был включен, вы должны увидеть его в списке Enabled API на правой панели.
Теперь, когда мы создали наш проект и создали наши учетные данные OAuth 2.0, пришло время вызвать API отчетности 4. Приведенный ниже код будет использовать API Google и файл client_secret.json
для создания Google.Apis.Auth.OAuth2.UserCredential
для запроса API отчетов для всех сеансов между заданным диапазоном дат для представления. Код адаптирован из примера Java здесь.
Перед выполнением кода не забудьте установить Действие сборки в файле client_secret.json
на Контент и Копировать для параметра "Выходной каталог" на Копировать, если новый. Также есть две переменные, которые необходимо правильно установить. Во-первых, в методе GetCredential()
установите значение loginEmailAddress
на адрес электронной почты, используемый для создания учетных данных OAuth 2.0. Затем в методе Main
не забудьте установить ViewId
в переменной reportRequest
в представление, которое вы хотите запросить, используя API отчетов. Чтобы найти ViewId
, войдите в Google Analytics и выберите AdminВкладка. Оттуда выберите вид, который вы хотите запросить, в раскрывающемся списке Вид в правом углу и выберите Настройки просмотра. Просмотр ID будет отображаться в разделе Основные настройки.
При первом запуске кода он выведет веб-страницу с вопросом, хотите ли вы, чтобы Google Analytics API Console
имел доступ к данным API. Выберите Разрешить. С этого момента это разрешение будет храниться в GoogleAnalyticsApiConsole
FileDataStore
. Если этот файл будет удален, разрешение должно быть снова предоставлено. Этот файл можно найти в каталоге %APPDATA%\GoogleAnalyicsApiConsole
.
Обратите внимание, что я верю, что этот сценарий удовлетворит потребности ОП. Если это приложение должно быть распространено среди клиентов, то, скорее всего, потребуется другая схема 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"));
}
}
}
}