es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , ,

Answer

  1. Avatar for 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.

    import tweepy
    import time
    
    consumer_key = 'xxx'
    consumer_secret = 'xxx'
    access_token = 'xxx'
    access_token_secret = 'xxx'
    
    # Autenticarse en Twitter
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    
    # Crear objeto de API
    api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
    
    # Crear un tweet
    api.update_status('Probando llamada a la API.')
    time.sleep(60) # Agregar un retraso de 60 segundos
    

    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.

Comments are closed.