Как я могу загрузить фотографию в Facebook, используя Haskell?

Я использую Happstack и пытаюсь загрузить фотографию в Facebook с помощью API Graph Facebook.

Я могу успешно опубликовать сообщение в Facebook. я могу использовать urlОднако я пытаюсь сделать это с source параметр.

У меня есть ByteString данных PNG, но я не могу передать их в Facebook.

Я использую библиотеку fb Haskell.

Функции, которые я создал для этого:

performPost :: String -> IO Response
performPost code = do
    x <- BS.readFile "test.png"
    performFBAction $ do
        postToFB (BS.unpack x) code =<< getToken url2 code
        return $ toResponse postFB

postToFB :: (MonadResource m, MonadBaseControl IO m) => String -> String -> FB.UserAccessToken -> FB.FacebookT FB.Auth m FB.Id
postToFB dataString code token = FB.postObject "me/photos" [args "message" "Test Post Pls Ignore",
                                                            args "source" dataString] token

Ошибка, которую я получаю:

Ошибка была "StatusCodeException (Status {statusCode = 400, statusMessage = "Bad Request"}) [("Content-Type","text/html; charset=utf-8"),("Date","Thu, 29 Январь 2015 05:06:00 GMT"),("Connection","close"),("Content-Length","3121")] (CJ {expose = []})

Что я делаю неправильно? API Graph утверждает, что source параметр должен иметь тип данных формы, но я до сих пор безуспешно пытался преобразовать его в такой.

Спасибо!

2 ответа

Решение

Пожалуйста, проверьте, правильно ли закодировано содержание фотографии. Это должно быть multipart/form-data как указано на

То, что сказал Тоби, верно. Код для правильного выполнения этой операции:

postPhoto :: FB.UserAccessToken -> IO Response
postPhoto (FB.UserAccessToken _ b _) = withSocketsDo $ withManager $ \m -> do
    fbpost <- parseUrl $ "https://graph.facebook.com/v2.2/me/photos?access_token=" ++ T.unpack b
    flip httpLbs m =<<
        (formDataBody [partBS "message" "Test Message",
                       partFileSource "graph" "graph.png"]
                      fbpost)
    return $ toResponse postFB

Наслаждайтесь!

Другие вопросы по тегам