Sto provando a scrivere un'applicazione online per accedere ai miei dati di Google Analytics tramite un account di servizio di Google. Ecco il mio codice:Errore di risposta non valido durante il recupero dei dati di Google Analytics con un account di servizio in C# .NET
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace GA_server2server_POC.Models
{
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Analytics.v3;
using Google.Apis.Analytics.v3.Data;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
using Google.Apis.Util;
using Google.Apis.Services;
using Google.Apis.Requests;
public class Oauth_With_API
{
public static void ApiTest()
{
log4net.Config.XmlConfigurator.Configure();
const string ServiceAccountId = "xxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com";
const string ServiceAccountUser = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdeveloper.gserviceaccount.com";
AssertionFlowClient client = new AssertionFlowClient(
GoogleAuthenticationServer.Description, new X509Certificate2("C:\\Users\\rcarter\\Downloads\\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12", "notasecret", X509KeyStorageFlags.Exportable))
{
Scope = "https://www.googleapis.com/auth/analytics.readonly",
ServiceAccountId = ServiceAccountUser
};
OAuth2Authenticator<AssertionFlowClient> authenticator = new OAuth2Authenticator<AssertionFlowClient>(client, AssertionFlowClient.GetState);
AnalyticsService service = new AnalyticsService(new BaseClientService.Initializer()
{
Authenticator = authenticator
});
string profileId = "ga:xxxxxxxx";
string startDate = "2013-07-01";
string endDate = "2013-07-15";
string metrics = "ga:visits";
DataResource.GaResource.GetRequest request = service.Data.Ga.Get(profileId, startDate, endDate, metrics);
request.Dimensions = "ga:date";
GaData data = request.Execute(); //error occurs here. After this, thread exits.
Console.WriteLine(data.TotalResults);
}
}
}
Finora il mio codice viene eseguito, ma ottengo il seguente output:
WebDev.WebServer40.exe Information: 0 : DotNetOpenAuth, Version=4.0.0.11165, Culture=neutral, PublicKeyToken=2780ccd10d57b246 (official)
WebDev.WebServer40.exe Information: 0 : Preparing to send AssertionFlowMessage (2.0) message.
WebDev.WebServer40.exe Information: 0 : Sending AssertionFlowMessage request.
WebDev.WebServer40.exe Information: 0 : HTTP POST https://accounts.google.com/o/oauth2/token
WebDev.WebServer40.exe Information: 0 : The following required parameters were missing from the DotNetOpenAuth.OAuth2.Messages.AccessTokenFailedResponse message: {error,
}
WebDev.WebServer40.exe Information: 0 : Received UnauthorizedResponse response.
Dopo questo, il thread, e il programma si rifiuta di stampare qualsiasi dei dati. Il problema sembra verificarsi a request.Execute();
. La parte che trovo particolarmente confusa è che se metto un breakpoint su Console.WriteLine(data.TotalResults);
, posso vedere i dati che voglio nella variabile locale data
. Contiene tutto ciò che voglio stampare, ma non riesco a identificare la causa dell'errore impedendogli di fare qualcosa dopo request.Execute();
. Dopo molte ricerche, non ho trovato molto sull'errore sopra elencato.
Il codice che sto utilizzando si basa sulla risposta fornita a questa domanda here. Alcune cose sono cambiate nelle librerie di google analytics dato che la domanda è stata risolta, ma gran parte del mio codice è la stessa.
Ho controllato e ricontrollato tutte le variabili specifiche dell'account. Per verificarlo, lo sto eseguendo sul mio computer locale come applicazione Web ASP.NET MVC 4.
Qualsiasi aiuto o consiglio su come risolvere questo problema è apprezzato. Per favore fatemi sapere se posso fornire ulteriori informazioni che potrebbero aiutare. Grazie per aver letto.
E 'abbastanza easy.Problem è che non c'è molta documentazione/campioni sono disponibili qui. Ho persino convertito un po 'di codice java in .net equivalente poiché il campione era solo in java. Sto condividendo qualche codice che ho a disposizione localmente sul mio altro sistema. Faccio sapere se è d'aiuto o no. Altrimenti saprò inviarti un campione funzionante completo Grazie –