¿Por qué mi bot de Twitter no está publicando su “.update_status”?
El código está destinado simplemente a un tweet de prueba y devuelve un error. Estoy siguiendo un tutorial y parece que no están obteniendo el mismo error. El tutorial es de mayo de 2020, pero la documentación de tweepy no parece haber cambiado en estos aspectos simples.
import tweepy
import time
consumer_key = 'xxx'
consumer_secret = 'xxx'
bearertoken = "xxx"
access_token = 'xxx'
access_token_secret = 'xxx'
Autenticación en Twitter
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
Crear objeto API
api = tweepy.API(auth, wait_on_rate_limit=True)
Crear tweet
api.update_status('1')
Cuando el código intenta ejecutarse, devuelve este código de error.
Traceback (most recent call last):
File "/Users/thisaintyocompgetoff/Desktop/Twitterbot/twitterbot.py", line 16, in <module>
api.update_status('1')
File "/Users/thisaintyocompgetoff/Desktop/Twitterbot/tweepy/api.py", line 46, in wrapper
return method(*args, **kwargs)
File "/Users/thisaintyocompgetoff/Desktop/Twitterbot/tweepy/api.py", line 1128, in update_status
), status=status, **kwargs
File "/Users/thisaintyocompgetoff/Desktop/Twitterbot/tweepy/api.py", line 259, in request
raise Forbidden(resp)
tweepy.errors.Forbidden: 403 Forbidden
453 - Actualmente tienes acceso esencial, que incluye acceso solo a los puntos finales de la Twitter API v2. Si necesitas acceso a este punto final, deberás solicitar acceso elevado a través del Portal del Desarrollador. Puedes obtener más información aquí: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-leve
No tengo acceso elevado ni debería tenerlo para publicar un tweet de prueba. Por lo tanto, debo desconocer alguna forma de enviar solo una solicitud a la vez. También he comprobado que la cuenta no tenga ya el tweet publicado.
davy.ai
Solución
El mensaje de error indica que el punto de acceso a la API utilizado en el código requiere Accesso elevado, el cual no está disponible con el nivel de acceso actual. El código de error 403 especifica que la solicitud fue entendida, pero el servidor se niega a cumplirla.
Dado que el error está relacionado con el punto de acceso a la API y el nivel de acceso, no hay nada malo con el código en sí. El tutorial podría haber utilizado un nivel de acceso más alto, pero como no tienes Accesso elevado, se produjo el error.
Para resolver el problema, puedes solicitar Accesso elevado a través del Portal del Desarrollador o utilizar un punto de acceso a la API que no requiera Accesso elevado.
Adicionalmente, para enviar sólo una solicitud a la vez, puedes agregar un retraso entre las llamadas a la API utilizando el método
time.sleep()
. Esto evitará que se exceda el límite de velocidad y asegurará que las solicitudes se envíen una a la vez.En el fragmento de código anterior, se ha añadido un retraso de 60 segundos utilizando el método
time.sleep()
para evitar exceder el límite de velocidad. Esto asegurará que las solicitudes se envíen una a la vez y que no se exceda el límite de velocidad.