рд╢реБрдн рджреЛрдкрд╣рд░, рд╣рдмреНрд░реЛрдЬрд╝рд┐рддреЗрд▓реА!рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдиреА рдЦреБрдж рдХреА рдмрд╛рдЗрдХ рдХреА рдХрд╣рд╛рдиреА рдмрддрд╛рдКрдВрдЧрд╛ред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЬрд╛рд╡рд╛ рдореЗрдВ рдлреЗрд╕рдмреБрдХ рдЧреНрд░рд╛рдл рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдореБрдЭреЗ 3 рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рдереА: рд▓реЙрдЧрд┐рди, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рджреАрд╡рд╛рд░ рдкрд░ рд╕рдВрджреЗрд╢ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ред
рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рдорд┐рд▓рд╛ (рдпрд╛ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЦреЛрдЬрд╛ рдЧрдпрд╛), рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдкрдиреА рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рдЧреНрд░рд╛рдлрд╝ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХрд░ рджреА, рдЬреЛ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВрдЧреЗ,
Google рдХреЛ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдкреАрдбрд╝рд╛
рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдУрдкрди-рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
HtmlUnit рдорд┐рд▓реА ред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдЦрд╛рддреЗ рдореЗрдВ рдлреЗрд╕рдмреБрдХ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:
1) рд╣рдореЗрдВ рдлреЗрд╕рдмреБрдХ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдИрдбреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд▓реЙрдЧрд┐рди рдФрд░ рдПрдХ рдПрдХреНрд╕реЗрд╕рдЯреЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
2) рдлреЙрд░реНрдо рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП HtmlUnitред
рдлреЗрд╕рдмреБрдХ рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛
рд╣рдо
рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "
рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ " рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
"
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо " рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ, "
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЧреЛрдкрдиреАрдпрддрд╛ рдиреАрддрд┐ " рд╕реЗ рд╕рд╣рдордд рд╣реЛрдВ рдФрд░ "
рдЬрд╛рд░реА рд░рдЦреЗрдВ " рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдореЗрдВ, "
рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗрдВ " рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ рдФрд░
рдРрдк рдЖрдИрдбреА рдХреЛ рд╕рд╣реЗрдЬреЗрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦреЗрдВред
public class Facebook { private static final String API_KEY = "1"; private static final String REDIRECT_URL = "https://www.facebook.com/connect/login_success.html"; private static final String LOGIN_FORM_ID = "login_form"; private static final String INPUT_EMAIL_NAME = "email"; private static final String INPUT_PASSWORD_NAME = "pass"; private static final String INPUT_LOGIN_NAME = "login"; private static final String ACCESS_FORM_ID = "uiserver_form"; private static final String INPUT_ALLOW_NAME = "grant_clicked"; private static final String GRAPH_URL = "https://graph.facebook.com/"; private WebClient webClient; private String accessToken; public Facebook() { initWebClient(); } public void login(String email, String password) { try { HtmlForm loginForm = getForm(LOGIN_FORM_ID); if (loginForm != null) { loginForm.getInputByName(INPUT_EMAIL_NAME).setValueAttribute(email); loginForm.getInputByName(INPUT_PASSWORD_NAME).setValueAttribute(password); HtmlPage page = loginForm.getInputByName(INPUT_LOGIN_NAME).click(); HtmlForm accessForm = getForm(page, ACCESS_FORM_ID); if (accessForm != null) { page = accessForm.getInputByName(INPUT_ALLOW_NAME).click(); } if (page.getBody().getTextContent().trim().equalsIgnoreCase("success")) { getAccessToken(page.getUrl()); } } } catch (Exception e) { e.printStackTrace(); } } public String getAccessToken() { return this.accessToken; } public String getUserInfo(String id) { String requestURL = GRAPH_URL + id + "?access_token=" + accessToken; return sendRequest(requestURL); } public String writeInWall(String id, String msg) { String requestURL = GRAPH_URL + id + "?access_token=" + accessToken + "&message=" + encodeMsg(msg); return publish(requestURL); } private void initWebClient() { webClient = new WebClient(); webClient.setCssEnabled(false); webClient.setJavaScriptEnabled(false); } private HtmlForm getForm(String formID) { HtmlForm form = null; try { HtmlPage page = webClient.getPage(getLoginURL()); form = getForm(page, formID); } catch (Exception e) { e.printStackTrace(); } return form; } private HtmlForm getForm(HtmlPage page, String formID) { HtmlForm form = null; List<HtmlForm> forms = page.getForms(); for (HtmlForm tForm : forms) { if (tForm.getId().equalsIgnoreCase(formID)) { form = tForm; break; } } return form; } private void getAccessToken(URL link) { String ref = link.getRef(); String token = "access_token="; String expires = "&expires"; int startIndex = ref.indexOf(token); int endIndex = ref.indexOf(expires); if (startIndex != -1 && endIndex != -1) { accessToken = ref.substring(startIndex + token.length(), endIndex); } } private String sendRequest(String request) { String result = null; try { HttpGet get = new HttpGet(request); DefaultHttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(get); result = EntityUtils.toString(response.getEntity()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } private String publish(String request) { String result = null; try { HttpPost post = new HttpPost(request); DefaultHttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(post); result = EntityUtils.toString(response.getEntity()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } private String encodeMsg(String msg) { try { msg = URLEncoder.encode(msg, HTTP.UTF_8); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return msg; } private String getLoginURL() { return "https://www.facebook.com/dialog/oauth?client_id=" + API_KEY + "&redirect_uri=" + REDIRECT_URL + "&scope=" + getPermissions() + "&response_type=token"; } private String getPermissions() { StringBuilder permissions = new StringBuilder(); permissions.append("read_stream,"); permissions.append("user_birthday,"); permissions.append("user_religion_politics,"); permissions.append("user_relationships,"); permissions.append("user_relationship_details,"); permissions.append("user_hometown,"); permissions.append("user_location,"); permissions.append("user_likes,"); permissions.append("user_activities,"); permissions.append("user_interests,"); permissions.append("user_education_history,"); permissions.append("user_work_history,"); permissions.append("user_online_presence,"); permissions.append("user_website,"); permissions.append("user_groups,"); permissions.append("user_events,"); permissions.append("user_photos,"); permissions.append("user_videos,"); permissions.append("user_photo_video_tags,"); permissions.append("user_notes,"); permissions.append("user_about_me,"); permissions.append("user_status,"); permissions.append("friends_birthday,"); permissions.append("friends_religion_politics,"); permissions.append("friends_relationships,"); permissions.append("friends_relationship_details,"); permissions.append("friends_hometown,"); permissions.append("friends_location,"); permissions.append("friends_likes,"); permissions.append("friends_activities,"); permissions.append("friends_interests,"); permissions.append("friends_education_history,"); permissions.append("friends_work_history,"); permissions.append("friends_online_presence,"); permissions.append("friends_website,"); permissions.append("friends_groups,"); permissions.append("friends_events,"); permissions.append("friends_photos,"); permissions.append("friends_videos,"); permissions.append("friends_photo_video_tags,"); permissions.append("friends_notes,"); permissions.append("friends_about_me,"); permissions.append("friends_status,"); permissions.append("publish_stream,"); permissions.append("create_event,"); permissions.append("rsvp_event,"); permissions.append("sms,"); permissions.append("offline_access,"); permissions.append("publish_checkins,"); permissions.append("manage_friendlists,"); permissions.append("manage_pages"); return permissions.toString(); } }
рд╣рдо рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ред
public class Test { public static void main(String[] args) { Facebook facebook = new Facebook(); facebook.login("email", "pass"); System.out.println(facebook.getUserInfo("me/feed")); System.out.println(facebook.writeInWall("me/feed", "!")); } }
рд╣рдо рдЕрдкрдиреЗ рдкреЗрдЬ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрддреЗ рд╣реИрдВ:
рдкреБрдирд╢реНрдЪрдореИрдВ рдХрд┐рд╕реА рднреА рдЖрд▓реЛрдЪрдирд╛ рдХреЛ рд╕реБрдиреВрдВрдЧрд╛ рдФрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗред