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.







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
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?
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
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
Entre otras cosas voy a liberar un código en django este fin de semana. Estate pendiente a lo mejor te sirve. Un abrazo
Estupendo post.
Claro y directo. Y funcional que es lo importante.
Gracias amigo!
Muy bien, claro, conciso, simplemente excelente.
Este en un muy buen aporte, prometo usar lo aprendido para el bien.
Gracias.
Excelente Post.
Saludos.-
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?
solucionado!
Revisa que tu aplicacin tenga permisos de escritura en la configuracin. Actualmente esta en read-only
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”
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!!
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?
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?