0

Hat jemand einen Beispiel-C# -Code, den er mithilfe der Google.Apis.Analytics.v3-API und der Serverauthentifizierung teilen kann, um die aktuelle Anzahl von Benutzern auf meiner Website zu erhalten.Google Analytics Echtzeit-API .Net-Client

Hintergrund: Ich habe eine MVC interne Website, die ein Support-Dashboard hat. Es hängt sich in verschiedene APIs ein, um einige nützliche Daten zu sammeln. Ich hatte eine Anfrage, die Anzahl der Nutzer, die sich derzeit auf unserer Website befinden, wie im Google Analytics-Webportal zu sehen.

Ich möchte nicht Benutzer einzeln mit einem Google-Konto anmelden, ich hatte gehofft, ich könnte die "ServiceCredentials" -Methode verwenden, aber ich habe verloren.

Schätzen Sie jede Hilfe.

Dank

Antwort

0

Stellen Sie sicher, dass Ihr Dienstkonto Zugriff in Google Analytics auf Kontoebene gewähren.

Warnung: Das Kontingent für Google Analytics API beträgt 10000 Anforderungen pro Tag pro Ansicht. Wenn Sie an einem Tag mehr als 10000 Anfragen stellen, werden Sie ausgesperrt. Versuchen Sie nicht, die Echtzeitdaten zu oft zu aktualisieren, idealerweise einmal pro Minute in einem Hintergrundskript.

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); 
     } 
    } 
} 

Anfrage:

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 von meinem Beispielprojekt riss für Google Analytics API v3 ich auch ein Tutorial haben, die hier gefunden werden kann Google Analytics Real-Time API with C# – What's happening now!