如何使用 Haskell 将照片上传到 Facebook



我正在使用Happstack,我正在尝试使用Facebook Graph API将照片上传到Facebook。

我可以成功地将消息发布到Facebook。我可以使用url,但是我正在尝试使用 source 参数执行此操作。

我有一个PNG数据的ByteString,但我似乎无法将其传递给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 Jan 2015 05:06:00 GMT"),("Connection","close"),("Content-Length","3121")] (CJ {expose = []})

我做错了什么?图形 API 指出source参数应该是表单数据类型,但到目前为止,我尝试将其转换为此类参数尚未成功。

谢谢!

请检查照片内容是否编码正确。它需要按照以下说明进行multipart/form-data

  • https://developers.facebook.com/docs/graph-api/reference/v2.2/user/photos#publish

Tobi说的是正确的。正确执行此操作的代码是:

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

享受!

相关内容

  • 没有找到相关文章

最新更新