Я использовал эту библиотеку для кодирования изображения: http://atlee.ca/software/poster/
Добавить это в facebook.py:
from poster.encode import *
from poster.streaminghttp import register_openers
def put_photo(self, source, album_id=None, message=""):
object_id = album_id or "me"
register_openers()
content_type,body = multipart_encode( [ ('message',message),('access_token',self.access_token),('source',source) ] )
req = urllib2.Request("https://graph.facebook.com/%s/photos" % object_id, content_type,body )
try:
data = urllib2.urlopen(req).read()
except urllib2.HTTPError as e:
data = e.read()
try:
response = _parse_json(data)
if response.get("error"):
raise GraphAPIError(response["error"].get("code", 1),response["error"]["message"])
except ValueError:
response = data
return response
Вызов функции с фотографией в виде файла, подобного объекту:
graph = facebook.GraphAPI(access_token)
photo = open("myphoto.bmp","rb")
graph.put_photo(photo,"me","This is my brilliant photo")
Метод put_photo был предоставлен кем-то (я забыл, кто), поскольку предложил функцию добавления в API, но он не работал для меня, пока я не использовал плакат для кодирования изображения.
Надеюсь, это поможет.