8
votes

Autorisation de Google Analytics en Java

Je cherche le moyen le plus simple de vous connecter de manière programmée dans Analytics et d'obtenir des données. La documentation Google écrit et donne des exemples pour OAuth 2.0 qui implique un utilisateur de se connecter manuellement avec son compte Google, puis redirigé vers mon site avec autorisation. Mais ce n'est pas ce que je veux réaliser - je construisais un outil automatique qui doit avoir une touche utilisateur / passe ou toute autre clé d'autorisation à codée papier, puis connectez-vous sans aucune implication de l'utilisateur (il s'agit d'un outil de reporting périodique) .

J'ai déjà trouvé quelque chose sur la clé de l'API, mais je ne trouve aucun exemple de comment faire cela, ni comment à cela avec Google Java Bibliothèques.

Je serais très reconnaissant de me faire remarquer dans la bonne direction. En outre, cela peut être une indication précieuse pour les autres comment faire le moyen le plus simple - et je pense que la journalisation doit être simple.


0 commentaires

4 Réponses :


2
votes

Je l'ai résolu enfin avec la version 2.4 de Core Reporting - Il y a une autorisation avec votre utilisateur / passe Gmail, tout aussi simple que cela devrait être - je me demande pourquoi il n'y a pas d'exemple comment faire cela dans la nouvelle version 3.0.

Core Reporting 2.4: http: //code.google.com/intl/pl-pl/apis/analytics/docs/gdata/v2/gdatajava.html


2 commentaires

Votre message m'aide vraiment. Le document de version 3.0 est si déroutant et inutile. Il manque beaucoup d'étapes importantes telles que comment compiler client_secrets.json et pointe vers une telle "Quoi!" liens. Merci encore.


Cette page est supprimée par Google, je suis confronté à ce problème à partir de 20 derniers jours, pouvez-vous partager le code de quoi vous êtes utilisé exactement pour accéder aux données analytiques de Google



13
votes

J'ai eu le même problème et je me suis prise d'environ 1h pour le trouver dans la documentation V3:

Comptes de service P>

utile pour l'accès automatisé / déconnecté / planifié à Google Analytics Data pour votre propre compte. Par exemple, pour créer un tableau de bord en direct de vos propres données Google Analytics et partagez-la avec d'autres utilisateurs. P>

Il y a quelques étapes à suivre pour configurer les comptes de service pour fonctionner avec Google Analytics: P>

  1. enregistrer un projet dans la console APIS. LI>
  2. Dans la console d'API Google, sous le volet d'accès API, créez un ID client avec le type d'application défini sur le compte de service. LI>
  3. Connectez-vous à Google Analytics et accédez à la section Admin. Li>
  4. Sélectionnez le compte pour lequel vous souhaitez que l'application ait accès à. Li>
  5. Ajoutez l'adresse e-mail, à partir de l'ID client créé dans la console APIS de l'étape 2, en tant qu'utilisateur du compte de Google Analytics sélectionné. LI>
  6. Suivez les instructions pour les comptes de service pour accéder aux données Google Analytics. Li> ol> BlockQuote>

    En savoir plus ici: https://developers.google.com/analytics/devguides/reporting/core / v3 / gdataauthorisation p>

    puh, je suppose que l'API est si gros Google a du mal à le documenter un moyen facile =) p>

    alors j'ai regardé le code dans le plus-serviceAccount-cmdline-échantillon-échantillon strong> et analytique-cmdline-échantillon fort>. Ceci est une version très basique mise en œuvre dans une application Java Playframework2 Impresses à System.out comme exemples ci-dessus: P>

    private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
    private static final JsonFactory JSON_FACTORY = new JacksonFactory();
    
    public static Result index() {
       GoogleCredential credential = null;
       try {
            credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                  .setJsonFactory(JSON_FACTORY)
                  .setServiceAccountId("2363XXXXXXX@developer.gserviceaccount.com")
                  .setServiceAccountScopes(Arrays.asList(AnalyticsScopes.ANALYTICS_READONLY))
                  .setServiceAccountPrivateKeyFromP12File(new File("/your/path/to/privatekey/privatekey.p12"))                          
                  .build();
         } catch (GeneralSecurityException e) {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();  
         }
    
         // Set up and return Google Analytics API client.
         Analytics analytics = new Analytics.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(
              "Google-Analytics-Hello-Analytics-API-Sample").build();
    
         String profileId = "";
         try {
             profileId = getFirstProfileId(analytics);
         } catch (IOException e) {
            e.printStackTrace(); 
         }
    
         GaData gaData = null;
         try {
            gaData = executeDataQuery(analytics, profileId);
         } catch (IOException e) {
            e.printStackTrace();
         }
         printGaData(gaData);
    
         return ok(index.render("Your new application is ready."));
    }
    
    private static String getFirstProfileId(Analytics analytics) throws IOException {
        String profileId = null;
    
        // Query accounts collection.
        Accounts accounts = analytics.management().accounts().list().execute();
    
        if (accounts.getItems().isEmpty()) {
            System.err.println("No accounts found");
        } else {
            String firstAccountId = accounts.getItems().get(0).getId();
    
            // Query webproperties collection.
            Webproperties webproperties =
                    analytics.management().webproperties().list(firstAccountId).execute();
    
            if (webproperties.getItems().isEmpty()) {
                System.err.println("No Webproperties found");
            } else {
                String firstWebpropertyId = webproperties.getItems().get(0).getId();
    
                // Query profiles collection.
                Profiles profiles =
                        analytics.management().profiles().list(firstAccountId, firstWebpropertyId).execute();
    
                if (profiles.getItems().isEmpty()) {
                    System.err.println("No profiles found");
                } else {
                    profileId = profiles.getItems().get(0).getId();
                }
            }
        }
        return profileId;
    }
    
    /**
     * Returns the top 25 organic search keywords and traffic source by visits. The Core Reporting API
     * is used to retrieve this data.
     *
     * @param analytics the analytics service object used to access the API.
     * @param profileId the profile ID from which to retrieve data.
     * @return the response from the API.
     * @throws IOException tf an API error occured.
     */
    private static GaData executeDataQuery(Analytics analytics, String profileId) throws IOException {
        return analytics.data().ga().get("ga:" + profileId, // Table Id. ga: + profile id.
                "2012-01-01", // Start date.
                "2012-01-14", // End date.
                "ga:visits") // Metrics.
                .setDimensions("ga:source,ga:keyword")
                .setSort("-ga:visits,ga:source")
                .setFilters("ga:medium==organic")
                .setMaxResults(25)
                .execute();
    }
    
    /**
     * Prints the output from the Core Reporting API. The profile name is printed along with each
     * column name and all the data in the rows.
     *
     * @param results data returned from the Core Reporting API.
     */
    private static void printGaData(GaData results) {
        System.out.println("printing results for profile: " + results.getProfileInfo().getProfileName());
    
        if (results.getRows() == null || results.getRows().isEmpty()) {
            System.out.println("No results Found.");
        } else {
    
            // Print column headers.
            for (GaData.ColumnHeaders header : results.getColumnHeaders()) {
                System.out.printf("%30s", header.getName());
            }
            System.out.println();
    
            // Print actual data.
            for (List<String> row : results.getRows()) {
                for (String column : row) {
                    System.out.printf("%30s", column);
                }
                System.out.println();
            }
    
            System.out.println();
        }
    }
    


2 commentaires

Est-ce que cela fonctionne en fait? En particulier, le fichier P12: Créez-vous ou est-il téléchargé? En outre, une nouvelle clé API est-elle nécessaire pour chaque machine sur laquelle ce code doit fonctionner?


Lors de la création du compte de service, ne sélectionnez pas le JSON préféré (par Google), mais sélectionnez P12. Je passe un peu de temps à chercher comment créer un privékey à partir d'un fichier JSON, mais je n'ai trouvé rien dans un délai raisonnable.



0
votes

J'ai tenté de suivre l'exemple fourni et il ne compile pas. Je ne sais pas si ceci est 3.0 VS 2.4 et si oui, est-il une façon de faire le fait que le code d'exemple puisse être apporté au bon choix de pots ou de quoi.

Un problème avec l'exemple est que l'argument desservicesCcopes n'est plus une chaîne, mais une collecte.Singleton (analytiqueScopes.analytics.read_only).

également important à utiliser l'exemple est la configuration appropriée du compte de service.


0 commentaires

0
votes

comme réponse à une autre question, j'ai écrit un exemple de code dans Java qui fonctionne pour moi.

Voir: https://stackoverflow.com/a/24043488/1391050


0 commentaires