facebook graph api - Is it possible to open an in-memory image using the python open function? -
i using python library (poster) takes file-like object argument, documentation states:
the file-like objects must support .read() , either .fileno() or both .seek() , .tell().
i have tried library using python open function , works fine. downloading image url using following:
access_token = "xxxxxxxxxxxxxxxxxxxxx" postphotourl = "https://graph.facebook.com/me/photos?access_token=%s" % access_token register_openers() # image external url data = urllib2.urlopen("http://example.com/image.png") data = stringio(data.read()) ### data, headers = multipart_encode({"source":open("file.png")}) <- works fine data, headers = multipart_encode({"source":data}) request = urllib2.request(postphotourl,data,headers) edit: goal fetch image external url , post using facebook graph api. when use python open function have no issues. when try use stringio, no body sent post request.
if idea use poster package streaming http upload, shouldn't converting image data pil image object. do...
data = urllib2.urlopen("http://example.com/image.png") data = stringio(data.read()) ...then can pass data variable poster.
unless, of course, wanted convert image pil first, should mention in question.
update
as why fails stringio, might poster checking filename of open file, , using determine correct content-type or somesuch, won't able when reading stringio.
i've never used package, , examples aren't comprehensive, might worth checking difference between headers variables when call like...
from poster.encode import multipart_encode data = open('example.png', 'rb') datagen, headers = multipart_encode({"image1": data}) ...versus...
from poster.encode import multipart_encode data = urllib2.urlopen("http://example.com/image.png") data = stringio(data.read()) datagen, headers = multipart_encode({"image1": data}) update #2
looks right content-type thing. poster source code of encode.py lines 168-174...
if hasattr(value, 'read'): # looks file object filename = getattr(value, 'name', none) if filename not none: filetype = mimetypes.guess_type(filename)[0] else: filetype = none ...although there may other issues if filename none. try this...
from poster.encode import multipart_encode, multipartparam data = urllib2.urlopen("http://example.com/image.png") data = stringio(data.read()) param = multipartparam(name='source', filename='image.png', filetype='image/png', fileobj=data) datagen, headers = multipart_encode({"source": param})
Comments
Post a Comment