Jugando con las APIs de Twitter y PYTHON

Desde hace ya un par de meses he estado jugando con varios lenguajes libres en una onda de presentar programación bajo LINUX. En este ejemplo les indico que investigue bastante para conseguir una librería o en este caso un wrapper de python para las API de twitter.

Debo comentar que mi motivación de probar las APIs de Twitter van por el hecho de que participé en un evento en Maracaibo denominado Refresh Maracaibo (@refresh_mcbo). En este evento se presentaron varias charlas de desarrollo y diseño web y pense que esto seria chevere mostrar en una “charla relampago”. Ya envie los detalles y espero respuesta de los organizadores.

Tweepy como wrapper

He leído mucho sobre varios wrappers, entre esos python-twitter y demas, pero muchos no están al día con autenticación vía OAuth, ya los métodos de autenticación simple no son una opción despues de que twitter descontinuara soporte. El wrapper  que hace el trabajo de encapsular las apis de una manera bastante sencilla es Tweepy. Pueden descargarlo desde PyPI o vía easy_install, también puede acceder vía GITHUB

Los próximos pasos están basados en “Twitter from the command line in Python using OAuth” lo que presentara Jeff Miller en su blog. y en la “muy buena” documentación de Tweepy disponible.

Para consultas de solo lectura no es necesario tener una cuenta de twitter. Veamos un ejemplo simple:

importamos tweepy

>>>import tweepy

Instanciamos el wrapper de la api

>>>api = tweepy.API()

Hacemos una busqueda de la palabra “pyhton” y lo almacenamos en la variable “busqueda”

>>>busqueda = api.search(“python”)

El resultado es una lista con tweets que contienen información de la hora fecha lugar de publicación. Para iterarlo debemos emplear un metodo de control repetitivo .

>>> for tweet in busqueda:
. . .           print tweet.text

Autenticandonos para poder hacer más que consultas

 

Para poder tener acceso a cosas mas claves como agregar amigos, actualizar tu estatus, y demás necesitas autenticar tu cuenta usando OAuth. Esto requiere de un poco mas de trabajo para poder hacer

Paso 1: Registrar una nueva aplicación en Twitter

Visita http://twitter.com/oauth_clients y haz click en  Register a new application. (ninguno de estos formularios han sido traducidos al español) Tienes que ingresar a twitter usando tu usuario y password antes de hacer esto.

Llena los campos como corresponden:

Nota: Lo que uses para nombre de la aplicación aparecerá en  “via”, tus seguidores podrán ver esto en cada uno de tus tweets cuando uses tu aplicación vía la linea de comando de python.

Cuando termines con la pantalla de registro dale  click a “Save”.

Próxima Pagina :

Manten la ventana resultante abierta, vamos a necesitar la información en el proximo paso.

Paso 3: Conecta la aplicación a tu cuenta de Twitter

#!/usr/bin/env python

import tweepy

CONSUMER_KEY = 'pega tu Consumer Key aqui'
CONSUMER_SECRET = 'pega tu Consumer Secret aqui'

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth_url = auth.get_authorization_url()
print 'Please authorize: ' + auth_url
verifier = raw_input('PIN: ').strip()
auth.get_access_token(verifier)
print "ACCESS_KEY = '%s'" % auth.access_token.key
print "ACCESS_SECRET = '%s'" % auth.access_token.secret

Pegamos el “Consumer Key” y el “Consumer Secret” que obtuvimos en el paso anterior en este script, de esta manera asignamos valores a las constantes   CONSUMER_KEY and CONSUMER_SECRET. Guarda este escript y ejecutalo en tu sistema.

Please authorize: <URL>
PIN:

Abres ese URL en tu browser. Deberías ver la pantalla OAuth de Twitter solicitando permisos para interacción de tu cuenta con la aplicación.

Le damos click  a “Allow”.

Twitter te proveera un código PIN que da autenticidad a la conexión entre la aplicación cliente y tu cuenta de twitter.

Ingresamos el PIN asignado

PIN: 2781961

El cógigo nos asignara otro par de llaves:

ACCESS_KEY = '124242RCyi3g0cZ4r5BWL047rsh0S0yv5VxAGwTKCOsHAb'
ACCESS_SECRET = 'kaTXiC489qo8y6haTBSlwOqR1syG83tzPG2StdQ'

Los valores son distintos a estos

Este código solo tenemos que usarlo una vez, Despues que autorizamos vía PIN este script no es necesario.

Yo  hice un script nuevo con las 4 constantes y le puse keys.py

CONSUMER_KEY = 'pega tu Consumer Key aqui'
CONSUMER_SECRET = 'pega tu Consumer Secret aqui'
ACCESS_KEY = 'pega tu Access Key aqui'
ACCESS_SECRET = 'pega tu Access Secret aqui'

De esta manera me evito tener que definirlos cada vez que quiera jugar con las partes de la api que necesitan autenticación. Queda claro que esta no es la manera más segura de almacenar estas llaves pero nos sirve para aprender un poco de Twitter.

En nuestra consola de python

>>>import tweepy

Importo las constantes en keys.py

>>>from keys import *

creamos una instancia del manejador de OAuth de Tweepy con las llaves de Consumo de API:

>>>auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)

Asignamos los TOKENS de acceso con las llaves:

>>>auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)

Instanciamos las APIs con la Autenticación que hemos definido.

>>>api = tweepy.API(auth)

Ya con esto podemos hacer cosas que requieren autenticación como actualizar estatus.

>>>api.update_status("Hola #twitter desde una consola de #python!!")

Espero saquen provecho a esto y todo el credito a Jeff Miller por su gran post. No olviden revisar la documentación de tweepy que esta bastante buena.

About these ads

About effiejayx

Ubuntu enthusiast... need I say more? :)
This entry was posted in Español, planetalinux, tur-linux, Uncategorized and tagged , , , . Bookmark the permalink.

17 Responses to Jugando con las APIs de Twitter y PYTHON

  1. Efraín: No sabes como me alegra ver que alguien se interesó por las APP de Twitter. Ahora que ya entraste en el asunto comprenderás porqué para nosotros que no programamos se nos hace cuesta arriba querer jurungar a Twitter. Pero allí hay un mundo de data social que explorar y si te fijas en las últimas cifras que está dando Tendencias Digitales, tomadas de Com Score, Venezuela es uno de los tres países que más han crecido en Twitter este año. Estoy segura que pronto vendrán las empresas de marketing a estudiar el mercado y los políticos a medir la opinión. Mi equipo es sólo académico por ahora, tenemos muchos años investigando pero las redes sociales nos abren una ventana espectacular, sobre todo porque podemos investigar mucho a bajo costo. Me gustaría conversar contigo cuando tengas un tiempito. Allí tienes mi correo

  2. keyya says:

    Como haria con un cliente muy simple de Twiter que se connecta a la API de twitter, introduciendo un id de usuario q me muestre su url y la imagen?

  3. Nelly Soto says:

    Hola Efrain,veo que estas clarisimo con las apis de twitter, precisamente yo estoy tratando de hacer esto desde python, y me esta dando un error desde la consola, aqui esta el código:

    >>> auth = tweepy.OAuthHandler(ckey,csecret)
    >>> redirect_url = auth.get_authorizacion_url()
    Traceback (most recent call last):
    File “”, line 1, in
    AttributeError: ‘OAuthHandler’ object has no attribute ‘get_authorizacion_url’
    >>> redirect_url = auth.get_authorization_url()
    Traceback (most recent call last):
    File “”, line 1, in
    File “build\bdist.win32\egg\tweepy\auth.py”, line 103, in get_authorization_ur
    l
    tweepy.error.TweepError: HTTP Error 401: Unauthorized

    Me da un Error 401, No autorizado, mucho te agradeceria si pudieras ayudarme a ver cual es el error.

    Gracias,

    Nelly

    • effiejayx says:

      Saludos nelly, solo puedo ver que estas haciendo la llamada a auth.get_authorization_url()

      la instancia OAuthHandler llamada auth debe tener dos parametros importantisimos que son que son en tu caso ckey y csecret (consume key y consumer secret). verifica que estos numeros esten bien, sin espacios en blanco ni nada.

      esto lo hice en:

      CONSUMER_KEY = ‘pega tu Consumer Key aqui’
      CONSUMER_SECRET = ‘pega tu Consumer Secret aqui’

      si me enseñas toda tu interacción con el shell de python estaría más seguro de todo lo que estas haciendo.

      Un saludo

    • effiejayx says:

      Entre otras cosas voy a liberar un código en django este fin de semana. Estate pendiente a lo mejor te sirve. Un abrazo

  4. jjuast says:

    Estupendo post.
    Claro y directo. Y funcional que es lo importante.
    Gracias amigo!

  5. Muy bien, claro, conciso, simplemente excelente.
    Este en un muy buen aporte, prometo usar lo aprendido para el bien.
    Gracias.

  6. Excelente Post.
    Saludos.-

  7. jorge2911 says:

    Muy bueno tu post, hice todo lo que dijistes y al final me arroja este error:
    tweepy.error.TweepError: Read-only application cannot POST

    que podra ser?

    • effiejayx says:

      Revisa que tu aplicacin tenga permisos de escritura en la configuracin. Actualmente esta en read-only

    • Maiko says:

      Buenos Dias, estoy intentando de Recrear este Script y tambien me da el mismo error que en una oportunidad Posteaste y que luego mencionaste que habías solucionada

      Específicamente cuando ejecuta esta linea:
      api.update_status(“Hola Mundo”)

      Genera el Siguiente error:
      api.update_status(“Hola Mundo”)
      File “/usr/local/lib/python2.7/dist-packages/tweepy-1.9-py2.7.egg/tweepy/binder.py”, line 185, in _call
      return method.execute()
      File “/usr/local/lib/python2.7/dist-packages/tweepy-1.9-py2.7.egg/tweepy/binder.py”, line 168, in execute
      raise TweepError(error_msg, resp)
      tweepy.error.TweepError: Read-only application cannot POST

      Por favor si me puedes ayudar con eso o darme una iniciativa de investigar como solucionarlo te lo agradecería..

      Ojo Si el Creador del Blog u otra persona sabe como atacar este error esta en la liberta de escribir la solución.

      Información Adicional:

      El Script del Paso 3, tampoco me funciono Bien me dio el siguiente error: tweepy.error.TweepError: HTTP Error 401: Unauthorized
      Pero los valores lo consegui porq la interfaz Web de Twitter http://twitter.com/oauth_clients me muestra los 4 valores que se necesita para que el siguiente Script envie el Tweet, tambien me asegure que los permisos esten en “Lectura y Escritura”

      • Maiko says:

        SOLUCIONADO:

        En mi caso: como no pude ejecutar el paso 2 del BLOG revisando la interfaz WEB de Twitter para delevopers http://twitter.com/oauth_clients Existe un botón que dice crear Token, allí puede generar los Valores de Access Key y Access Secret.

        El problema del Error: tweepy.error.TweepError: Read-only application cannot POST es solo problema de Permiso y por la misma interfaz Web del Twitter permite modificarlo, Existe un botón que te dice “Recreate me Access Token” eso permite que te modifique los permisos pero también va cambiar los valores del Access Key y Access Secret, asi que tienes que estar pendiente con eso.

        Espero que eso les ayude!!

  8. Fernando says:

    Que tal, ya se que tiene algo el post, pero espero me puedas ayudar. Me funciona todo muy bien, lo ejecuto una vez, y me sale el envio del mensaje perfecto, pero cuando intento volverlo a hacer me sale esto :

    Traceback (most recent call last):
    File “escribir.py”, line 9, in
    api.update_status(“Hola #twitter desde una consola de #python!!”)
    File “C:\Python27\lib\site-packages\tweepy-1.8-py2.7.egg\tweepy\binder.py”, li
    ne 185, in _call
    return method.execute()
    File “C:\Python27\lib\site-packages\tweepy-1.8-py2.7.egg\tweepy\binder.py”, li
    ne 168, in execute
    raise TweepError(error_msg, resp)
    tweepy.error.TweepError: Status is a duplicate.

    A que se debe, si en la primera funciono?

  9. Tenex says:

    Esta muy bien tu aporte, sin embargo como sería la forma adecuada de leer la api para poder utilizarla?
    Si yo quisiera obtener todas las menciones que tuvieran un hashtag en particular y almacenarlas en una base de datos como sería?

  10. These gifts to contacts have been a gift in your
    business, something that keeps giving to you over and over again.
    This latter approach requires that you think hard concerning the recipient’s needs, choose one specific need you want to help out in, find a great gift item that may fill that specific need, and purchase brands or models of this specific gift item (that’s, in case you are giving a
    tangible gift). Here are three of the obscure gifts who are not that obvious to both ladies and men, gifts that lie sitting right under our
    noses.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s