Applications and ToolsDeveloperFacebook DeveloperMarketing IdeasPHPProgramming LanguageSocial for BusinessSocial MediaSocial MediaSocial Media MarketingSocial NetworkSQL

พัฒนา Facebook Open Graph API ตอนที่ 9 รู้จักภาษา FQL

คราวนี้ก็ได้เวลามาพูดเรื่องยากกันสักนิดเกี่ยวกับ Facebook SDK และ Open Graph API ครับ ไอ้ที่ยากก็คือรอบนี้จะเป็นการรู้จัก FQL Query นั่นเองครับภาษา FQL หรือ Facebook Query Language นั้นก็ไม่ต่างกับภาษา SQL เท่าไหร่ครับเป็นภาษาระดับสูงเช่นกัน มีโครงสร้างภาษาที่เป็น Natural Language เช่นเดียวกับ SQL ซึ่ง ถ้าใครที่ยังไม่มีพื้นฐานภาษา SQL นั้นต้องพยายามศึกษาให้พอรู้เรื่องก่อนจึงจะเข้าใจครับ

FQL ของ Facebook
FQL ของ Facebook

ทำไมต้องศึกษา FQL Query ของ Facebook
สำหรับตัว Facebook SDK หรือ Open Graph API นั้นมันมีการแสดงผลลัพธ์ออกมาเป็น JSON ใช่ไหมครับ FQL ก็แสดงค่าออกมาเป็น JSON เช่นกันเพียงแค่ถ้าใช้ค่า GET Parameter จาก Open Graph API ธรรมดาอย่างเดียวมันก็ได้ค่า Default ที่ API ตัวนี้ออกมาเป็น JSON เท่านั้นครับซึ่งถ้าบางทีเราต้องการอะไรที่ซับซ้อน และอยู่คนละส่วนของ GET Parameter แล้วล่ะก็ เราก็ต้องเขียนโปรแกรมวนลูปซ้อนลูป ถ้าซับซ้อนชนิดที่ว่าหลายๆ ขั้นตอน ลูปของเราก็จะมากขึ้น เงื่อนไขมากขึ้น

เขียน FQL บน Graph API Explorer
เขียน FQL บน Graph API Explorer

FQL เลยมีไว้สำหรับดึงค่า ที่ต้องการจากส่วนของ Object บน Facebook ที่แยกกันอย่าอิสระครับ หรือถ้าใครที่รู้ทฤษฎีการ JOIN ของ SQL แล้วล่ะก็จะเข้าใจครับว่า FQL มันดียังไง

ตัวอย่างสมมติว่าผม GET Parameter ค่าพื้นฐาน uid2 จาก Facebook ผมก็เพียงหา Access Token แล้วก็อัดค่าทั้งหมดลงใน URL

GET /fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()&access_token=...

ดูแล้วก็มีอาการงงๆ เล็กน้อยใช่ไหมครับในการ Pass ค่า Parameter ไป GET ผลลัพธ์ JSON
แต่ถ้าเราใช้ FQL มาช่วย ผมก็เพียงแค่เขียนคำสั่งว่า

SELECT uid2 FROM friend WHERE uid1=me()

สั้นและง่ายกว่ากันเยอะ ถูกโฉลกอาชีพโปรแกรมเมอร์มากๆ ว่าไหมครับ

เพราะโครงสร้างของ FQL นั้นไม่ต่างจาก SQL มันก็มี หลักการง่ายๆ เหมือน SQL Query ทั่วไปอย่าง

SELECT [fields] FROM [table] WHERE [conditions]

แค่นั้นแหละครับ ส่วน Element อื่นๆ มันก็แตกต่างกันไปเหมือนที่ ทำไม MySQL กับ MS SQL ถึง Query ใช้ LIMIT ต่างกัน เท่านั้นเองซึ่งก็เป็นเรื่องที่คุณต้องศึกษามันเล็กน้อยเพิ่มเติม แต่โครงสร้างภาษาหลักๆ ก็ไม่มีอะไรแตกต่างไปจาก SQL ธรรมดาเลยครับ

ตัวอย่างก็แสนธรรมดา

SELECT name FROM user WHERE uid = me()

ถ้าต้องการ Active User และ Friends ออกมาด้วยก็ใช้

SELECT uid, name, pic_square FROM user WHERE uid = me()
OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

รวมไปถึงการเรียกคำสั่ง Multi-Query ก็ได้เช่นกันครับ เช่นถ้าเราต้องการเรียกข้อมูลแสดงผลออกมาเป็น JSON ในส่วนของ Event ที่คุณเคยไปกด Attending ไว้ คุณต้องทำการ Query อยู่ 2 ครั้ง สิ่งที่ต้องเรียกคือ ID และ RSVP ของ Event แล้วค่อยไปเรียก URL รูปภาพ และ ชื่อ Event ออกมาอีกที

"query1":"SELECT uid, rsvp_status FROM event_member WHERE eid=12345678"

เรียก Attendee Data ของ Event ออกมาก่อน ซึ่งจะมีค่า ชื่อ Event, URL และ รูปภาพ เสร็จแล้วทำการ Query รอบที่ 2 ผ่าน Multi Query

"query2":"SELECT name, url, pic FROM profile WHERE id IN (SELECT uid FROM #query1)"

ประมาณนี้ครับ

ส่วนการใช้ FQL ร่วมกับ Facebook SDK นั้นก็สามารถเขียนได้ง่ายๆ ซึ่งคุณต้องทำการดาวน์โหลด Facebook SDK มาก่อนนะครับ (ศึกษาได้ในบทเรียนเก่าๆ)

เขียน HTML แบบนี้ไปเลย

top.location.href='" . $dialog_url . "'");
  }

  //get user access_token
  $token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
    . $app_id . '&redirect_uri=' . urlencode($my_url) 
    . '&client_secret=' . $app_secret 
    . '&code=' . $code;
  $access_token = file_get_contents($token_url);
 
  // Run fql query
  $fql_query_url = 'https://graph.facebook.com/'
    . '/fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()'
    . '&access_token=' . $access_token;
  $fql_query_result = file_get_contents($fql_query_url);
  $fql_query_obj = json_decode($fql_query_result, true);

  //display results of fql query
  echo '

'; print_r("query results:"); print_r($fql_query_obj); echo '

'; // Run fql multiquery $fql_multiquery_url = 'https://graph.facebook.com/' . 'fql?q={"all+friends":"SELECT+uid2+FROM+friend+WHERE+uid1=me()",' . '"my+name":"SELECT+name+FROM+user+WHERE+uid=me()"}' . '&access_token=' . $access_token; $fql_multiquery_result = file_get_contents($fql_multiquery_url); $fql_multiquery_obj = json_decode($fql_multiquery_result, true); //display results of fql multiquery echo '

'; print_r("multi query results:"); print_r($fql_multiquery_obj); echo '

'; ?>

ก็เป็นอันทำงานได้แล้วครับ รอบนี้จะเป็นทฤษฏีซะมากกว่า รอบหน้าคงจะมีของเล่นมาให้ลองทำตามดูครับ เพราะคิดว่า Workshop นั้นได้ผลกับผู้อ่านเสมอว่าไหม?
ส่วนใครอยากรู้ลึกกว่านี้ไปที่ https://developers.facebook.com/docs/reference/fql/ ก่อนได้เลยครับ

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Leave a Reply

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน