Как использовать служебную учетную запись для доступа к 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.



  
    
    
    
      
      
      
      
    
  
  
    
      
      
      
      
      
      
      
        
      
    
    
      
        
      
    
    
    
      
      
      
    
    
    
      
    
  
  
    
    
    
    
    
    
    
    
  
  
    
  
  
  
  
    
  

Ответы на вопрос(5)

Ваш ответ на вопрос