Kết luận chương 3

Một phần của tài liệu Tiểu luận Thực tập cơ sở chuyên ngành An toàn thông tin: Tìm hiểu và sử dụng Facebook API (Trang 29)

Về cơ bản, Facebook API là nền tảng (platform) mà Facebook cung cấp cho các lập trình viên để có thể dễ dàng trong việc tạo ứng dụng liên kết với tài khoản Facebook và đảm bảo người viết ứng dụng không can thiệp quá sâu vào hệ thống của mạng xã hội lớn nhất thế giới này. Nhờ có Facebook API, người tạo ứng dụng có thể lấy thông tin về user, groups, photo,… trên Facebook mà họ cần. Không chỉ riêng Facebook, những platform API này cũng được các dịch vụ như Google, Yahoo, Amazon và các công ty lớn khác cung cấp cho lập trình viên, với API này bạn có thể tạo ra các ứng dụng bằng cách sử dụng tính năng hoặc dữ liệu hiện có trên máy chủ của họ.

Những hiểu biết về Facebook API trong chương này sẽ là tiền đề cho chúng ta xây dựng ứng dụng ở chương sau.

CHƯƠNG 4. XÂY DỰNG ỨNG DỤNG VỚI FACEBOOK API I. Mô tả ứng dụng

Tính đến hết quý 1 năm 2018 ước tính Facebook có khoảng 2,234 tỷ người dùng. Với sự phát triển ngày càng lớn mạnh của Facebook là sự xuất hiện của hàng trăm trang, nhóm với nhiều mục đích khác nhau. Hiện nay, Facebook đã cung cấp cho người dùng rất nhiều chức năng , tuy nhiên để theo dõi các hoạt động và thời gian chi tiết của mình người dùng sẽ phải truy cập nhật kí hoạt động vì nó được liệt kê hàng loạt nên sẽ rất khó nhìn.

Ứng dụng xây dựng được là một ứng dụng dùng để quản lí trang, nhómcủa người do người dùng quản lí một cách đễ dàng. Ứng dụng này thực sự hữu ích nếu người dùng muốn theo dõi thời gian các bài mình đã post qua một bảng thống kê mà không cần phải v ào nhật kí người dùng để tìm kiếm. Chức năng chính của ứng dụng là thống kê các update_time của người dùng trên Facebook. Với giao diện thân thiện, theo dạng bảng, người dùng có thể dễ dàng xem các hoạt động của mình chỉ bằng thao tác đơn giản.

II. Lựa chọn công cụ, ngôn ngữ lập trình

Để viết ứng dụng Facebook:

 Cần một số kiến thức về API, Facebook API và biết cách sử dụng như thế nào. Facebook cung cấp cho các nhà phất triển ứng dụng Facebook hầu hết các công cụ, hướng dẫn cần thiết tạihttps://developers.facebook.com/.

 Cần một số kiến thức về các ngôn ngữ lập trình web: phổ biến như là JAVA, PHP - được đông đảo cộng đồng mạng và nhà phát triển ứng dụng facebook hổ trợ - ngoài ra cũng có thể sử dụng VB, ASP.net, …

Cụ thể trong chuyên đề này sử dụng ngôn ngữ JAVA.

III.Tạo ứng dụng

1. Tạo một app bất kì để giao tiếp với Facebook

Truy cập vào địa chỉhttps://developers.facebook.com/

Sau đó đăng nhập bằng tài khoản facebook của mình. Ở thanh dropdown Ứng dụng của tôi, các bạn chọn "Tạo ứng dụng mới" , và cửa sổ sau đây hiện ra.

Các bạn điền tên app của mình vào phầntên hiển thị , rồi click vào "Tạo ID ứng dụng",như vậy bước cơ bản đã xong, bạn đã có một ứng dụng của riêng mình.

2. Chuẩn bị một số thông tin trước khi tạo project*ID App *ID App

Truy cập app vừa tạo để lấy id

* ID Page Facebook cần lấy thông tin

Truy cập vào trang facebook cần lấy thông tin

Hình 3.6 Phần gạch dưới chính là id của trang cần lấy

*Sử dụng Graph API để lấy các url cần thiết

Đây là url của tên trang, id, và hình đại diện của trang

Hình 3.7

Đây là url để lấy id, message và updated_time của các bài post trên trang

3. Tạo Project JAVA IDE*Cấu trúc Project *Cấu trúc Project

*Với:

-index.jsp: đăng nhập với facebook bằng tài khoản cá nhân

-Sign_in_Controller.jsp: lấy access token để lấy các thông tin như id,tên, ảnh đại diện của trang đã chọn.

-Profile_Page.jsp: xuất thông tin của trang, các bài post của trang đã chọn.

4. Chạy Project

Truy cập link: http://localhost:8080/DEMO_FACEBOOKAPI/index.jsp

Sau khi truy cập vào link được kết quả như trên ta click vào button login. Sau khi click thì ta được kết quả như sau:

Nhập thông tin cần thiết để đăng nhập vào facebook của bạn. Sau khi đăng nhập thành công ta sẽ có kết quả như sau:

IV. Kết luận chương 4

Xây dựng ứng dụng thành công , đáp ứng cơ bản những yêu cầu đặt ra ban đầu. Có thể thống kê id, message, updated_time của các bài viết trên một trang.

Ưu nhược điểm Ưu điểm

 Tận dụng được cộng đồng mạng xã hội facebook.  Đáp ứng được các yêu cầu nghiệp vụ cần thiết.  Giao diện thân thiện với người dùng.

Nhược điểm

 Tính năng ứng dụng chưa đa dạng.

 Từ năm 2018 Fcaebook siết chặt bảo mật nên các yêu cầu ứng dụng khó khăn hơn vì vậy cha ưthể khai thác hết được thế mạnh của Facebook .

KẾT LUẬN

Bốn chương của chuyên đề đã thể hiện được rằng những mục tiêu đặt ra khi thực hiện chuyên đề đều đã đạt được. Cụ thể:

Chương 1 đã hệ thống lại những kiến thức tổng quan về API. Chương này cũng đã chỉ ra các ưu nhược điểm, các thành phần khi sử dụng API cũng như các loại API phổ biến. Tìm hiểu qua về REST API.

Chương 2 giới thiệu cho chúng ta về GRAPH API cụ thể là Facebook Graph API, cách thức hoạt động cũng như cách sử dụng GRAPH API.

Chương 3 lần lượt làm rõ hơn về một loại API phổ biến hiện nay là API các mạng xã hội. Cùng với đó là đi tìm hiểu sâu về API Facebook , một trong những mạng xã hội lớn nhất thế giới với lượng người dùng khổng lồ.

Trong chương 4, một ứng dụng minh họa về việc sử dụng API Facebook đã được xây dựng thành công. Nó cho phép hệ thống trích xuất thông tin của các bài post của một trang trên Facebook.

Dù vậy, vẫn còn một số vấn đề liên quan đến quyền sử dụng thông tin người dùng chưa thể minh họa triệt để trong chuyên đề này . Ứng dụng chỉ mới dừng lại ở mức đơn giản là sử dụng API Facebook như thế nào, và sử dụng vào việc gì. Kể từ Tháng 3 năm 2018, chính sách về API dành cho các nhà phát triển ứng dụng của Facebook đã có nhiều thay đổi, chuyên đề vẫn chưa thể làm rõ được hết các tiềm năng có thể được khai thác ở Facebook API. Việc giải quyết những điểm tồn tại này cũng chính là hướng phát triển tương lai của chuyên đề.

TÀI LIỆU THAM KHẢO

[1]. Braunstein, Mark L. (26 July 2018). Health Informatics on FHIR: How HL7's New API is Transforming Healthcare. Springer. p. 9. ISBN 978-3-319-93414-3

[2]. sproutsocial.com/insights/ [3]. API wiki :

en.wikipedia.org/wiki/Application_programming_interface#cite_note-Braunstein2018-1 [4]. Parnin, Chris; Treude, Cristoph (May 2011). "Measuring API Documentation on the Web".Web2SE. Retrieved 22 July 2016.

[5]. Đồ án tốt nghiệp ứng dụng facebook của Hoàng Thị Hiền lớp K51CHTTT (ĐH CNTT – ĐH QGHN).

[6]. Facebook Developer Wiki . Nguồn: http://wiki.developers.facebook.com/

[7]. Trang tài liệu của nhà phát triển facebook:

PHỤ LỤC Source Code Project

* index.jsp

<!DOCTYPE html> <html>

<head>

<title>DEMO</title> <meta charset="UTF-8"> </head>

<body> <script>

// This is called with the results from from FB.getLoginStatus().

function statusChangeCallback(response) { console.log('statusChangeCallback'); console.log(response); console.log(response.authResponse.accessToken); //alert(response.authResponse.accessToken); if (response.status === 'connected') { window.location.href='Sign_in_Controller.jsp?access_token='+response.authResponse.acc essToken; } else {

// The person is not logged into your app or we are unable to tell. document.getElementById('status').innerHTML = 'Please log ' + 'into this app.';

} }

// This function is called when someone finishes with the Login // Button. See the onlogin handler attached to it in the sample

// code below.

function checkLoginState() {

FB.getLoginStatus(function(response) { statusChangeCallback(response);

}); }

window.fbAsyncInit = function() { FB.init({

appId : '365789034115218',//ĐIỀN ID CỦA APP VỪA LẤY Ở TRÊN

cookie : true, // enable cookies to allow the server to access // the session

xfbml : true, // parse social plugins on this page version : 'v4.0' // use graph api version 4.0 });

FB.getLoginStatus(function(response) { statusChangeCallback(response);

}); };

// Load the SDK asynchronously (function(d, s, id) {

var js, fjs = d.getElementsByTagName(s)[0];

if (d.getElementById(id)) return; js = d.createElement(s); js.id = id;

js.src = "https://connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs);

}(document, 'script', 'facebook-jssdk'));

// Here we run a very simple test of the Graph API after login is // successful. See statusChangeCallback() for when this call is made. </script>

<fb:login-button scope="public_profile,email" onlogin="checkLoginState();"> </fb:login-button>

<div id="status"> </div>

</body> </html>

*Sing_in_Controller.jsp

<%@page import="com.chillyfacts.com.profile.Profile_Bean"%> <%@page import="com.chillyfacts.com.profile.Profile_Modal"%>

<%@page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title>

</head> <body> <%

String access_token=(String)request.getParameter("access_token"); Profile_Modal obj_Profile_Modal=new Profile_Modal();

Profile_Bean obj_Profile_Bean= obj_Profile_Modal.call_me(access_token); obj_Profile_Bean.setAccess_token(access_token);

session.setAttribute("fb_user_session", obj_Profile_Bean); %>

<script type="text/javascript">

window.location.href="Profile_Page.jsp"; </script>

</body> </html>

*Profile_Page.jsp

<%@page import="java.util.Iterator"%>

<%@page import="com.chillyfacts.com.posts.Post_Use_Bean"%> <%@page import="java.util.List"%>

<%@page import="com.chillyfacts.com.posts.Post_Modal"%> <%@page import="com.chillyfacts.com.profile.Profile_Bean"%> <%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title>

</head> <body> <% Profile_Bean obj_Profile_Bean=(Profile_Bean)session.getAttribute("fb_user_session"); %> <center> <table border="1"> <tr>

<td colspan="2" align="center"> <h2>Profile Page</h2>

</td> </tr> <tr>

<td align="center">

<img src="<%=obj_Profile_Bean.getProfile_picture() %>"></img><br> Page : <%=obj_Profile_Bean.getUser_name() %><br>

id : <%=obj_Profile_Bean.getId() %><br> </td>

<td> <%

Post_Modal obj_Post_Modal=new Post_Modal(); List<Post_Use_Bean> list_of_posts=

obj_Post_Modal.call_me_to_get_posts(obj_Profile_Bean.getAccess_token()); Iterator<Post_Use_Bean> it_list_of_posts=list_of_posts.iterator();

if(list_of_posts.size()>0){

Post_Use_Bean obj_Post_Use_Bean=new Post_Use_Bean();

while(it_list_of_posts.hasNext()){

obj_Post_Use_Bean=it_list_of_posts.next(); %>

<%=obj_Post_Use_Bean.getUpdated_time() %><br> <hr> <% } } %> </td> </tr> </table> </center> </body> </html>

*Post_Modal.java package com.chillyfacts.com.posts; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONObject;

public class Post_Modal {

public List < Post_Use_Bean > call_me_to_get_posts(String access_token) throws

Exception {

List < Post_Use_Bean > list_posts = new ArrayList < Post_Use_Bean > ();

try {

String url =

"https://graph.facebook.com/v4.0/2388761094527134/feed?fields=message%2Cupdated_time& access_token=" + access_token;

URL obj = new URL(url);

HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // optional default is GET

con.setRequestMethod("GET"); //add request header

con.setRequestProperty("User-Agent", "Mozilla/5.0");

int responseCode = con.getResponseCode();

System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Response Code : " + responseCode);

BufferedReader in = new BufferedReader(

new InputStreamReader(con.getInputStream())); String inputLine;

StringBuffer response = new StringBuffer();

while ((inputLine = in .readLine()) != null) { response.append(inputLine);

} in .close();

System.out.println(response);

JSONObject data_response = new JSONObject(response.toString()); JSONArray data_array = data_response.getJSONArray("data"); System.out.println(data_array.length());

for (int count = 0; count < data_array.length(); count++) { Post_Use_Bean obj_Post_Use_Bean = new Post_Use_Bean();

try {

obj_Post_Use_Bean.setMessage(data_array.getJSONObject(count).getString("message")); } catch (Exception e) {

obj_Post_Use_Bean.setUpdated_time(data_array.getJSONObject(count).getString("updated_ time"));

obj_Post_Use_Bean.setId(data_array.getJSONObject(count).getString("id")); list_posts.add(obj_Post_Use_Bean);

}

JSONObject data_paging = new

JSONObject(data_response.getJSONObject("paging"));

Post_Use_Bean obj_Post_Use_Bean = new Post_Use_Bean();

obj_Post_Use_Bean.setPaging_next(data_paging.getString("next")); obj_Post_Use_Bean.setPaging_previous(data_paging.getString("previous"));

list_posts.add(obj_Post_Use_Bean); } catch (Exception e) {

System.out.println(e); }

//return list_posts;

return list_posts; }

*Post_Use_Bean.java

package com.chillyfacts.com.posts;

public class Post_Use_Bean {

private String message;

private String updated_time;

private String id;

private String paging_previous;

private String paging_next;

public String getPaging_previous() {

return paging_previous; }

public void setPaging_previous(String paging_previous) {

this.paging_previous = paging_previous; }

public String getPaging_next() {

return paging_next; }

public void setPaging_next(String paging_next) {

this.paging_next = paging_next; }

public String getMessage() {

return message; }

public void setMessage(String message) {

this.message = message; }

public String getUpdated_time() {

return updated_time; }

public void setUpdated_time(String updated_time) {

this.updated_time = updated_time; }

public String getId() {

return id; }

public void setId(String id) {

this.id = id; }

*Profile_Bean.java

package com.chillyfacts.com.profile;

public class Profile_Bean {

private String user_name;

private String profile_picture;

private String id;

private String access_token;

public String getAccess_token() {

return access_token; }

public void setAccess_token(String access_token) {

this.access_token = access_token; }

public String getUser_name() {

return user_name; }

public void setUser_name(String user_name) {

this.user_name = user_name; }

public String getProfile_picture() {

return profile_picture; }

public void setProfile_picture(String profile_picture) {

this.profile_picture = profile_picture; }

public String getId() {

return id; }

public void setId(String id) {

this.id = id; }

*Profile_Modal.java package com.chillyfacts.com.profile; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import org.json.JSONObject; public class Profile_Modal {

public Profile_Bean call_me(String access_token) throws Exception {

String url =

"https://graph.facebook.com/v4.0/2388761094527134/?fields=name%2Cid%2Cpicture%7Burl%7 D&access_token="+access_token;

URL obj = new URL(url);

HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // optional default is GET

con.setRequestMethod("GET"); //add request header

con.setRequestProperty("User-Agent", "Mozilla/5.0"); int responseCode = con.getResponseCode();

System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Response Code : " + responseCode);

BufferedReader in = new BufferedReader(

new InputStreamReader(con.getInputStream())); String inputLine;

StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) {

response.append(inputLine); }

in.close();

System.out.println(response);

Profile_Bean obj_Profile_Bean=new Profile_Bean();

JSONObject myResponse = new JSONObject(response.toString()); obj_Profile_Bean.setUser_name(myResponse.getString("name")); obj_Profile_Bean.setId(myResponse.getString("id")); JSONObject picture_reponse=myResponse.getJSONObject("picture"); JSONObject data_response=picture_reponse.getJSONObject("data"); System.out.println("URL : "+data_response.getString("url")); obj_Profile_Bean.setProfile_picture(data_response.getString("url")); return obj_Profile_Bean; } }

Một phần của tài liệu Tiểu luận Thực tập cơ sở chuyên ngành An toàn thông tin: Tìm hiểu và sử dụng Facebook API (Trang 29)

Tải bản đầy đủ (PDF)

(50 trang)