こんにちは、habrozhiteli!今日は自分の自転車の話をします。
JavaでFacebook Graph APIを操作する前に、ログイン、ユーザー情報の受信、壁へのメッセージの投稿の3つの機能に興味がありました。
Javaで動作するライブラリが見つからなかった(または検索が不十分だった)ため、自分の自転車を発明しなければなりませんでした。
Graph APIについて読んだ後、このAPIを使いこなすのに役立つライブラリを探し始めました。
Googleを数分間苦しめ、オープンソースライブラリ
HtmlUnitを見つけました。
それでは始めましょう。 私たちのアカウントでFacebookにログインするために必要なもの:
1)Facebookでアプリケーションを作成する必要があります。このアプリケーションIDを使用して、ログインしてAccessTokenを取得します。
2)フォームに記入するHtmlUnit。
Facebookでアプリケーションを作成する
リンクをたどり、「
新しいアプリケーションを作成する 」ボタンをクリックします。
「
アプリの表示名 」フィールドに入力し、「
プラットフォームプライバシーポリシー 」に同意して、「
続行 」ボタンをクリックします。
ロードされたページで、「
変更を保存」をクリックして、
アプリIDを保存し
ます 。
次に、Javaアプリケーションを作成しましょう。
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", "!")); } }
私たちのページに行き、以下を見てください:
PS批判を聞いて受け入れます。 この記事が誰かを助けてくれたらとてもうれしいです。