JavaでFacebook Graph APIを使用する

こんにちは、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 { /* App ID */ private static final String API_KEY = "1"; /*   ,      . */ private static final String REDIRECT_URL = "https://www.facebook.com/connect/login_success.html"; /* ID  . */ private static final String LOGIN_FORM_ID = "login_form"; /*  e-mail . */ private static final String INPUT_EMAIL_NAME = "email"; /*  password . */ 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"; /*   Graph API. */ private static final String GRAPH_URL = "https://graph.facebook.com/"; /* HtmlUnit -. */ private WebClient webClient; /*  AccessToken. */ private String accessToken; public Facebook() { initWebClient(); } /** *   Facebook   email  password. */ public void login(String email, String password) { try { /*   . */ HtmlForm loginForm = getForm(LOGIN_FORM_ID); if (loginForm != null) { /*   email. */ loginForm.getInputByName(INPUT_EMAIL_NAME).setValueAttribute(email); /*   password. */ loginForm.getInputByName(INPUT_PASSWORD_NAME).setValueAttribute(password); /*   ""   ,     Facebook. */ HtmlPage page = loginForm.getInputByName(INPUT_LOGIN_NAME).click(); /*     . */ HtmlForm accessForm = getForm(page, ACCESS_FORM_ID); if (accessForm != null) { /*    ""   ,     Facebook. */ page = accessForm.getInputByName(INPUT_ALLOW_NAME).click(); } /* ,      . */ if (page.getBody().getTextContent().trim().equalsIgnoreCase("success")) { /*  AccessToken. */ 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); } /** *  WebClient. */ private void initWebClient() { webClient = new WebClient(); /*  CSS. */ webClient.setCssEnabled(false); /*  JavaScript. */ webClient.setJavaScriptEnabled(false); } /** *    formID. */ 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; } /** *    formID   page. */ 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; } /** *  AccessToken    link. */ 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; } /** *  post . */ 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

批判を聞いて受け入れます。 この記事が誰かを助けてくれたらとてもうれしいです。



All Articles