Как получить данные отчета Google Analytics с помощью v3 их .NET api?
Я пытаюсь получить отчеты Google Analytics с помощью предоставленной .NET api и действительно почесываю голову над тем, как я действительно извлекаю что-либо, используя самую новую версию v3, которая доступна здесь: http://code.google.com/apis/analytics/docs/gdata/v3/gdataLibraries.html
Например, я хотел бы получить запрос отчета, подобный этому: https://www.google.com/analytics/feeds/data?dimensions=ga:browser&end-date=2012-01-25&ids=ga:ACCOUNTID&metrics=ga:visits&start-date=2011-12-25
Я могу легко получать отчеты, используя версию 2, которая использует GData, но надеялась, что версия 3 будет в случае, если версия 2 устарела, но с большим количеством проблем, поскольку значительная документация кажется устаревшей или -existant, и я не смог найти никаких примеров.
Ответы
Ответ 1
Мы только что обновили нашу службу аналитики, чтобы использовать v3.0 API, поскольку v2.3 теперь устарел, есть руководство по миграции в google https://developers.google.com/analytics/resources/articles/gdata-migration-guide, которые могут помочь.
Я попытался использовать API-интерфейс google dotnet API http://code.google.com/p/google-api-dotnet-client/, который поддерживает v3, но отказался от отсутствия документации и образцов. Мы вызываем api через net.httpwebrequest, который был проще, чем пытаться выяснить, что происходит в API.
Для v3 ваш вызов должен быть
https://www.googleapis.com/analytics/v3/data/ga?dimensions=ga:browser&end-date=2012-01-25&ids=ga:ACCOUNTID&metrics=ga:visits&start-date=2011-12-25
Ответ 2
Теперь это возможно и легко сделать с последней версией .NET API (v1.3.0.15233). Нет примера, хотя это было выпущено, но вы можете использовать образец задачи в качестве шаблона для запроса данных GA.
Здесь вам нужно добавить/изменить, чтобы этот примерный проект работал для GA.
Объявить экземпляр AnalyticsService
private static AnalyticsService _analyticsService;
Измените область на Scopes.Analytics
В методе GetAuthorization
объявлена переменная scope
. Измените его
string scope = TasksService.Scopes.TasksReadonly.GetStringValue();
к
string scope = AnalyticsService.Scopes.Analytics.GetStringValue();
Инициализировать службу GA
if (_analyticsService == null)
{
_analyticsService = new AnalyticsService(new BaseClientService.Initializer()
{
Authenticator = _authenticator = CreateAuthenticator();
});
}
Выполнение запроса
Вот как вы можете запросить профиль GA
// make a request
var request = _analyticsService.Data.Ga.Get(
"ga:12345678",
"2013-01-01",
"2013-05-08",
"ga:visits,ga:bounces,ga:timeOnSite,ga:avgTimeOnSite");
// run the request and get the data
var data = request.Fetch();
Вы заметите, что для GetRequest
существует четыре обязательных аргумента, аналогичных тем, которые определены в API Doc. Вы можете посетить проводник запросов, чтобы узнать действительные показатели, которые будут использоваться с .NET API.
Ответ 3
После нескольких дней поиска доступ к Analitycs - это консольная проектная среда 3.5.
* У вас есть проект Google API Console с включенной службой API Analytics.
* В Simple API Access необходимо создать новый ключ для идентификатора клиента для установленных приложений.
* Загрузите и добавьте ссылку на Google.Apis.Analytics.v3.dll
* Загрузите и добавьте ссылку на Google.Apis.Authentication.OAuth2.dll
* Загрузите и добавьте ссылку на Google.Apis.dll
* Загрузите и добавьте ссылку на Newtonsoft.Json.Net35.dll
* Загрузите и добавьте ссылку на DotNetOpenAuth.dll
И, наконец, реализовать следующий код:
private const string Scope = "https://www.googleapis.com/auth/analytics.readonly";
static void Main(string[] args)
{
try
{
var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description);
provider.ClientIdentifier = "Your_Client_ID";
provider.ClientSecret = "Your_Client_Secret";
var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthentication);
var asv = new AnalyticsService(auth);
var request = asv.Data.Ga.Get("ga:Your_TrackingID", "2013-08-05", "2013-08-05", "ga:visitors");
request.Dimensions = "ga:visitorType";
var report = request.Fetch();
var rows = report.Rows;
var newVisitors = rows[0];
var returnVisitors = rows[1];
Console.WriteLine(newVisitors[0] + ": " + newVisitors[1]);
Console.WriteLine(returnVisitors[0] + ": " + returnVisitors[1]);
int newV = Int32.Parse(newVisitors[1]);
int retV = Int32.Parse(returnVisitors[1]);
int sum = newV + retV;
Console.WriteLine("Total: " + sum);
}
catch(Exception ex){
Console.WriteLine("\n Error: \n" + ex);
Console.ReadLine();
}
}
private static IAuthorizationState GetAuthentication(NativeApplicationClient arg)
{
IAuthorizationState state = new AuthorizationState(new[] { Scope });
state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
Uri authUri = arg.RequestUserAuthorization(state);
System.Diagnostics.Process.Start(authUri.ToString());
Console.Write("Paste authorization code: ");
string authCode = Console.ReadLine();
return arg.ProcessUserAuthorization(authCode, state);
}
Надеюсь, что это поможет.
Ответ 4
Я опубликовал пошаговые инструкции о том, как это сделать здесь: API-интерфейс Google V3 Beta API.
Ответ 5
Дополнительный полный пример с учетной записью службы.
Установить пакет nuget Google.Apis.Analytics.v3.
//based on https://github.com/LindaLawton/Google-Dotnet-Samples/tree/master/Google-Analytics
using System;
using System.Threading.Tasks;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Analytics.v3;
using Google.Apis.Analytics.v3.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Util;
using System.Collections.Generic;
using Google.Apis.Services;
namespace GAImport
{
class Program
{
static void Main(string[] args)
{
string[] scopes = new string[] { AnalyticsService.Scope.AnalyticsReadonly };
var keyFilePath = @"path\to\key.p12";
var serviceAccountEmail = "[email protected]";
//loading the Key file
var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = scopes
}.FromCertificate(certificate));
var service = new AnalyticsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Analytics API Sample",
});
var request = service.Data.Ga.Get("ga:1234567", "30daysAgo", "yesterday", "ga:sessions");
request.MaxResults = 1000;
var result = request.Execute();
foreach (var headers in result.ColumnHeaders)
{
Console.WriteLine(String.Format("{0} - {1} - {2}", headers.Name, headers.ColumnType, headers.DataType));
}
foreach (List<string> row in result.Rows)
{
foreach (string col in row)
{
Console.Write(col + " ");
}
Console.Write("\r\n");
}
Console.ReadLine();
}
}
}