web-dev-qa-db-fra.com

Bibliothèque cliente Analytics Reporting API V4 pour .NET

J'essaie d'obtenir des données de notre instance google analytics et j'aimerais utiliser la bibliothèque cliente Analytics Reporting API V4 pour .NET ( https://developers.google.com/api-client-library/dotnet/apis/analyticsreporting/v4 ) afin que je puisse cuire certaines de ces données dans un site d'administration que nous avons construit. J'ai du mal à trouver des exemples d'utilisation de ce code et la documentation semble être incroyablement clairsemée. Je souhaite utiliser un compte de service pour autoriser, car nous n'avons besoin que de visualiser les données associées au compte d'analyse que nous contrôlons.

Si quelqu'un pouvait fournir un exemple de code ou me diriger dans la bonne direction pour obtenir des données de rapport de base à l'aide de l'API .net, il serait grandement apprécié

34
Ben

L'appel de l'API Google Analytics Reporting à partir de C # n'est pas particulièrement difficile, mais toutes les étapes nécessaires ne semblent pas être décrites très clairement dans la documentation de l'API Google Analytics. Je vais essayer de les énumérer tous ici. Pendant que YMMV, je pense que ces étapes sont correctes au 20/07/2016.

Vous pouvez commencer par créer un nouveau projet C #. Nous allons créer une application console à tester appelée GoogleAnalyticsApiConsole. Une fois le projet créé, nous ajouterons une référence à la Bibliothèque cliente Google Analytics Reporting API V4 pour .NET à l'aide de la console NuGet Package Manager (située dans le menu Outils de Visual Studio 2015). Lancez la console et lancez la commande suivante à l'invite PM>:

PM> Install-Package Google.Apis.AnalyticsReporting.v4

L'installation de ce package télécharge les bibliothèques clientes nécessaires pour appeler les services Web de création de rapports Google Analytics ainsi qu'un certain nombre d'autres dépendances.

Pour appeler les services Web, vous devrez configurer OAuth 2.0 accès pour votre application. La documentation de cette configuration peut être trouvée ici , mais je résumera ci-dessous:

  1. Connectez-vous à la console Google Cloud Platform : https://console.cloud.google.com/ . Assurez-vous de vous connecter avec un compte qui a accès aux comptes Google Analytics que vous essayez d'interroger avec l'API de création de rapports.

  2. Cliquez sur le menu Google Cloud Platform et sélectionnez API Manager .

Google Cloud Platform API Manager

  1. Sur le côté gauche, cliquez sur Informations d'identification puis créez un nouveau projet appelé Google Analytics API Console. Donnez-lui un peu de temps pour créer le nouveau projet.

  2. Une fois le projet créé, cliquez à nouveau sur Informations d'identification s'il n'est pas déjà sélectionné, puis cliquez sur l'écran de consentement OAuth lien dans le panneau de droite. Définissez le Nom du produit affiché pour les utilisateurs sur Google Analytics API Console, Puis cliquez sur Enregistrer.

  3. Cliquez à nouveau sur Informations d'identification , puis cliquez sur Créer des informations d'identification , puis choisissez ID client OAuth . Sélectionnez Autre pour Type d'application puis entrez Google Analytics API Console comme Nom et cliquez sur Créer .

  4. Une fois les informations d'identification créées, vous recevrez un ID client et un secret client. Vous pouvez fermer la fenêtre de dialogue.

  5. Maintenant, sous Informations d'identification , vous devriez voir une entrée sous ID client OAuth 2.0 . Cliquez sur l'icône de téléchargement à l'extrême droite de cette entrée pour télécharger le fichier client_secret.json (Ce fichier aura un nom beaucoup plus long). Ajoutez ce fichier à votre projet au niveau racine une fois qu'il a été téléchargé et renommez-le en client_secret.json.

Google Cloud Platform API Credentials

  1. Maintenant que les informations d'identification OAuth 2.0 ont été créées, nous devons l'activer pour appeler l'API Reporting. Sélectionnez Présentation et assurez-vous que les API Google sont sélectionnées dans le panneau de droite. Tapez Reporting dans la zone de recherche et sélectionnez API Analytics Reporting V4 dans la liste. Sur l'écran suivant, cliquez sur Activer . Une fois que cette API a été activé, vous devriez pouvoir le voir dans la liste API activées dans le panneau de droite.

Google Cloud Platform Enabled Analytics Reporting

Maintenant que nous avons créé notre projet et créé nos informations d'identification OAuth 2.0, il est temps d'appeler l'API Reporting V4. Le code ci-dessous utilisera l'API Google et le client_secret.json pour créer un Google.Apis.Auth.OAuth2.UserCredential pour interroger l'API Reporting pour toutes les sessions entre la plage de dates donnée pour une vue. Le code est adapté de exemple Java ici .

Avant d'exécuter le code , assurez-vous de définir l'action de construction sur le client_secret.json Vers le contenu et la copie vers le répertoire de sortie paramètre à Copier si plus récent . Il existe également deux variables qui doivent être correctement définies. Tout d'abord, dans la méthode GetCredential(), définissez la valeur loginEmailAddress sur l'adresse e-mail utilisée pour créer les informations d'identification OAuth 2.0. Ensuite, dans la Main, assurez-vous de définir la ViewId dans la variable reportRequest sur la vue que vous souhaitez interroger à l'aide de l'API de génération de rapports. Pour trouver le ViewId, connectez dans Google Analytics et sélectionnez l'onglet Admin . De là, sélectionnez la vue que vous souhaitez interroger dans la vue liste déroulante à l'extrême droite et sélectionnez Afficher les paramètres . L'ID de vue sera affiché sous Paramètres de base .

La première fois que le code est exécuté, il affichera une page Web vous demandant si vous souhaitez autoriser le Google Analytics API Console À accéder aux données de l'API. Sélectionnez Autoriser pour continuer. À partir de ce moment, cette autorisation sera stockée dans le GoogleAnalyticsApiConsoleFileDataStore. Si ce fichier est supprimé, l'autorisation devra à nouveau être accordée. Ce fichier se trouve dans le répertoire %APPDATA%\GoogleAnalyicsApiConsole.

Google API Permission OAuth 2.0

Veuillez noter que je pense que ce scénario répondra aux besoins du PO. Si cette application devait être distribuée aux clients, un autre schéma OAuth 2.0 serait probablement nécessaire.

Voici le code:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Google.Apis.AnalyticsReporting.v4;
using Google.Apis.AnalyticsReporting.v4.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Util.Store;

namespace GoogleAnalyticsApiConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var credential = GetCredential().Result;
                using(var svc = new AnalyticsReportingService(
                    new BaseClientService.Initializer
                    {
                        HttpClientInitializer = credential,
                        ApplicationName = "Google Analytics API Console"
                    }))
                {    
                    var dateRange = new DateRange
                    {
                        StartDate = "2016-05-01",
                        EndDate = "2016-05-31"
                    };
                    var sessions = new Metric
                    {
                        Expression = "ga:sessions",
                        Alias = "Sessions"
                    };
                    var date = new Dimension { Name = "ga:date" };

                    var reportRequest = new ReportRequest
                    {
                        DateRanges = new List<DateRange> { dateRange },
                        Dimensions = new List<Dimension> { date },
                        Metrics = new List<Metric> { sessions },
                        ViewId = "<<your view id>>"
                    };
                    var getReportsRequest = new GetReportsRequest {
                        ReportRequests = new List<ReportRequest> { reportRequest } };
                    var batchRequest = svc.Reports.BatchGet(getReportsRequest);
                    var response = batchRequest.Execute();
                    foreach (var x in response.Reports.First().Data.Rows)
                    {
                        Console.WriteLine(string.Join(", ", x.Dimensions) +
                        "   " + string.Join(", ", x.Metrics.First().Values));
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        static async Task<UserCredential> GetCredential()
        {
            using (var stream = new FileStream("client_secret.json", 
                 FileMode.Open, FileAccess.Read))
            {
                const string loginEmailAddress = "<<your account email address>>";
                return await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { AnalyticsReportingService.Scope.Analytics },
                    loginEmailAddress, CancellationToken.None, 
                    new FileDataStore("GoogleAnalyticsApiConsole"));
            }
        }
    }
}
62
rsbarro

J'ai eu la même expérience: la documentation de Google est assez approfondie mais est assez terrible pour donner des exemples clairs de la façon de se connecter avec .NET.

Une chose clé que j'ai finalement réalisée est que vous pouvez vous connecter en utilisant un identifiant OAuth2 ou un identifiant de compte de service. Si vous êtes propriétaire de votre compte Analytics, utilisez un compte de service. Si vous devez vous connecter aux comptes Analytics d'autres utilisateurs, utilisez OAuth2.

Il semble y avoir quelques exemples en ligne sur la façon d'obtenir des données d'API Analytics à l'aide d'un identifiant OAuth2, mais je possède mon compte Analytics et je voulais simplement en extraire des données. J'ai compris comment se connecter à l'API Analytics Reporting v4 à l'aide d'un ServiceAccountCredential, et j'ai écrit ne réponse sur une question similaire de débordement de pile avec tous les détails.

5
John Washam