หลายบริษัทที่มีการเก็บข้อมูลสำหรับวิจัยการตลา หรือข้อมูลประวัติของผู้บริโภคควรใช้ Graph API ของ Facebook มาช่วยสำหรับการดึงข้อมูลเหล่านั้นให้ง่ายขึ้นครับ
ช่วงเดือนมกราคม และไม่นานมานี้ Facebook API มีการเปลี่ยนแพลตฟอร์มเล็กน้อยทำให้เหล่านักพัฒนาต้องแก้ไขความถูกต้องกันระดับหนึ่ง แต่ไม่เป็นไรครับหากว่าได้แก้ไขกลับมาเรียบร้อยแล้วก็ได้เวลามาลุยกันต่อกับการ Hack The Graph ของ Facebook กันครับ
ในบทเรียนนี้จะเป็นตัวอย่างการเขียนภาษา PHP ร่วมกับ Facebook SDK สำหรับ PHP ให้ดึงข้อมูลเชิงลึกของผู้ใช้งานจาก Profile ไปเก็บในระบบเหมืองข้อมูลหรือ Data Warehouse ที่เป็นเหมือนศูนย์รวมข้อมูล ที่ธุรกิจทั้งหลายได้เก็บรวบรวมไว้จากหลากหลายแหล่ง เพื่อให้นักวิเคราะห์ข้อมูลได้ดึงขึ้นมาใช้ค้นหาทำ Data Mart และ Data Mining ในการทำระบบการสนับสนุนการตัดสินใจต่อไป
ศึกษาเพิ่มเติมเอาเองนะครับผ่าน Google ต่อมาเรามาเริ่มพัฒนากันครับ
ก่อนจะเข้าศึกษาวิธีการในบทเรียนนี้คุณจำเป็นต้องมีความรู้จากบทเรียนเหล่านี้ครับ
- พัฒนา Open Graph API ของ Facebook ด้วย PHP ฉบับเริ่มต้น ตอนที่ 1
- พัฒนา Open Graph API ของ Facebook ด้วย PHP ฉบับเริ่มต้น ตอนที่ 2
- พัฒนา Facebook Open Graph API ตอนที่ 4 วัดผลด้วย Keyword ค้นหา
- Facebook Graph API ตอนที่ 14 โพสท์ Link หรือข้อความไป Fan Page
- Facebook Graph API ตอนที่ 15 Upload ไฟล์ Video ไปบน Wall ของเรา
หากว่าพอมีพื้นฐานอยู่แล้ว ก็เข้าไปดาวน์โหลดเจ้า SDK สำหรับ PHP แล้วตั้งค่ากันเลยครับ ดาวน์โหลดที่ https://github.com/facebook/facebook-php-sdk
หากว่าดาวน์โหลดแล้ว เราจะใช้แค่ Folder ที่ชื่อว่า “src” แค่นั้นครับเอาไปวางไว้ใน Folder ของตัว Project ของเราทันที เข้าไปสมัคร Developers ของ Facebook แล้วทำการสร้าง App ขึ้นมาใหม่ เพื่อจะได้ค่า APP ID และ APP SECRET สำหรับใช้กับบทเรียนนี้ พร้อมกับระบุ Website ที่เราต้องการจะใช้เชื่อมต่อ API ให้เสร็จสรรพครับ
วิธีการดึง Likes, Works History และ Education
ดึงข้อมูลความชอบจาก Likes ว่าเรากด Likes Page ประเภทไหนชื่ออะไรมาบ้าง ให้แสดงผลออกมา
สร้างหน้า index.php ขึ้นมาเป็นหน้าแรก พร้อมปุ่มในการ Login และ Logout ขึ้นมา พร้อมใส่ Code คำสั่งในการเชื่อมต่อ Facebook SDK ดังนี้ครับ
''.$app_id.'',
'secret' => ''.$app_secret.'',
));
// Get User ID
$user = $facebook->getUser();
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$permission = $facebook->api('/me/permissions');
if ($permission['data'][0]['email']
&& $permission['data'][0]['publish_stream']) {
$user_profile = $facebook->api('/me');
$access_token = $facebook->getAccessToken();
}
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl(array('scope' =>
'email,
offline_access,
publish_stream,
user_birthday,
user_location,
user_work_history,
user_about_me,
user_hometown,
user_status,
user_work_history,
publish_stream,
user_photos,
email,
user_interests,
user_education_history'));
}
?>
Likes |
Works |
Education |
Logout
Login
สังเกตในส่วนของการ Login นะครับ จะมีการดึง Extended Permission ออกมาอยู่บางส่วนที่ต้องการ
$loginUrl = $facebook->getLoginUrl(array('scope' =>
'email,
offline_access,
publish_stream,
user_birthday,
user_location,
user_work_history,
user_about_me,
user_hometown,
user_status,
user_work_history,
publish_stream,
user_photos,
email,
user_interests,
user_education_history'));
ซึ่งจะเกี่ยวข้องกับ Code ในส่วนของบรรทัดนี้
$permission = $facebook->api('/me/permissions');
if ($permission['data'][0]['email']
&& $permission['data'][0]['publish_stream']) {
$user_profile = $facebook->api('/me');
$access_token = $facebook->getAccessToken();
}
สิ่งที่ทางผมต้องการดึงออกมานั้นแล้วแต่เราอยากจะขอครับ ซึ่งถ้าอยากได้อะไรก็ไป เลือกเอาเลยจาก Facebook Developers Page ครับในที่นี้ผมขอแค่
email,offline_access,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown,user_status,user_work_history,publish_stream,user_photos,email,user_interests
เท่านั้นครับ (ก็เยอะนะ)
ถ้าเสร็จแล้วก็ลอง Upload ไปรันดูครับ ทำการ Login จะเจอขั้นตอนดังนี้
ต่อมาคือหน้าสำหรับการดึง Likes และความชอบ
สร้างไฟล์ PHP ขึ้นมาชื่อว่า like.php ครับ แล้วใส่ Code ดังต่อไปนี้
''.$app_id.'',
'secret' => ''.$app_secret.'',
));
// Get User ID
$user = $facebook->getUser();
if ($user) {
try {
$result = $facebook->api('/me/likes');
if($result && $result['data']){
foreach($result['data'] as $lks){
echo "Categories: ".$category = $lks['id']."
";
echo "Name: ".$name = $lks['category']."
";
echo "Page ID: ".$id = $lks['name']."
";
echo "
";
}
}
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
?>
โดยส่วนของ $result = $facebook->api(‘/me/likes’); จะเป็นการใช้ SDK ดึงส่วนของ Like ที่เราเคยกด เก็บในตัวแปร array แล้วทำการวนลูปตัวแปรแสดงค่าออกมาอีกทีด้วยคำสั่ง Foreach
if($result && $result[‘data’]){
foreach($result[‘data’] as $lks){
echo “Categories: “.$category = $lks[‘id’].”<br/>”;
echo “Name: “.$name = $lks[‘category’].”<br/>”;
echo “Page ID: “.$id = $lks[‘name’].”<br/>”;
echo “<hr/>”;
}
}
ทั้งหมดนี้สามารถทดสอบก่อนได้ที่ https://developers.facebook.com/tools/explorer/ ครับ
ผมแทรก Code ในการตบบรรทัด และคั่นแต่ละชุดข้อมูลด้วย เส้นลากหรือ Tag <hr/> ครับ
ลองรันดูจากไฟล์ likes.php สิ่งที่ได้จะเป็นดังนี้
หากประยุกต์ใช้กับการเก็บข้อมูล ลงใน MySQL ก็ทำได้ไม่ยากครับ
ต่อมาเป็นการดึงข้อมูลของ Works ประวัติการทำงาน
สร้างไฟล์ works.php ขึ้นมาครับ คราวนี้ลองใส่คำสั่งที่ใกล้เคียงกันลงไปดังนี้
''.$app_id.'',
'secret' => ''.$app_secret.'',
));
// Get User ID
$user = $facebook->getUser();
if ($user) {
try {
$workresult = $facebook->api('/me?fields=work&limit=1');
if($workresult && $workresult['work']){
foreach($workresult['work'] as $works){
echo $company_id = $works['employer']['id'];
echo"
";
echo $company_name = $works['employer']['name'];
echo"
";
echo $location_name = $works['employer']['id'];
echo"
";
echo "
";
}
}
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
?>
เพียงแค่ตัวข้อมูล ต้องเปลี่ยนข้อมูลเล็กน้อย เช่นการเรียกข้อมูลชุดในของตัวแปรอีกที $works[’employer’][‘id’] หรือ $works[’employer’][‘id’] เป็นต้น
หากทำการ Upload ขึ้นไปจะเจอข้อมูลดังนี้
หากจับมาแสดงผลก็จะได้ข้อมูลที่ใกล้เคียง โดยการเขียน Code จำเป็นต้องสังเกตชุดของ Return JSON ครับ อย่างตัวอย่างที่มีก็จะเป็นการดึง work ออกมา
$workresult = $facebook->api(‘/me?fields=work’);
แล้วใช้ Foreach วนลูปที่
foreach($workresult[‘work’] as $works){
echo $company_id = $works[’employer’][‘id’]; echo”<br/>”;
echo $company_name = $works[’employer’][‘name’]; echo”<br/>”;
echo $location_name = $works[’employer’][‘id’]; echo”<br/>”;
echo “<hr/>”;
}
เห็นไหมครับว่าไม่ยากสักนิดเลยในการประยุกใช้ กับ Work ก็ไม่ยากอะไรนัก
เช่นกันถ้าผมต้องการเก็บข้อมูลของ Education
ก็เพียงแค่เปิด Permission เพิ่ม
แล้วนำค่าที่เพิ่มเข้ามาไปแก้ไขที่ index.php เสร็จแล้วก็ทำการ logout เข้าระบบใหม่ แล้วก็ลองดึงข้อมูล ผ่าน Code คำสั่งดังนี้
''.$app_id.'',
'secret' => ''.$app_secret.'',
));
// Get User ID
$user = $facebook->getUser();
if ($user) {
try {
$eduresult = $facebook->api('/me?fields=education');
if($eduresult && $eduresult['education']){
foreach($eduresult['education'] as $education){
echo $education_school = $education['school']['name'];
echo"
";
echo $education_year = $education['year']['name'];
echo"
";
echo $education_type = $education['type'];
echo"
";
echo "
";
}
}
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
?>
ลองทดสอบดูก็จะเห็นว่าไม่ยากครับ
ต่อจากนั้นถ้าเราลองเก็บข้อมูลทั้งหมดลง Database MySQL ดูแล้วลองออกแบบ ER- Diagram ใหม่น่าจะได้ในรูปนี้ ชุดข้อมูลที่เราเลือกก็จะสามารถ สร้างรายงานออกมาให้ได้ไม่มีปัญหาเลยครับ ลองไปศึกษากันดูนะครับ มีปัญหาอะไรทักทายกันได้ที่ http://www.facebook.com/daydevthailand ยังไง Post ที่หน้า Wall เลยนะครับเพราะ Message นั้นเยอะมาก กลัวตกหล่น