Jugando con la API de Twitter [Parte 3]


La verdad es que esto del scraping en las API de Twitter y las redes sociales me tiene con muy altas expectativas de lo que podría hacer con tanta información :D, Este Libro que hemos venido estudiando junto con los ejemplo de la especialización en python me han ayudado a escribir sobre este interesante mundo de la información de Redes Sociales, y es que solo hemos raspado muy por arriba la información que contienen las bases de datos de Twitter.

Hoy vamos a crear unas rutinas un poco mas complejas, no se asusten, digo complejas por que vamos a comenzar a conocer aun mas los datos que nos provee la API de Twitter, es importante entender que Python nos ayuda mucho al intentar sacar la información del archivo JSON que nos da Twitter, por que lo digo, simplemente por que la estructura de JSON y XML es muy parecida por no decir idéntica a un Diccionario Python y esto si que nos va a beneficiar al no tener que enviar múltiples llamadas a la API ya que podemos obtener la información guardarla en memoria como un diccionario mas formateado y luego comenzar a encontrar nuestros diamantes de la Roca extraída, por ejemplo en La especialización de Python(5 Cursos) que gracias a Dios estoy terminando había un problema que se ejecutaba muy lento por que el gestor de BD accedía en cada llamada a los datos de la API y esto ralentizaba mucho la ejecución, y con mi experiencia en python intuitivamente me incline por llevar los datos al diccionario y luego ya con los datos en la memoria(aquí esta la magia de los diccionarios), ya con los datos en la memoria ejecute el gestor de Base de Datos o ejecute código SQL sobre el diccionario y paso de 7 minutos mas o menos a menos de 40 segundos, aun creo que podría mejorar ese código pero una vez que pase la tarea me olvide de esta :S(no recomendable jejeje)…

Que vamos a hacer hoy, Hoy vamos a revisar un poco los datos que nos provee la API y vamos a imprimir en pantalla los datos recolectados solo los que nos interesan(vamos a entrar un poco mas en detalle) y los vamos a agregar a la BD SQLITE3, ademas vamos a ver uno de los ejemplos del curso 4 de la especialización (ojo no voy a colocar los ejercicios propuestos) y vamos a ver algunas cosas importantes para no repetir datos en la BD y no entrar 2 veces en un mismo Twitter:

 

import twitter, json
# Lo primero que debemos hacer es ir a http://dev.twitter.com/apps/new y crear una app
#puedes ver https://dev.twitter.com/docs/auth/oauth para mas informacion
#las credenciales que necesitamos debemos copiarlas de XXXXXXXXXXXXXXXXXXXXXX y usarlas tal como se muestrasn en las imagenes de esta entrada http://wp.me/p3nJhK-ev

CONSUMER_KEY = 'Datos de A'

CONSUMER_SECRET = 'Datos de B'

OAUTH_TOKEN = 'Datos de C'

OAUTH_TOKEN_SECRET = 'Datos de D'

auth = twitter.oauth.OAuth( OAUTH_TOKEN , OAUTH_TOKEN_SECRET, CONSUMER_KEY , CONSUMER_SECRET )

twitter_api = twitter.Twitter(auth=auth)

worl_trends = twitter_api.trends.place(_id=WORL_WOE_ID)

us_trends = twitter_api.trends.place(_id=US_WOE_ID)

print json.dumps(worl_trends, indent =4)
print 
print json.dumps(us_trends, indent =4)

Vamos a utilizar como base esta consulta de búsqueda, vamos a buscar algunos tweets para su posterior análisis, la salida de este programa dista mucho de lo que quisiéramos obtener como mineros de datos, en realidad tenemos mucha información pero no tenemos nada palpable, por ejemplo en el libro hablan de los re-twitts de las tendencias y otras cosas, pero a mi me gustaría saber cuales son las principales cuentas de programación en python y ofertas para freelancer, claro esto lo veremos mas a fondo en La API de Linkedin y podríamos conectar facebook+twitter+linkedin+freelancer y relacionar las bases de datos y obtener información refinada de determinados temas :D….

Por ahora nos vamos a conformar con sacar algunos datos y aprender nuevas técnicas de extracción de JSON y algunas técnicas aplicadas de programación en python…. Es importante tener en cuenta que lo que se quiere es tener control sobre datos en tiempo real de la API de Twitter algo como tipo streaming, eso lo veremos mas adelante cuando pasemos por la API de Freelancer que por ahora esta cerrada :S

Anteriormente vimos el código anterior, ahora vamos a ver un código con mas python, recuerda que tomamos los datos de la API y  luego queda programar en python :D, este es el código:

 
import twitter, json

CONSUMER_KEY = 'Datos de A'

CONSUMER_SECRET = 'Datos de B'

OAUTH_TOKEN = 'Datos de C'

OAUTH_TOKEN_SECRET = 'Datos de D'

auth = twitter.oauth.OAuth( OAUTH_TOKEN , OAUTH_TOKEN_SECRET, CONSUMER_KEY , CONSUMER_SECRET )

twitter_api = twitter.Twitter(auth=auth)




q =  '#yorio' # una cuenta twitter importante para ti, ten en cuenta que mas adelante 
				      # implementare una arania real para twitter q nos permitira tener una BD actualizada
				      # con muchos twitter y cuentas enlazadas
				      # Ademas podemos ver que es q aqui  https://dev.twitter.com/docs/api/1.1/get/search/tweets


count = 100

search_results = twitter_api.search.tweets(q=q, count =count)

statuses = search_results['statuses']

# Ahora, vamos a Recorrer 5  lotes de resultados siguiendo el cursor
# Esto es muy importante en python ya que permite ir por delante del cursor
# Resultados de la busqueda contienen un nodo search_metadata especial que incorpora un next_results
# campo con una cadena de consulta que proporciona la base de una consulta posterior

for _ in range(5):
  print "Length of statuses", len(statuses)
  try:
    next_results = search_results['search_metadata']['next_results']
  except KeyError, e: # No mas resultados si no hay mas datos
    break
  
  # Creamos un Diccionario para next_results, con la siguiente forma:
  # ?max_id=313519052523986943&q=NCAA&include_entities=1
  
  kwargs = dict([kv.split('=') for kv in next_results[1:].split('&') ])
  
  # para una mejor comprension puedes vistar http://librosweb.es/libro/python/capitulo_6/metodos_de_union_y_division.html
  # Split es una funcion que se utiliza para divir una cadena
  # breve explicacion de :kv.split('=') for kv in next_results[1:].split('&')
  # simple toma como valor a el siguiente caracter luego del '=' y lo corta has & dandole el valor de kv
  # recuerda que next_results es un diccionario o lista de tuplas
  
  search_results = twitter_api.search.tweets(**kwargs)
  
  statuses += search_results['statuses']
  

print json.dumps(statuses[0], indent=1)

 Algo que me parece interesante es que al utilizar un Hashtag como el que veníamos usando, este código ejecuta un error de Fuera de Rango, y es que no tenemos unos guardianes custodiando que hay suficiente información y no voy a crearlos tampoco, recuerda que con estos código buscamos es aprender ya mas adelante crear mejor código python recopilando lo que vamos aprendiendo entrada a entrada…

En este ejemplo coloque la cuenta de #VladirmirAla1 por que sabia que hay bastante información, podemos usar el #YoRio aprovechando el momento de los juegos olímpicos 😀

Algo importante del código, los kwargs, recordemos que en python podemos llamar de diferentes maneras los atributos o valores que vamos a usar en una función, y en python para usar valores arbitrarios podemos usar **arg o **kwargs, específicamente usamos kwargs para los diccionarios, es algo como que aceptamos cualquier valor que se vaya encontrando…

Si nos detenemos a revisar la salida de nuestro programa nos daremos cuenta que hay mucha información en las redes, y de verdad no hemos encontrado mucho con este ejemplo, a continuación, vamos a sumergirnos un poco mas en los datos que nos ofrece la API y vamos a sacar algunos datos interesantes como por ejemplo re_tweets(este dato tiene especial interés y solo diré que solo el tweet original se puede re_tweets), screen_name es el nombre de quien escribe y otros datos mas de los que aparecen en el libro, voy a modificar un poco el ejemplo para obtener algunos datos mas:

 

import twitter, json

# Datos de autenticacion
CONSUMER_KEY = 'Datos de A'

CONSUMER_SECRET = 'Datos de B'

OAUTH_TOKEN = 'Datos de C'

OAUTH_TOKEN_SECRET = 'Datos de D'





auth = twitter.oauth.OAuth( OAUTH_TOKEN , OAUTH_SECRET, CONSUMER_KEY , CONSUMER_SECRET )

api = twitter.Twitter(auth=auth)

q =  '#vladimirala1' # una cuenta twitter importante para ti, ten en cuenta que mas adelante 
				      # implementare una arania real para twitter q nos permitira tener una BD actualizada
				      # con muchos twitter y cuentas enlazadas
				      # Ademas podemos ver que es q aqui  https://dev.twitter.com/docs/api/1.1/get/search/tweets


count = 100

search_results = api.search.tweets(q=q, count =count)

statuses = search_results['statuses']


  
retweet_counts = [status['retweet_count']
	 for status in statuses ]

status_texts = [status['text']
	 for status in statuses ]


screen_names = [user_mention['screen_name']
	 for status in statuses 
	     for user_mention in status ['entities']['user_mentions'] ]


hashtags = [hashtag['text']
	 for status in statuses 
	     for hashtag in status ['entities']['hashtags'] ]



fields = "id screen_name name created_at url followers_count friends_count statuses_count \
    favourites_count listed_count \
    contributors_enabled description protected location lang expanded_url".split()
    
r = {}
for f in fields:
    r[f] = ""
    #ASSIGN VALUE OF 'ID' FIELD IN JSON TO 'ID' FIELD IN OUR DICTIONARY
    r['id'] = f['id']
    #SAME WITH 'SCREEN_NAME' HERE, AND FOR REST OF THE VARIABLES
    r['screen_name'] = f['screen_name']



print json.dumps(retweet_counts[0:5], indent=4)

print json.dumps(status_texts[0:5], indent=4)

print json.dumps(screen_names[0:5], indent=4)

print json.dumps(hashtags[0:5], indent=4)

 Aunque todavía no hemos obtenido los gramos de oro que esperamos, cada vez tenemos mejores expectativas, en la próxima entrada voy a implementar 1 programa del curso y vamos a sacar los datos del Archivo Json y del diccionario de una manera mas intuitiva y mas fácil de entender… es interesante todo lo que podemos hacer con python, ya en la próxima entrada tendemos mejores vistas de muchos datos que vamos a obtener formateados directo para una BD, ademas espero implementar unas cuantas cosas para La BD esperemos a ver 😀

Saludos y Dios les Bendiga

Jugando con la API de Twitter [Parte 2]

Jugando con la API de Twitter [Parte 1]

Experiencia de La Especialización Python para toda la vida

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s