2012-02-20 27 views
11

Tengo credenciales de una cuenta con acceso a Google Analytics,cuenta de servicio de Google Analytics OAuth AccessType = Desconectado C#

Estoy mirando para utilizar la API de informes Analytics http://code.google.com/apis/analytics/docs/gdata/home.html

he encontrado ejemplos que usan nombre de usuario/contraseña llamando a setUserCredentials, pero han visto comentarios, esto es menos seguro/tiene un límite de solicitud bajo (y no existe en el último cliente).

Más He visto ejemplos que usan oauth, pero requieren la interacción del usuario y otorgan acceso a la cuenta de usuario de Google.

Sin embargo, estoy buscando ejecutar un servicio que no requiera ninguna interacción del usuario y se conecte a una cuenta de google predefinida (no relacionada con el usuario que la está viendo).

Puedo almacenar los resultados en una base de datos y los usuarios finales pueden consultar los resultados de la base de datos.

He visto información sobre el uso de AccessType = Sin conexión la primera vez que inicias sesión, que luego devuelve un token de acceso y una etiqueta de actualización. http://code.google.com/apis/accounts/docs/OAuth2WebServer.html#offline

En mi ejemplo, el usuario final nunca iniciará sesión en la aplicación. ¿Podría tener una aplicación de administración separada que obtenga un token de actualización y almacene el token de actualización en la tabla config/lookup? Luego, la aplicación principal puede usar la extracción del token de actualización desde la tabla config/lookup, y obtener un token de acceso para poder consultar la cuenta de Google Analytics.

Estoy buscando un ejemplo de C# que use AccessType = Offline, y separe la obtención del token de actualización y utilice el token de actualización para obtener un token de acceso para consultar la cuenta de Google Analytics.

+0

¿Hola donde puede solucionar su problema? – koffe14

Respuesta

16

Cree su aplicación https://code.google.com/apis/console/

Para que la aplicación, activar el acceso a Google Analytics, y crear un cliente de OAuth 2.0 Identificación de su sitio web.

Examinar para:

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=YOUR_APP_ID.apps.googleusercontent.com&access_type=offline&scope=https://www.googleapis.com/auth/analytics.readonly&redirect_uri=HTTP://YOUR_CALL_BACK_URL 

Después de haber cambiado YOUR_APP_ID, YOUR_CALL_BACK_URL a los valores pertinentes.

Es importante incluir access_type = sin conexión.

Presione Otorgar acceso, esto lo redireccionará a HTTP://YOUR_CALL_BACK_URL?code=THIS_IS_YOUR_CODE. Copie el código en la URL.

Con el código, solicite el token de actualización mediante el símbolo CMD.

curl -d "code=THIS_IS_YOUR_CODE&client_id=YOUR_APP_ID.apps.googleusercontent.com&client_secret=YOUR_APPS_SECRET_CODE&redirect_uri=HTTP://YOUR_CALL_BACK_URL&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token 

Después de haber cambiado THIS_IS_YOUR_CODE, YOUR_APP_ID, YOUR_APPS_SECRET_CODE, YOUR_CALL_BACK_URL a los valores pertinentes.

Registre refresh_token devuelto.

descargar la última versión de las bibliotecas de informes centrales V3.0 .net http://code.google.com/p/google-api-dotnet-client/wiki/Downloads

Hay un error en la versión actual de Google.Apis.Analytics.v3.cs, para fijar esta copia el código en este archivo para su solución local (y no hacen referencia a Google.Apis.Analytics.v3.bin) http://code.google.com/p/google-api-dotnet-client/source/browse/Services/Google.Apis.Analytics.v3.cs?repo=samples&name=20111123-1.1.4344-beta

Y cambiar las dimensiones de una propiedad List<system.string> a un string.

O usted obtendrá un error como yo y este hombre hizo http://www.evolutiadesign.co.uk/blog/using-the-google-analytics-api-with-c-shar/

A continuación, puede utilizar la actualización de emergencia, que para generar un token de acceso sin interacción del usuario, y utilizar el token de acceso para ejecutar un informe en contra Google analitico.

using System; 
using DotNetOpenAuth.OAuth2; 
using Google.Apis.Authentication.OAuth2; 
using AnalyticsService = Google.Apis.Analytics.v3.AnalyticsService; 

class Program 
    { 
     public static void Main() 
     { 
      var client = new WebServerClient(GoogleAuthenticationServer.Description, "YOUR_APP_ID.apps.googleusercontent.com", "YOUR_APPS_SECRET_CODE"); 
      var auth = new OAuth2Authenticator<WebServerClient>(client, Authenticate); 
      var asv = new AnalyticsService(auth); 
      var request = asv.Report.Get("2012-02-20", "2012-01-01", "ga:visitors", "ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID"); 
      request.Dimensions = "ga:pagePath"; 
      request.Sort = "-ga:visitors"; 
      request.MaxResults = 5; 
      var report = request.Fetch(); 
      Console.ReadLine(); 
     } 

     private static IAuthorizationState Authenticate(WebServerClient client) 
     { 
      IAuthorizationState state = new AuthorizationState(new string[]{}) { RefreshToken = "REFRESH_TOKEN" }; 

      client.RefreshToken(state); 
      return state; 
     } 
    } 
+0

Ian, estoy atrapado en esta misma cosa. ¿Tiene un ejemplo completo y funcional por casualidad? –

+0

¿Qué modelo de cliente de OAuth se va a utilizar en este caso? Intenté con un Id de cliente para aplicaciones web y con el Id de cliente para las aplicaciones instaladas en vano ... – t3rse

+1

Me apetece utilizar el código que escribió, pero cuando intento compilarlo, falla. Me da la siguiente erorr: error \t \t 2 Argumento 1: no se puede convertir de 'Google.Apis.Authentication.OAuth2.OAuth2Authenticator ' a 'Google.Apis.Services.BaseClientService.Initializer' \t H: \ vs12 \ ManagementAPI \ ManagementAPI \ Models \ Value.cs ManagementAPI –

4

Gran respuesta Ian y me ayudó a ir en la dirección correcta, más que cualquier otra respuesta que pude encontrar en línea. Algo debe haber cambiado en el objeto AnalyticsService porque la línea:

var request = asv.Report.Get("2012-02-20", "2012-01-01", "ga:visitors", "ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID"); 

no funcionó para mí y tuve que usar la siguiente:

var request = asv.Data.Ga.Get("ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID", "2012-01-01", "2012-02-20", "ga:visitors"); 

Esperamos que esto ayudará a otros como su respuesta me ayudó. ¡Gracias!

1

La respuesta de Ian me ayudó mucho, pero seguí recibiendo un error al ejecutar el comando curl. Hizo algunas investigaciones y descubrió que los pasos para obtener el código de acceso y el token de actualización pueden ser más fáciles si va al https://code.google.com/oauthplayground/ y verifica la configuración de configuración de oAuth. Arriba a la derecha de la página hay un botón de configuración. seleccionado "Usar sus propias credenciales de OAuth". Puede obtener su código de acceso y solicitar un token de actualización desde aquí.

Espero que esto ayude.

0

Puede obtener manualmente un token de actualización desde OAuth Playground. Si usted está necesitando un token de actualización para una cuenta de servicio como estaba, asegúrese de

  1. Haga clic en la configuración de la derecha.
  2. Comprobar Utilice sus propias credenciales de OAuth
  3. de relleno en su ID de cliente y el secreto
  4. Cierre la configuración
  5. Haga clic en el botón Actualizar en el paso 2
  6. continuación, guarde el token de actualización para su uso en su aplicación
Cuestiones relacionadas