0

Quelqu'un a-t-il un exemple de code C# qu'il peut partager avec l'API Google.Apis.Analytics.v3 et l'authentification du serveur pour obtenir le nombre actuel d'utilisateurs sur mon site Web. J'ai un site Web interne MVC qui a un tableau de bord de support.API Google Analytics Realtime Client .Net

Il se connecte en mai différentes API pour rassembler des données utiles. J'ai reçu une demande pour ajouter le nombre d'utilisateurs actuellement sur notre site Web comme vu sur le portail Web Google Analytics. Je ne voulais pas que les utilisateurs se connectent individuellement avec un compte google, j'espérais pouvoir utiliser la méthode "ServiceCredentials" mais je me suis perdu.

Appréciez toute aide.

Merci

Répondre

0

Assurez-vous d'accorder accès à votre compte de service dans Google Analytics au niveau du compte.

Avertissement: Le quota sur l'API de Google Analytics est de 10000 requêtes par jour et par affichage. Si vous faites plus de 10000 demandes par jour, vous serez exclu. N'essayez pas d'actualiser souvent les données en temps réel, idéalement dans un script d'arrière-plan une fois par minute.

Auth:

/// <summary> 
    /// Authenticating to Google using a Service account 
    /// Documentation: https://developers.google.com/accounts/docs/OAuth2#serviceaccount 
    /// </summary> 
    /// <param name="serviceAccountEmail">From Google Developer console https://console.developers.google.com</param> 
    /// <param name="serviceAccountCredentialFilePath">Location of the .p12 or Json Service account key file downloaded from Google Developer console https://console.developers.google.com</param> 
    /// <returns>AnalyticsService used to make requests against the Analytics API</returns> 
    public static AnalyticsService AuthenticateServiceAccount(string serviceAccountEmail, string serviceAccountCredentialFilePath) 
    { 
     try 
     { 
      if (string.IsNullOrEmpty(serviceAccountCredentialFilePath)) 
       throw new Exception("Path to the service account credentials file is required."); 
      if (!File.Exists(serviceAccountCredentialFilePath)) 
       throw new Exception("The service account credentials file does not exist at: " + serviceAccountCredentialFilePath); 
      if (string.IsNullOrEmpty(serviceAccountEmail)) 
       throw new Exception("ServiceAccountEmail is required."); 

      // These are the scopes of permissions you need. It is best to request only what you need and not all of them 
      string[] scopes = new string[] { AnalyticsReportingService.Scope.Analytics };    // View your Google Analytics data 

      // For Json file 
      if (Path.GetExtension(serviceAccountCredentialFilePath).ToLower() == ".json") 
      { 
       GoogleCredential credential; 
       using (var stream = new FileStream(serviceAccountCredentialFilePath, FileMode.Open, FileAccess.Read)) 
       { 
        credential = GoogleCredential.FromStream(stream) 
         .CreateScoped(scopes); 
       } 

       // Create the Analytics service. 
       return new AnalyticsService(new BaseClientService.Initializer() 
       { 
        HttpClientInitializer = credential, 
        ApplicationName = "Analytics Service account Authentication Sample", 
       }); 
      } 
      else if (Path.GetExtension(serviceAccountCredentialFilePath).ToLower() == ".p12") 
      { // If its a P12 file 

       var certificate = new X509Certificate2(serviceAccountCredentialFilePath, "notasecret", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable); 
       var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail) 
       { 
        Scopes = scopes 
       }.FromCertificate(certificate)); 

       // Create the Analytics service. 
       return new AnalyticsService(new BaseClientService.Initializer() 
       { 
        HttpClientInitializer = credential, 
        ApplicationName = "Analytics Authentication Sample", 
       }); 
      } 
      else 
      { 
       throw new Exception("Unsupported Service accounts credentials."); 
      } 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Create service account AnalyticsService failed" + ex.Message); 
      throw new Exception("CreateServiceAccountAnalyticsFailed", ex); 
     } 
    } 
} 

Demande:

public static class RealtimeSample 
{ 

    public class RealtimeGetOptionalParms 
    { 
     /// A comma-separated list of real time dimensions. E.g., 'rt:medium,rt:city'. 
     public string Dimensions { get; set; } 
     /// A comma-separated list of dimension or metric filters to be applied to real time data. 
     public string Filters { get; set; } 
     /// The maximum number of entries to include in this feed. 
     public int Max-results { get; set; } 
     /// A comma-separated list of dimensions or metrics that determine the sort order for real time data. 
     public string Sort { get; set; } 

    } 

    /// <summary> 
    /// Returns real time data for a view (profile). 
    /// Documentation https://developers.google.com/analytics/v3/reference/realtime/get 
    /// Generation Note: This does not always build corectly. Google needs to standardise things I need to figuer out which ones are wrong. 
    /// </summary> 
    /// <param name="service">Authenticated analytics service.</param> 
    /// <param name="ids">Unique table ID for retrieving real time data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.</param> 
    /// <param name="metrics">A comma-separated list of real time metrics. E.g., 'rt:activeUsers'. At least one metric must be specified.</param> 
    /// <param name="optional">Optional paramaters.</param>  /// <returns>RealtimeDataResponse</returns> 
    public static RealtimeData Get(analyticsService service, string ids, string metrics, RealtimeGetOptionalParms optional = null) 
    { 
     try 
     { 
      // Initial validation. 
      if (service == null) 
       throw new ArgumentNullException("service"); 
      if (ids == null) 
       throw new ArgumentNullException(ids); 
      if (metrics == null) 
       throw new ArgumentNullException(metrics); 

      // Building the initial request. 
      var request = service.Realtime.Get(ids, metrics); 

      // Applying optional parameters to the request.     
      request = (RealtimeResource.GetRequest)SampleHelpers.ApplyOptionalParms(request, optional); 

      // Requesting data. 
      return request.Execute(); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception("Request Realtime.Get failed.", ex); 
     } 
    } 


} 
    public static class SampleHelpers 
{ 

    /// <summary> 
    /// Using reflection to apply optional parameters to the request. 
    /// 
    /// If the optonal parameters are null then we will just return the request as is. 
    /// </summary> 
    /// <param name="request">The request. </param> 
    /// <param name="optional">The optional parameters. </param> 
    /// <returns></returns> 
    public static object ApplyOptionalParms(object request, object optional) 
    { 
     if (optional == null) 
      return request; 

     System.Reflection.PropertyInfo[] optionalProperties = (optional.GetType()).GetProperties(); 

     foreach (System.Reflection.PropertyInfo property in optionalProperties) 
     { 
      // Copy value from optional parms to the request. They should have the same names and datatypes. 
      System.Reflection.PropertyInfo piShared = (request.GetType()).GetProperty(property.Name); 
      if (property.GetValue(optional, null) != null) // TODO Test that we do not add values for items that are null 
       piShared.SetValue(request, property.GetValue(optional, null), null); 
     } 

     return request; 
    } 
} 

code arraché à mon exemple de projet pour Google Analytics API v3 J'ai aussi un tutoriel qui se trouve ici Google Analytics Real-Time API with C# – What's happening now!