GraphAPIError: (# 324) Требуется загрузить файл - PullRequest
2 голосов
/ 24 февраля 2011

Я пытаюсь загрузить картинку с помощью Python SDK:

Код:

graph = facebook.GraphAPI(self.current_user.access_token)
graph.put_object("me", "photos", name = "test", message = raw_picture_data)

Но я получаю ошибку "GraphAPIError: (#324) Requires upload file". Я не думаю, что это проблема с разрешениями, поскольку я просил perms = "user_photos, friends_photos, publish_stream" Кто-нибудь знает, что означает эта ошибка и как ее устранить?

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Я использовал эту библиотеку для кодирования изображения: 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, но он не работал для меня, пока я не использовал плакат для кодирования изображения.

Надеюсь, это поможет.

0 голосов
/ 25 июня 2012

Просто немного поборолся с похожей ошибкой. Я не использовал SDK, а просто POST для графапи. Для меня эта ошибка произошла, когда я не указал имя файла в поле загрузки файла в «форме», отправленной на facebook. Это мой код (афиша - http://pypi.python.org/pypi/poster/0.8.1)

from poster.encode import multipart_encode, MultipartParam
url = 'https://graph.facebook.com/me/photos?access_token=%s'%model.facebook_token
file_param = MultipartParam(name = 'source',
                            filename = 'photo.jpg', #this is crucial!!!
                            fileobj = blob_reader) #the blob reader is the fileobject for the file (with read() method)
message_param = MultipartParam(name = 'message',
                               value = 'test message')                                

datagen, headers = multipart_encode([file_param,
                                     message_param])
from google.appengine.api import urlfetch
result = urlfetch.fetch(url, 
               payload = ''.join(datagen), 
               headers = headers,
               method = 'POST')     
return result.content                             
0 голосов
/ 05 марта 2011

Может быть, вы можете попробовать это. http://od -eon.com / блог / Тудор / facebook-фото-загрузка-Google-приложение двигатель /

Я пытался использовать это, чтобы решил мою проблему , но я получил этот ответ -
{"error": {"type": "OAuthException", "message": "Вы должны использовать https: // при передаче токена доступа"}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...