استفاده از نگارش سوم Google Analytics API در سرویسهای ویندوز یا برنامههای وب
نویسنده: وحید نصیری
تاریخ: ۱۳۹۳/۰۲/۲۴ ۷:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
PM> Install-Package Google.Apis PM> Install-Package Google.Apis.auth PM> Install-Package Google.Apis.Analytics.v3
using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Analytics.v3;
using Google.Apis.Analytics.v3.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
namespace GoogleAnalyticsAPIv3Tests
{
public class AnalyticsQueryParameters
{
public DateTime Start { set; get; }
public DateTime End { set; get; }
public string Dimensions { set; get; }
public string Filters { set; get; }
public string Metrics { set; get; }
}
public class AnalyticsAuthentication
{
public Uri SiteUrl { set; get; }
public string ApplicationName { set; get; }
public string ServiceAccountEmail { set; get; }
public string KeyFilePath { set; get; }
public string KeyFilePassword { set; get; }
public AnalyticsAuthentication()
{
KeyFilePassword = "notasecret";
}
}
public class GoogleAnalyticsApiV3
{
public AnalyticsAuthentication Authentication { set; get; }
public AnalyticsQueryParameters QueryParameters { set; get; }
public GaData GetData()
{
var service = createAnalyticsService();
var profile = getProfile(service);
var query = service.Data.Ga.Get("ga:" + profile.Id,
QueryParameters.Start.ToString("yyyy-MM-dd"),
QueryParameters.End.ToString("yyyy-MM-dd"),
QueryParameters.Metrics);
query.Dimensions = QueryParameters.Dimensions;
query.Filters = QueryParameters.Filters;
query.SamplingLevel = DataResource.GaResource.GetRequest.SamplingLevelEnum.HIGHERPRECISION;
return query.Execute();
}
private AnalyticsService createAnalyticsService()
{
var certificate = new X509Certificate2(Authentication.KeyFilePath, Authentication.KeyFilePassword, X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(Authentication.ServiceAccountEmail)
{
Scopes = new[] { AnalyticsService.Scope.AnalyticsReadonly }
}.FromCertificate(certificate));
return new AnalyticsService(new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = Authentication.ApplicationName
});
}
private Profile getProfile(AnalyticsService service)
{
var accountListRequest = service.Management.Accounts.List();
var accountList = accountListRequest.Execute();
var site = Authentication.SiteUrl.Host.ToLowerInvariant();
var account = accountList.Items.FirstOrDefault(x => x.Name.ToLowerInvariant().Contains(site));
var webPropertyListRequest = service.Management.Webproperties.List(account.Id);
var webPropertyList = webPropertyListRequest.Execute();
var sitePropertyList = webPropertyList.Items.FirstOrDefault(a => a.Name.ToLowerInvariant().Contains(site));
var profileListRequest = service.Management.Profiles.List(account.Id, sitePropertyList.Id);
var profileList = profileListRequest.Execute();
return profileList.Items.FirstOrDefault(a => a.Name.ToLowerInvariant().Contains(site));
}
}
} using System;
using System.Collections.Generic;
using System.Linq;
namespace GoogleAnalyticsAPIv3Tests
{
class Program
{
static void Main(string[] args)
{
var statistics = new GoogleAnalyticsApiV3
{
Authentication = new AnalyticsAuthentication
{
ApplicationName = "My Project",
KeyFilePath = "811e1d9976cd516b55-privatekey.p12",
ServiceAccountEmail = "10152bng4j3mq@developer.gserviceaccount.com",
SiteUrl = new Uri("https://www.dntips.ir/")
},
QueryParameters = new AnalyticsQueryParameters
{
Start = DateTime.Now.AddDays(-7),
End = DateTime.Now,
Dimensions = "ga:date",
Filters = null,
Metrics = "ga:users,ga:sessions,ga:pageviews"
}
}.GetData();
foreach (var result in statistics.TotalsForAllResults)
{
Console.WriteLine(result.Key + " -> total:" + result.Value);
}
Console.WriteLine();
foreach (var row in statistics.ColumnHeaders)
{
Console.Write(row.Name + "\t");
}
Console.WriteLine();
foreach (var row in statistics.Rows)
{
var rowItems = (List<string>)row;
Console.WriteLine(rowItems.Aggregate((s1, s2) => s1 + "\t" + s2));
}
Console.ReadLine();
}
}
} System.Security.Cryptography.CryptographicException: An internal error occurred
Server.MapPath("~/folder/" + filename)
var certificate = new X509Certificate2(Authentication.KeyFilePath, Authentication.KeyFilePassword, X509KeyStorageFlags.Exportable);
var certificate = new X509Certificate2(Authentication.KeyFilePath, Authentication.KeyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
Could not load type 'System.Net.HttpStatusCode' from assembly System.Net
Line 77: var webPropertyListRequest = service.Management.Webproperties.List(account.Id); Object reference not set to an instance of an object.
var account = accountList.Items.FirstOrDefault(x => x.Name.ToLowerInvariant().Contains(site));
ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)