El día 15 Google liberó la primera release de la API de Google Plus (http://developers.google.com/+/) y en las siguientes líneas comentaré como empezar a toquetearla para crear nuestra primera aplicación.

Por ser la primera versión, esta tiene una serie de limitaciones y/o particularidades, como por ejemplo que solo podremos acceder a datos públicos de cada uno de los perfiles con los que trabajemos. Otra de las particularidades es que tenemos, por cortesía de Google (…), un límite de querys (mil para Google+) diariamente.

He estado trasteando con varias librerías para los distintos lenguajes que han sacado (java, python,…) y finalmente me he quedado con la versión de python en Linux (en windows me ha dado más de un quebradero de cabeza).

¿Por qué python?, pues por el simple hecho de que en pocas líneas consigue conectar con el servidor, conseguir la autorización y obtener los datos que deseamos.

Lo primero que debemos hacer para desarrollar con el API de Google Plus es obtener nuestra API Key y los datos necesarios para trabajar con OAuth2, y esto lo hacemos con nuestra cuenta de Google en la web https://code.google.com/apis/console/b/0/. En principio la autorización no nos haría mucha falta ya que, como he dicho anteriormente, en esta primera release de la api de Google+, solo podremos acceder a datos públicos de nuestro perfil para consultarlos, pero nunca está mal saberlo para el futuro.

Recuerdo que las librerías que han sacado son todas beta (la de ruby es alpha), por lo que habrá cosas que no terminen de funcionar al 100% (en java por ejemplo hay métodos de la librería que no están implementados en la api oficial de Google). En la dirección http://developers.google.com/+/downloads podemos elegir la api y la librería del lenguaje que vayamos a usar, en este caso, yo he elegido python. En casi todos los lenguajes han puesto un primer ejemplo de como obtener la autorización, conectarse y obtener datos, y todos difieren unos de otros.

Si elegimos python y nos descargamos el ejemplo que proporciona Google, vemos que tenemso dos archivos, uno llamado plus_cli.py y otro llamado settings.py. El primero será con el que nos logueemos en Google Plus y el segundo donde guardaremos nuestros datos de la api key.

Lo primero que tendremos que hacer será modificar los datos de settings.py con aquellos de nuestra api key.

Una vez que tengamos esto, ya podemos empezar a entender el resto del código.

Lo primero con lo que nos encontramos es con la función para loguearnos y pedir la autorización a Google Plus para acceder a los datos. Se trata de la función authorize_self.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def authorize_self(client_id='None', client_secret='None'):
  if client_id is None or client_secret is None:
    raise Exception('Please register at the API Console at:
    https://code.google.com/apis/console.  See README.txt for details!')
 
  flow = OAuth2WebServerFlow(
      client_id=client_id,
      client_secret=client_secret,
      scope='https://www.googleapis.com/auth/plus.me',
      user_agent='google-api-client-python-plus-cmdline/1.0',
      xoauth_displayname='Google Plus Client Example App'
      )
 
  #Remove this file if you want to do the OAuth2 dance again!
  credentials_file = 'plus_auth.dat'
 
  storage = Storage(credentials_file)
  if os.path.exists(credentials_file):
    credentials = storage.get()
  else:
    credentials = run(flow, storage)
 
  return credentials

Esta función junto a build_service, cogerá los datos de nuestra api y nos devolverá una dirección que tendremos que pegar en nuestro navegador para así otorgar el permiso correspondiente a nuestra aplicación.

1
2
3
4
5
6
def build_service(credentials, http, api_key=None):
  if ( credentials != None ):
    http = credentials.authorize(http)
  service = apiclient.discovery.build('plus', 'v1', http=http, developerKey=api_key)
 
  return service

Uno de las funciones más importantes de las que hacemos uso es OAuth2WebServerFlow que es quien se encarga de realizar todos los pasos para que la autorización se lleve a cabo.

Una vez que hayamos obtenido la autorización, ya solo nos queda jugar con los datos que tenemos en Google Plus, y esto lo hacemos con la función main().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
def main():
  http = httplib2.Http()
  credentials = authorize_self(settings.CLIENT_ID,settings.CLIENT_SECRET)
  service = build_service(credentials,http)
 
  person = service.people().get(userId='me').execute(http)
 
  print "Got your ID: " + person['displayName']
 
  # Now, we can continue on unauthorized
  # I could continue using my authenticated service, of course
  # but for example we'll use a second unauth'd one
  httpUnauth = httplib2.Http()
  serviceUnauth = build_service(None, httpUnauth, settings.API_KEY)
activities_doc = serviceUnauth.activities().list(userId=person['id'],collection='public').
  execute(httpUnauth)
 
  activities = []
  npt = None
 
  if 'items' in activities_doc:
    activities = activities_doc[ 'items' ]
    print "Retrieved %d activities" % len(activities_doc['items'])
 
  npt = activities_doc['nextPageToken']
 
  while ( npt != None ):
activities_doc = serviceUnauth.activities().list(userId=person['id'],collection='public').
    execute(httpUnauth)
 
    if 'items' in activities_doc:
      activities += activities_doc['items']
      print "Retrieved %d more activities" % len(activities_doc['items'])
 
    if not 'nextPageToken' in activities_doc or activities_doc['nextPageToken'] == npt:
      "---Done"
      break
 
    npt = activities_doc['nextPageToken']
 
  print "----------------\nPublic activities count:", len(activities)
  print
 
  if len(activities) > 0:
    for item in activities:
      print '  activity\t', item['object']['content'][:40], item['id']
 
    # Now, ask for the first item on the list
    top_activity = serviceUnauth.activities().get(activityId=activities[0]['id']).
    execute(httpUnauth)
 
    print '\n\ntop activity: '+top_activity['id']+': '+top_activity['object']['content']
 
  print '\n\nSUCCESS: Everything worked'

Llegados a este punto debemos diferenciar entre dos tipos de datos, los relacionados con personas (http://developers.google.com/+/api/latest/people), o con las actividades que este ha llevado a cabo en su perfil de Google+ (http://developers.google.com/+/api/latest/activities).

Como dato, tanto en uno como en otro, la información es transportada en formato JSON, acrónimo de JavaScript Object Notation.

Lo primero que tendremos que hacer es recoger los datos del usuario con el que estamos trabajando, y para ello, utilizaremos una conexión autorizada por los métodos que comenté al comienzo del post.

1
2
3
4
5
6
7
http = httplib2.Http()
  credentials = authorize_self(settings.CLIENT_ID,settings.CLIENT_SECRET)
  service = build_service(credentials,http)
 
  person = service.people().get(userId='me').execute(http)
 
  print "Got your ID: " + person['displayName']

A partir de aquí, cada vez que queramos obtener algún tipo de dato relacionado con el usuario tendremos que acceder
al mismo de la forma person[‘dato_al_que_accedemos’] siguiendo este ejemplo.

Posteriormente se accede a la lista de actividades del usuario, y para esto de utiliza una conexión no autorizada ya que los datos a los que accedemos son públicos y no se necesita de ningún tipo de autorización para su consulta.

1
2
3
4
5
httpUnauth = httplib2.Http()
  serviceUnauth = build_service(None, httpUnauth, settings.API_KEY)
 
  activities_doc = serviceUnauth.activities().list(userId=person['id'],collection='public').
  execute(httpUnauth)

En el ejemplo que nos proporciona Google, todo lo que ha recogido la variable activities_doc es guardado en un array llamado activities, por lo que para acceder a los datos de las actividades del usuario accederemos de la forma activities[‘actividad_del_usuario’].

Cada uno de los datos y/o las actividades del usuario están relacionado con una palabra clave que deberemos conocer, por ejemplo, la dirección que haya puesto el usuario tendrá la palabra clave “address” (lógico). Todas estas claves están en la web de la api y más atrás he dejado los enlaces de las claves tanto para los datos del usuario como para las actividades.

Una vez hecho esto, tan solo nos queda jugar con la api, aunque con esta primera versión poca cosa se puede hacer. Habrá que esperar a nuevas versiones para poder ahondar más en la aplicación.

Si a alguien le interesa, las pruebas las estoy realizando en Fedora con Eclipse.

PD: Algunas partes del código fuente mostrado en el post han sido acortadas para no desencuadrar el mismo.

Leave a Reply


   Beat diabetes   Diabetes diet