Usando Twython para enviar un tweet, error de la API de Twitter

Estoy tratando de hacer que Python me envíe un tweet usando Twython, pero por alguna razón, todo lo que estoy intentando no funciona.

He seguido el Léame de Twython pero todavía no puedo lograr lo que quiero.

A continuación se muestra mi último bash de código:

from twython import Twython, TwythonError APP_KEY = "KEYHERE" APP_SECRET = "SECRETHERE" twitter = Twython(APP_KEY, APP_SECRET) auth = twitter.get_authentication_tokens() OAUTH_TOKEN = auth['oauth_token'] OAUTH_TOKEN_SECRET = auth['oauth_token_secret'] twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) try: twitter.update_status(status='See how easy this was?') except TwythonError as e: print e 

Al ejecutar el código anterior, obtengo el siguiente error de rastreo:

 Twitter API returned a 401 (Unauthorized), Invalid or expired token 

¿Alguien sabe qué estoy haciendo mal y, lo que es más importante, cómo soluciono esto?

No tengo suficientes puntos para obtener una recompensa, ¡pero realmente agradecería la ayuda!

Gracias por adelantado

editar

 Traceback (most recent call last): File "C:\testtweet.py", line 20, in  final_step = twitter.get_authorized_tokens(oauth_verifier) File "C:\Python27\lib\site-packages\twython\api.py", line 313, in get_authorized_tokens raise TwythonError('Unable to decode authorized tokens.') TwythonError: Unable to decode authorized tokens. 

Lo anterior es la traza recibida del código suministrado por @justhalf

Gracias SMNALLY

Hay una manera mucho más sencilla de actualizar tu publicación en comparación con la forma en que Twython te muestra. Sin embargo, tomará más trabajo en el espacio de la consola de su API, así que permítame comenzar.

  1. En primer lugar, tendrá que ir a la página de aplicaciones . Una vez que haya seleccionado la aplicación que está utilizando en este momento, eche un vistazo a la página que recibe. Debería estar en la pestaña Detalles de forma predeterminada. introduzca la descripción de la imagen aquí

  2. Ahora que está donde se supone que debe estar, haga clic en la pestaña Configuración junto a la pestaña Detalles como se muestra arriba.

  3. Después de eso, desplácese hacia abajo hasta que vea esto: introduzca la descripción de la imagen aquí

  4. Haga clic en la opción como se muestra arriba. Ahora, después de haber seleccionado la opción, desplácese hacia abajo hasta que vea un botón azul que dice Actualizar la configuración de la aplicación de este twitter .

  5. Ahora, vuelve a la pestaña de detalles . Vaya al final y genere sus tokens requeridos, tenga en cuenta que puede tener que hacer clic en los botones un par de veces para que funcione (también, asegúrese de que su nivel de acceso sea Lectura, escritura y mensajes directos cuando el token esté generado): introduzca la descripción de la imagen aquí

  6. Ahora tiene todo lo necesario para conectarse y publicar en su cuenta de Twitter. Tiene la Consumer key del Consumer key y el Consumer Secret del Consumer Secret , el Access token y el Access token secret . Tienes todo lo que necesitas.

Bien, ahora diríjase a su editor de código y escriba el siguiente código de placa de caldera (estas teclas no funcionan, simplemente me deshice de la aplicación, así que no hay pirateo aquí: P Las he dado simplemente como una indicación de la longitud) de las claves que debes esperar):

 from twython import Twython APP_KEY = '' # Customer Key here APP_SECRET = '' # Customer secret here OAUTH_TOKEN = '1936951807-z5bBNING8P1TU2onWvJh5dh8hoYlYAmNOaAx2OX' # Access Token here OAUTH_TOKEN_SECRET = 'QWJEZ7ridSeZGdxJELSBk7mupCpMA9q9sLCou5ywg' # Access Token Secret here twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) twitter.update_status(status="Hello from Python! :D") 

Después de esto, revisa tu twitter, deberías ver un nuevo tweet que dice “¡Hola de Python!: D”.

Vamos a tratar de descubrir juntos lo que salió mal.

Noto esto en la documentación :

Ahora que tiene el oauth_verifier almacenado en una variable, querrá crear una nueva instancia de Twython y tomar los tokens de usuario final

Y el código debajo:

 twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) final_step = twitter.get_authorized_tokens(oauth_verifier) 

¿Entonces parece que te perdiste el final_step ?

Luego después de eso (de la documentación):

Una vez que tenga los tokens de usuario final, ¡guárdelos en una base de datos para usarlos más tarde !:

 OAUTH_TOKEN = final_step['oauth_token'] OAUTH_TOKEN_SECERT = final_step['oauth_token_secret'] 

Después de eso, supongo que tendrás que crear otra nueva instancia de Twython con el final OAUTH_TOKEN y OAUTH_TOKEN_SECRET . Entonces el código completo sería algo como esto, supongo:

 from twython import Twython, TwythonError import requests APP_KEY = "KEYHERE" APP_SECRET = "SECRETHERE" twitter = Twython(APP_KEY, APP_SECRET) auth = twitter.get_authentication_tokens() OAUTH_TOKEN = auth['oauth_token'] OAUTH_TOKEN_SECRET = auth['oauth_token_secret'] twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) ### This is the part you're missing ### oauth_verifier_url = auth['auth_url'] oauth_verifier = requests.get(oauth_verifier_url) # Getting the FINAL authentication tokens final_step = twitter.get_authorized_tokens(oauth_verifier) OAUTH_TOKEN = final_step['oauth_token'] OAUTH_TOKEN_SECRET = auth['oauth_token_secret'] twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) ### Up until this line ### try: twitter.update_status(status='See how easy this was?') except TwythonError as e: print e 

No tengo la clave de la aplicación de Twitter, así que no puedo intentarlo.

Pero supongo que esto debería ser suficiente para resolver su problema. Espero que esto ayude. =)

Tenga en cuenta que utilicé el paquete de requests de Python.

la razón por la que el código está devolviendo la Twitter API returned a 401 (Unauthorized), Invalid or expired token es que necesita outh_verifier después de una llamada a get_authentication_tokens() Intente estos pasos para una llamada exitosa a twitter y obtenga el oauth_verifier

 from twython import Twython, TwythonError twitter = Twython(APP_KEY, APP_SECRET) auth = twitter.get_authorization_tokens(callback_url='http://google.com') oauth_token = auth['oauth_token'] oauth_token_secret = auth['oauth_token_secret'] print auth print auth['auth_url'] 

auth [‘auth_url’] imprimirá una respuesta como:

https://api.twitter.com/oauth/authenticate?oauth_token=xxxxxxxxx

Vaya a esta URL para autorizar su aplicación

introduzca la descripción de la imagen aquí

Una vez que la aplicación se haya autorizado, enviará el cliente a su callback_url

El callback_url se adjuntará con el oauth_verifier

algo como http://google.com/?oauth_verifier=xxxxxx&oauth_token=xxxxxx

Dependiendo del webframwork que esté utilizando, necesita OBTENER la respuesta para oauth_verifier Ahora cree una nueva instancia de Twython

 twitter = Twython(APP_KEY, APP_SECRET, oauth_token, oauth_token_secret) final_tokens = twitter.get_authorized_tokens(oauth_verifier) print final_tokens # these are the keys you will use to make calls on the users behalf from here on forward f_oauth_token = final_tokens['oauth_token'] f_oauth_token_secret = final_tokens['oauth_token_secret'] 

Actualizando el estado de Twitter:

 twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN=f_oauth_token, OAUTH_TOKEN_SECRET=f_oauth_token_secret) try: twitter.update_status(status='See how easy this was?') except TwythonError as e: print e 

Y actualizar la configuración de la aplicación de Twitter como lo menciona @Games Brainiac

Estoy agregando a la siguiente discusión que una conexión a otro servidor también puede impedir la conexión en la API de flujo. Por ejemplo, tuve un Rserve () abierto y seguí recibiendo el error 401, pero cuando hice Killall Rserve en el símbolo del sistema, se otorgó la autorización …

Normalmente, si desea actualizar un estado con su aplicación, debe autenticarse con la autenticación OAuth1.1 (a la que se hace referencia como autenticación de usuario, en lugar de la autenticación solo de aplicación).

Desafortunadamente para cualquiera que esté creando una aplicación de Twitter, esto requiere una gran cantidad de código adicional (donde la autenticación de la aplicación solo requiere 3 o 4 líneas de código).

Hace un tiempo, he publicado un código completo para tratar con OAuth1.1 usando Flask y Twython (sin el manejo de errores, puede tratar esto como desee) aquí . Esta solución usa archivos de sesión para manejar tokens y luego borra la sesión al cerrar sesión. (El código podría no ser perfecto y probablemente podría mejorarse; soy un progtwigdor bastante novato)