¿Cómo puedo recuperar todos los Tweets y atributos para un usuario determinado utilizando Python?

Estoy intentando recuperar datos de Twitter, usando Tweepy para un nombre de usuario escrito en la línea de comandos. Tengo ganas de extraer un poco de datos sobre el estado y el usuario, por lo que he encontrado lo siguiente:

Tenga en cuenta que estoy importando todos los módulos requeridos y tengo teclas oauth + (simplemente no se incluyen aquí) y el nombre de archivo es correcto, solo se ha cambiado:

# define user to get tweets for. accepts input from user user = tweepy.api.get_user(input("Please enter the twitter username: ")) # Display basic details for twitter user name print (" ") print ("Basic information for", user.name) print ("Screen Name:", user.screen_name) print ("Name: ", user.name) print ("Twitter Unique ID: ", user.id) print ("Account created at: ", user.created_at) timeline = api.user_timeline(screen_name=user, include_rts=True, count=100) for tweet in timeline: print ("ID:", tweet.id) print ("User ID:", tweet.user.id) print ("Text:", tweet.text) print ("Created:", tweet.created_at) print ("Geo:", tweet.geo) print ("Contributors:", tweet.contributors) print ("Coordinates:", tweet.coordinates) print ("Favorited:", tweet.favorited) print ("In reply to screen name:", tweet.in_reply_to_screen_name) print ("In reply to status ID:", tweet.in_reply_to_status_id) print ("In reply to status ID str:", tweet.in_reply_to_status_id_str) print ("In reply to user ID:", tweet.in_reply_to_user_id) print ("In reply to user ID str:", tweet.in_reply_to_user_id_str) print ("Place:", tweet.place) print ("Retweeted:", tweet.retweeted) print ("Retweet count:", tweet.retweet_count) print ("Source:", tweet.source) print ("Truncated:", tweet.truncated) 

Me gustaría que esto se repitiera en todos los tweets de un usuario (hasta el límite de 3200). Lo primero es lo primero, sin embargo. Hasta ahora, aunque tengo dos problemas, recibo el siguiente mensaje de error con respecto a los retweets:

 Please enter the twitter username: barackobamaTraceback (most recent call last): File " usertimeline.py", line 64, in  timeline = api.user_timeline(screen_name=user, count=100, page=1) File "C:\Python32\lib\site-packages\tweepy-1.4-py3.2.egg\tweepy\binder.py", line 153, in _call raise TweepError(error_msg) tweepy.error.TweepError: Twitter error response: status code = 401 Traceback (most recent call last): File "usertimeline.py", line 42, in  user = tweepy.api.get_user(input("Please enter the twitter username: ")) File "C:\Python32\lib\site-packages\tweepy-1.4-py3.2.egg\tweepy\binder.py", line 153, in _call raise TweepError(error_msg) tweepy.error.TweepError: Twitter error response: status code = 404 

Pasar el nombre de usuario como una variable parece ser un problema también:

 Traceback (most recent call last): File " usertimleline.py", line 64, in  timeline = api.user_timeline(screen_name=user, count=100, page=1) File "C:\Python32\lib\site-packages\tweepy-1.4-py3.2.egg\tweepy\binder.py", line 153, in _call raise TweepError(error_msg) tweepy.error.TweepError: Twitter error response: status code = 401 

He aislado ambos errores, es decir, no están trabajando juntos.

Perdone mi ignorancia, no estoy demasiado caliente con las API de Twitter, pero estoy aprendiendo bastante rápido. La documentación de Tweepy realmente apesta y he leído muchas vueltas en la red, parece que no puedo arreglarlo. Si puedo arreglar esto, estaré publicando algo de documentación.

Sé cómo transferir los datos a una base de datos de MySQL una vez extraídos (lo hará, en lugar de imprimirlos en la pantalla) y manipularlos para que pueda hacer cosas con ellos, es solo eliminarlos con los que tengo problemas. . ¿Alguien tiene alguna idea o hay otro método que debería estar considerando?

Cualquier ayuda realmente apreciada. Aclamaciones

EDITAR:

Siguiendo la sugerencia de @Eric Olson esta mañana; Hice lo siguiente.

1) Creé un conjunto completamente nuevo de credenciales de Oauth para probar. 2) Copiado el código en un nuevo script de la siguiente manera:

Oauth

 consumer_key = "(removed)" consumer_secret = "(removed)" access_key="88394805-(removed)" access_secret="(removed)" auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_key, access_secret) api=tweepy.API(auth) # confirm account being used for OAuth print ("API NAME IS: ", api.me().name) api.update_status("Using Tweepy from the command line") 

La primera vez que ejecuto el script, funciona bien, actualiza mi estado y devuelve el nombre de la API de la siguiente manera:

 >>> API NAME IS: Chris Howden 

Entonces a partir de ese momento entiendo esto:

 Traceback (most recent call last): File "C:/Users/Chris/Dropbox/Uni_2012-3/6CC995 - Independent Studies/Scripts/get Api name and update status.py", line 19, in  api.update_status("Using Tweepy frm the command line") File "C:\Python32\lib\site-packages\tweepy-1.4-py3.2.egg\tweepy\binder.py", line 153, in _call raise TweepError(error_msg) tweepy.error.TweepError: Twitter error response: status code = 403 

La única razón por la que puedo ver que está haciendo algo como esto es porque está rechazando el token de acceso generado. No debería necesitar renovar el token de acceso ¿debería?

Si estás dispuesto a probar otra biblioteca, podrías darle una oportunidad a Rauth . Ya hay un ejemplo de Twitter, pero si te sientes perezoso y solo quieres un ejemplo funcional, así es como modificaría el script de demostración:

 from rauth import OAuth1Service # Get a real consumer key & secret from https://dev.twitter.com/apps/new twitter = OAuth1Service( name='twitter', consumer_key='J8MoJG4bQ9gcmGh8H7XhMg', consumer_secret='7WAscbSy65GmiVOvMU5EBYn5z80fhQkcFWSLMJJu4', request_token_url='https://api.twitter.com/oauth/request_token', access_token_url='https://api.twitter.com/oauth/access_token', authorize_url='https://api.twitter.com/oauth/authorize', base_url='https://api.twitter.com/1/') request_token, request_token_secret = twitter.get_request_token() authorize_url = twitter.get_authorize_url(request_token) print 'Visit this URL in your browser: ' + authorize_url pin = raw_input('Enter PIN from browser: ') session = twitter.get_auth_session(request_token, request_token_secret, method='POST', data={'oauth_verifier': pin}) params = {'screen_name': 'github', # User to pull Tweets from 'include_rts': 1, # Include retweets 'count': 10} # 10 tweets r = session.get('statuses/user_timeline.json', params=params) for i, tweet in enumerate(r.json(), 1): handle = tweet['user']['screen_name'].encode('utf-8') text = tweet['text'].encode('utf-8') print '{0}. @{1} - {2}'.format(i, handle, text) 

Puede ejecutar esto como está, pero asegúrese de actualizar las credenciales. Estos son sólo para fines de demostración.

Revelación completa, soy el mantenedor de rauth.

Obtienes una respuesta al 401, que significa “No autorizado”. (ver códigos de estado HTTP)

Tu código se ve bien. El uso de api.user_timeline(screen_name="some_screen_name") funciona para mí en el antiguo ejemplo que tengo por ahí.

Supongo que debe autorizar la aplicación o hay algún problema con su configuración de OAuth.

Tal vez ya hayas encontrado esto, pero aquí está el ejemplo del código corto que comencé desde: https://github.com/nloadholtes/tweepy/blob/nloadholtes-examples/examples/oauth.py