0

スクライブライブラリを使用して facebook に画像を投稿しようとしています。私のコードは次のとおりです。

String apiKey = "MY_API_KEY";
        String apiSecret = "MY_SECRET_KEY";
        OAuthService service = new ServiceBuilder().provider(FacebookApi.class).apiKey(apiKey)
                .apiSecret(apiSecret)
                .callback("MY_CALL_BACK_URL")
                .build();

        Token accessToken = new Token("MY_ACCESS_TOKEN","");
        OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL_STREAM);       
        request.addHeader("Content-Type", "text/html");      
        request.addBodyParameter("message", "Testing auto update.. Please ignore " + new DateTime());           
        //MultiPart for pic
        Multipart mp = new MimeMultipart();
        MimeBodyPart htmlPart = new MimeBodyPart();
        ByteArrayOutputStream out = new ByteArrayOutputStream();    
        try {
            byte[] imagePayLoad = msgBody.getBytes("UTF-8");    //msgBody contains html string   
            byte[] mpByte = new byte[imagePayLoad.length];
            htmlPart.setContent(msgBody, "text/html");
            mp.addBodyPart(htmlPart);           
            //here I get the bytes[] of mp to out
            mp.writeTo(out);
            out.write(mpByte);      

            request.addPayload(mpByte);
        } catch (Exception e) {         
            e.printStackTrace();
        }   
        service.signRequest(accessToken, request);
        Response response = request.send();
        System.out.println("Response");
        System.out.println();    
        System.out.println(response.getCode());
        System.out.println(response.getBody());

    }

しかし、私も得ます

400
{"error":{"message":"(#100) Missing message or attachment","type":"OAuthException","code":100}}

誰でも助けてくれませんか、マルチパートを取り出すと、「自動更新をテストしています..お願いします..」というテキストが Facebook に更新されます。写真をバイト[]としてアップロードする必要があります。

ありがとう

私は使っている:

 <dependency>
<groupId>org.scribe</groupId>
<artifactId>scribe</artifactId>
<version>1.3.0</version>
</dependency>
4

1 に答える 1

1

Scribe は、 または のいずれaddBodyParameterかを使用addPayloadします。両方ではありません。このメソッドを参照してください。

その道を行くなら、マルチパートaddPayloadに入る方法も理解する必要があると思いますmessage

注: リクエストの実際のコンテンツの文字列出力 ( Request#getBodyContentsを使用) が適切です。

于 2012-05-23T21:33:44.470 に答える