Как использовать служебную учетную запись для доступа к Google Analytics API V3 с помощью .NET C #?
Я понял, что этот вопрос уже задавался ранее, но с небольшим количеством примеров кода, поэтому я спрашиваю снова, но по крайней мере с небольшим количеством направления.
После нескольких часов поисков я придумал следующую частичную реализацию.
namespace GoogleAnalyticsAPITest.Console
{
using System.Security.Cryptography.X509Certificates;
using DotNetOpenAuth.OAuth2;
using Google.Apis.Analytics.v3;
using Google.Apis.Analytics.v3.Data;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
class Program
{
static void Main(string[] args)
{
log4net.Config.XmlConfigurator.Configure();
string Scope = Google.Apis.Analytics.v3.AnalyticsService.Scopes.Analytics.ToString().ToLower();
string scopeUrl = "https://www.googleapis.com/auth/" + Scope;
const string ServiceAccountId = "nnnnnnnnnnn.apps.googleusercontent.com";
const string ServiceAccountUser = "[email protected]";
AssertionFlowClient client = new AssertionFlowClient(
GoogleAuthenticationServer.Description, new X509Certificate2(@"7039572692013fc5deada350904f55bad2588a2a-privatekey.p12", "notasecret", X509KeyStorageFlags.Exportable))
{
Scope = scopeUrl,
ServiceAccountId = ServiceAccountId//,ServiceAccountUser = ServiceAccountUser
};
IAuthorizationState state = AssertionFlowClient.GetState(client);
AnalyticsService service = new AnalyticsService(authenticator);
string profileId = "ga:xxxxxxxx";
string startDate = "2010-10-01";
string endDate = "2010-10-18";
string metrics = "ga:visits";
DataResource.GaResource.GetRequest request = service.Data.Ga.Get(profileId, startDate, endDate, metrics);
request.Dimensions = "ga:date";
GaData data = request.Fetch();
}
}
}
У меня есть пара вопросов. Призыв кAssertionFlowClient.GetState(client)
приводит кinvalid_scope» ответ, как видно в журнале DotNetOpenAuth
2012-10-19 13: 27: 36,272 (GMT-4) [8] INFO DotNetOpenAuth - DotNetOpenAuth, версия = 4.0.0.11165, культура = нейтральная, PublicKeyToken = 2780ccd10d57b246 (официальная) 2012-10-19 13: 27: 36,284 ( GMT-4) [8] DEBUG DotNetOpenAuth.Messaging.Channel - Подготовка к отправке сообщения AssertionFlowMessage (2.0). 2012-10-19 13: 27: 36,294 (GMT-4) [8] INFO DotNetOpenAuth.Messaging.Channel - Подготовлено исходящее сообщение AssertionFlowMessage (2.0) дляhttps://accounts.google.com/o/oauth2/token: grant_type: assertion_type:http://oauth.net/grant_type/jwt/1.0/bearer утверждение: (куча закодированных символов идет сюда)
2012-10-19 13: 27: 36,296 (GMT-4) [8] DEBUG DotNetOpenAuth.Messaging.Channel - Отправка запроса AssertionFlowMessage. 2012-10-19 13: 27: 36 830 (GMT-4) [8] ОТЛАДКА DotNetOpenAuth.Http - HTTP POSThttps://accounts.google.com/o/oauth2/token 2012-10-19 13: 27: 36,954 (GMT-4) [8] ОШИБКА DotNetOpenAuth.Http - WebException fromhttps://accounts.google.com/o/oauth2/token: {"ошибка" : "invalid_scope "}
Я попытался указать один или оба из ServiceAccountId и ServiceAccountUser без удачи.
Во-вторых, даже если я получу IAuthorizationState, я не уверен, как получить IAuthenticator, который можно передать конструктору AnalyticsService.
Ниже приведен файл web.config, который я использую для включения ведения журнала DotNetOpenAuth.