Django的。推文保存在ImageField上

时间:2016-05-24 20:09:23

标签: python django twitter tweepy

我想推特保存在模特ImageField上的图片。我使用的是tweepy,但我可以使用任何可行的内容。

这是我尝试过的:

首先

api = tweepy.API(auth)
api.update_with_media(filename=model_object.image.name, status=text, file=model_object.image)
  

错误:TweepError:图像的文件类型无效:无

,然后

from PIL import Image

api = tweepy.API(auth)
image_file = Image.open(model_object.image)
api.update_with_media(filename=model_object.image.name, status=text, file=image_file)
  

219,在update_with_media中       header,post_data = API._pack_image(filename,3072,form_field =' media []',f = f)文件   " /home/alejandro/Proyectos/criptohisoka/local/lib/python2.7/site-packages/tweepy/api.py" ;,   第1311行,在_pack_image中       f.seek(0,2)#寻找文件结束TypeError:seek()只需2个参数(给定3个)

最后:

from PIL import Image
from StringIO import StringIO

api = tweepy.API(auth)
image_file = Image.open(model_object.image)
stringio_obj = StringIO()
image_file.save(stringio_obj, format="JPEG")
api.update_with_media(filename=model_object.image.name, status=text, file=stringio_obj)
  

TweepError:图像的文件类型无效:无

我不确定update_with_media方法对文件的期望。以下是相关tweepy source code,此处为docs

1 个答案:

答案 0 :(得分:1)

由于upload_with_media端点已被弃用,请参阅here,我建议您使用以下方法:

使用文件的绝对路径

media_ids = api.media_upload(filename=model_object.image.file.name)

Twitter API将使用media_ids变量中缓存的长整数进行响应。

最后,使用update_status端点:

params = {'status': 'chop chop chop', 'media_ids': [media_ids.media_id_string]}
response = api.update_status(**params)

供参考,请参阅tweepy中的方法定义,以及它们在Twitter api中的对应关系:

  1. Tweepy: media_upload
  2. Tweepy: update_status
  3. Twitter API: update endpoint
  4. Twitter API: media_upload endpoint