1.Facebook api를 사용해서 글등록시 연속으로 등록 시 스팸방지 에러메세지가 뜨며 등록이 되지 않는다. 결국 Htmlunit 라이브러리를 이용하여 가상브라우져에서 등록하는 방식으로 구현하였슴


2. 개발에 유의한점은 

- html 을 단순화하여 분석하기 위해 모바일 페이지로 접속(m.facebook.com)

- 한글/영문등 언어별로 페이지가 다르게 나타나므로 한글페이지로 접속하도록 http header 강제 설정


3. 소스 

- 아래 소스에서 ID, PW를 facebook 계정으로 바꾸어 사용하면 됨

import java.util.List; import org.apache.log4j.Logger; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlInput; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class FacebookPost2 { private static Logger log = Logger.getLogger("facebook2"); public static void main(String[] args) throws Exception { new FacebookPost2().reg("", "test"); } public void reg(String title, String content) throws Exception{ String message = ""; message = content; WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8); //브라우져 Header 설정 webClient.addRequestHeader("Accept-Language", "ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4, value"); webClient.addRequestHeader("Accept-Charset", "windows-949,utf-8;q=0.7,*;q=0.3"); webClient.setThrowExceptionOnScriptError(true); webClient.getCookieManager().setCookiesEnabled(true); webClient.setJavaScriptEnabled(true); //페이지 접속 HtmlPage page = (HtmlPage) webClient.getPage("http://m.facebook.com"); List<htmlform> htmlf = page.getForms(); //1번째 Form HtmlForm form = htmlf.get(0); //ID/PW 설정 form.<htmlinput> getInputByName("email").setValueAttribute(ID); form.<htmlinput> getInputByName("pass").setValueAttribute(PW); page = (HtmlPage) form.getInputByName("login").click(); Thread.sleep(100); log.error("button click"); //글 등록 page.<htmlelement> getElementByName("status").focus(); page.<htmlelement> getElementByName("status").setTextContent(message); page.<htmlelement> getElementByName("update").click(); //브라우져 닫기 webClient.closeAllWindows(); } }</htmlelement></htmlelement></htmlelement></htmlinput></htmlinput></htmlform>

<< 위코드는 약간의 수정이 필요합니다>>

 


http://krazyhe.tistory.com/23

 

Posted by 장안동베짱e :