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.

¿Cómo puedo subir más imágenes por tweet con Tweepy?

Me gustaría subir más de una imagen por tweet en Twitter. Pude hacerlo funcionar para una imagen, pero cuando intenté subir más imágenes, surgieron problemas. Intenté implementar otras soluciones que he visto en internet, pero sin éxito. Tal vez también se deba a que acabo de empezar a estudiar Python y no puedo entender los errores correctamente.

Esto es lo que he escrito:

# autenticación en Twitter
auth = tweepy.OAuthHandler(API_KEY, APP_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCCESS_TOKEN_SECRET)

# crear objeto de la API
api = tweepy.API(auth)

# crear tweet
tweet = "Prueba con imágenes"
pics = ["ninja.jpg", "ninja2.jpg"]
media_ids = [api.media_upload(i).media_id_string for i in pics]

status = api.update_status_with_media(filename=media_ids, status=tweet)

El error que obtengo es el siguiente:

Traceback (most recent call last):
  File "/home/bog/2test.py", line 31, in <module>
    status = api.update_status_with_media(filename=media_ids, status=tweet)
  File "/home/bog/.local/lib/python3.9/site-packages/tweepy/api.py", line 46, in wrapper
    return method(*args, **kwargs)
  File "/home/bog/.local/lib/python3.9/site-packages/tweepy/api.py", line 1181, in update_status_with_media
    files = {'media[]': stack.enter_context(open(filename, 'rb'))}
TypeError: expected str, bytes or os.PathLike object, not list

Edit:
También he intentado el siguiente código:

# crear tweet
tweet = "Prueba con imágenes"
pics = ["ninja.jpg", "ninja2.jpg"]
media_ids = []
for pic in pics:
    res = api.media_upload(pic)
    media_ids.append(res.media_id)

status = api.update_status_with_media(media_ids=media_ids, status=tweet)
print(media_ids)

y obtengo este error:

Traceback (most recent call last):
  File "/home/bog/2test.py", line 34, in <module>
    status = api.update_status_with_media(media_ids=media_ids, status=tweet)
  File "/home/bog/.local/lib/python3.9/site-packages/tweepy/api.py", line 46, in wrapper
    return method(*args, **kwargs)
TypeError: update_status_with_media() missing 1 required positional argument: 'filename'

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás pasando una lista de IDs de medios en lugar de un solo nombre de archivo en el método update_status_with_media(), lo cual está causando el error. Aquí te muestro cómo puedes modificar tu código para subir varias imágenes en un tweet:

    # autenticación en Twitter
    auth = tweepy.OAuthHandler(API_KEY, APP_SECRET)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
    
    # crear objeto API
    api = tweepy.API(auth)
    
    # crear tweet
    tweet = "Prueba con imágenes"
    pics = ["ninja.jpg", "ninja2.jpg"]
    media_ids = []
    for pic in pics:
        res = api.media_upload(pic)
        media_ids.append(res.media_id)
    
    status = api.update_status(status=tweet, media_ids=media_ids)
    

    En este código modificado, primero subimos cada imagen por separado usando el método media_upload() y recopilamos sus ID de medios en una lista. Finalmente, pasamos esta lista de IDs de medios junto con el texto del tweet al método update_status(), que es el método correcto para subir múltiples imágenes.

    ¡Espero que esto te ayude!

Comments are closed.