Get it on Google Play

Importación y Desarrollo con datos de la web con Google Analytics

19-01-2017
 
Google Analytics App

Google Analytics App

Google Analytics(GA) es actualmente el sistema para obtener datos de las visitas de una web mas usado. No puedo dejar de mencionar que existen alternativas como Piwik que nos permiten guardar nosotros todos los datos(GA solo nos deja ver lo que el quiere) para trabajar con ellos mas cómodamente o crear sistemas mucho mas potentes, por ejemplo, para analizar el comportamiento del usuario en tiempo real y mostrar el contenido que mas ‘convierta’.

Cada vez es mas necesario integrarnos con GA para trabajar con sus datos, por ejemplo, para hacer cosas con la información en tiempo real de la web, analizar datos a posteriori, machine learning, etc. Para poder hacer esto nos tenemos con integrar con Google Analytics(GA). Y para ello deberemos:

Crearnos una cuenta en Google Cloud Console

Pinchando en el siguiente link(https://console.cloud.google.com/apis/credentials) podremos crear unas nuevas credenciales para nuestro proyecto del tipo ‘IDs de cliente de OAuth 2.0’.

Nos descargaremos el fichero JSON con las credenciales.

Crear el proyecto de nuestra aplicación con Gradle

Después ya podemos crear nuestro proyecto, en mi caso, lo he creado con Gradle desde Eclipse. El fichero ‘build.gradle’ queda de la siguiente manera:

apply plugin: 'java'

repositories {
    jcenter()
    mavenCentral()
	}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.12'

    testCompile 'junit:junit:4.12'
    
    compile 'com.google.apis:google-api-services-analytics:v3-rev136-1.22.0'
	compile 'com.google.http-client:google-http-client-jackson2:1.19.0'
	compile 'com.google.oauth-client:google-oauth-client-jetty:1.19.0'
	}

Aplicación que lee los datos de Google Analytics

Ahora ya podemos crearnos nuestra aplicación que se integra con Google Analytics. En este caso, esta pequeña aplicación se conecta con Google Analytics nos saca un listado de todas las cuentas, propiedades y perfiles que tenemos disponibles y nos muestra el número de usuarios activos en este momento de la primera web:

public class Main {
	private static final String APPLICATION_NAME = "Nombre de la aplicación";
	private static final String APPLICATION_KEYS = "Fichero con las credenciales";
	private static final java.io.File DATA_STORE_DIR = new java.io.File( "carpeta donde guardará el login del usuario" );
	
	public static void main(String[] args) throws Exception {
		Analytics analytics = getAnalytics();
		
		Accounts accounts = analytics.management().accounts().list().execute();

		String accountId=null;
		String propId=null;
		String profileId=null;
		
		System.out.println("Cuentas: ");
		for( int i=0; i<accounts.getItems().size(); i++ ) {
			if ( accountId==null ) accountId=accounts.getItems().get(i).getId();
			
			System.out.println( accounts.getItems().get(i).getId()+" "+accounts.getItems().get(i).getName() );
			}
		
		System.out.println("\nPropiedades("+accountId+"): ");
		Webproperties webproperties =analytics.management().webproperties().list(accountId).execute();
		for( int i=0; i<webproperties.getItems().size(); i++ ) {
			if ( propId==null ) propId=webproperties.getItems().get(i).getId();

			System.out.println( webproperties.getItems().get(i).getId()+" "+webproperties.getItems().get(i).getName() );
			}
		
		System.out.println("\nProfiles("+accountId+","+propId+"): ");
		Profiles profiles = analytics.management().profiles().list( accountId, propId).execute();	
		for( int i=0; i<profiles.getItems().size(); i++ ) {
			if ( profileId==null ) profileId=profiles.getItems().get(i).getId();

			System.out.println( profiles.getItems().get(i).getId()+" "+profiles.getItems().get(i).getName() );
			}
		
		String users="0";
		RealtimeData gd=analytics.data().realtime().get( "ga:"+profileId, "rt:activeUsers" ).execute();
		
		if ( gd.getRows()!=null ) {
			users=gd.getRows().get(0).get(0);
			}
		
		System.out.println( "\nUsers: "+users );
		}
	
	public static Analytics getAnalytics() throws Exception {
		HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
		JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
		
		FileDataStoreFactory dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
		
	    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load( 
	    		JSON_FACTORY, 
	    		new InputStreamReader(
	    				new FileInputStream( APPLICATION_KEYS )
	    				)
	    		);
	    
	    Builder builder = new GoogleAuthorizationCodeFlow.Builder(
	            httpTransport, 
	            JSON_FACTORY, 
	            clientSecrets,
	            Collections.singleton(AnalyticsScopes.ANALYTICS_READONLY)
	            );
        
        GoogleAuthorizationCodeFlow flow =(GoogleAuthorizationCodeFlow) builder.setDataStoreFactory(dataStoreFactory).build();

        Credential credential = new AuthorizationCodeInstalledApp( flow, new LocalServerReceiver()).authorize("user");
        
		return new Analytics.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
		}

}

El código es bastante sencillo de entender, tenemos una función ‘getAnalytics()’ que se encarga de loguear al usuario y devolver el objeto ‘Analytics’. Una vez tenemos el objeto ‘Analytics’ resulta sencillo moverse por los datos.

En la guía para desarrolladores encontrareis las referencias para hacer las peticiones que queráis https://developers.google.com/analytics/devguides/reporting/realtime/v3/devguide?hl=es-419.

Leave a Reply

© Albert Coronado Calzada