2012-05-23 2 views
1

scribe 라이브러리를 사용하여 페이스 북에 이미지를 게시하려고합니다. 내 코드는 다음과 같습니다스크 라이브 라이브러리를 사용하여 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}} 

나는 여러 부분, 텍스트 꺼내 경우 사람이 도와 주실 래요 ".. 난을 테스트 자동 업데이트를하시기 바랍니다 .."업데이트됩니다 페이스 북에. 사진과 바이트 []를 업로드해야합니다.

덕분에 내가 사용하고

:

<dependency> 
<groupId>org.scribe</groupId> 
<artifactId>scribe</artifactId> 
<version>1.3.0</version> 
</dependency> 
+0

최신 버전은'1.3.1'입니다 (이것은 관련이 없지만 최신 안정 버전에서 항상 멋지다는 것에 유의하십시오). –

답변

2

스크는 사용 중 addBodyParameter 또는 addPayload, 둘 중. this method을 참조하십시오.

addPayload 방법을 사용하면 message을 멀티 파트로 가져 오는 방법을 알아 내야 할 것입니다.

참고 : 실제 요청 내용의 문자열 출력 (Request#getBodyContents 사용)은 좋을 것입니다.

+0

감사합니다. @Pablo 제가 가지고있는 라이브러리에서 org.scribe.model.Request 메소드가 보이지 않는다고 물어 보려고했는데, 방금 버전 1.3.1에 대한 업데이트를 보았습니다. 또한 byte [] getByteBodyContents()에 액세스 할 수 없다는 것을 알았습니다. 실제로 Eclipse에서는 org.scribe.model.Request가 표시되지 않는다고 경고합니다. 어떤 도움을 주셔서 감사합니다 :) –

+0

'getBodyContents' 공개해야합니다 (링크 참조). 문자열을 반환하는 변형입니다. –

+0

바이너리 컨텐트를 보내고 있기 때문에'org.scribe.model.Request' 라인 256에서 볼 수 있듯이 public이 아닌'getByteBodyContents()'에 관심이 있습니다. 따라서'org에서 접근 할 수없는 변경자가 없습니다. scribe.model.OAuthRequest' - 이것은 의도적으로 설계된 것입니까? repo를 포크하고 고칠 수 있습니까? 감사합니다 –

관련 문제