¿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'
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: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étodoupdate_status()
, que es el método correcto para subir múltiples imágenes.¡Espero que esto te ayude!