Facebook Query Language (FQL) by

31
May
0

Facebook Query Language หรือ FQL เป็นภาษา query ที่ใช้ในการคัดกรองข้อมูลหรือดึงข้อมูลที่เราต้องการจาก Facebook โดยตรง ซึ่งการเขียนจะมีลักษณะคล้ายกับภาษา SQL นั่นคือมีรูปแบบเป็น

SELECT (field) FROM (table) WHERE (condition)

และเราสามารถใช้ operator AND, OR, NOT ได้อีกด้วย แต่สิ่งที่ FQL แตกต่างจาก SQL ก็คือ FQL จะไม่อนุญาตให้เราทำการ join table กันได้ ซึ่งถ้าเราต้องการจะใช้ข้อมูลที่มากกว่า 1 ตาราง เราจะใช้ IN เพื่อทำการเชื่อมข้อมูลระหว่างตาราง และ ระหว่าง 2 ตารางที่จะเชื่อมข้อมูลกัน จะต้องมี field ที่เก็บข้อมูลเหมือนกันอยู่ ซึ่งจะเรียก field นี้ว่าเป็น indexable

หลายคนที่อาจจะใช้ Graph API อาจจะสงสัยว่าในเมื่อเรามี Graph API อยู่แล้ว ซึ่งก็สามารถใช้ในการดึงข้อมูลมาใช้ได้เหมือนกัน แล้วทำไมต้องใช้ FQL อีก นั้นก็เป็นเพราะว่า Graph API ไม่สามารถที่จะดึงข้อมูลเป็นชุดๆได้ เช่นหากเราต้องข้อมูลเป็น username, user_id, gender และ birthday ของเพื่อน ถ้าเราใช้ Graph API เราจำเป็นต้องได้รายชื่อเพื่อนทั้งหมดของเรามาก่อน หลังจากนั้นก็จะได้ user_id กับ username มา แล้วจึงใช้ข้อมูลที่ได้มาไปหาข้อมูล gender และ birthday ของเพื่อนอีกที ซึ่งจะเห็นว่าต้องทำหลายขั้นตอนมาก แต่ถ้าเราใช้ FQL สามารถทำได้โดยเขียนภาษา query ตามนี้

SELECT username, uid, sex, birthday FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

มาถึงตรงจุดนี้ อาจมีหลายคนสงสัยว่า แล้วเราจะรู้ได้อย่างไรว่าฐานข้อมูลมีตารางอะไรบ้าง และแต่ละตารางมี field อะไรให้ใช้บ้าง เราสามารถเข้าไปดูได้อ่าน Document และ Reference ได้ที่ https://developers.facebook.com/docs/reference/fql/ ซึ่งลิ้งค์นี้จะบอกข้อมูลเกี่ยวกับตารางและ field เอาไว้ชัดเจน ว่าทาง facebook อนุญาตให้เราสามารถใช้ข้อมูลส่วนไหนได้บ้าง และทาง Facebook ยังมี tool ที่เอาไว้ให้เราใช้ทดสอบ query ที่เราเขียนขึ้นมาได้อีกด้วย ผ่านทาง Graph API Explorer https://developers.facebook.com/tools/explorer?method=GET&path=100001055377057 ซึ่งเมื่อกดลิ้งค์เข้ามาแล้วจะเจอเพจหน้าตาแบบนี้ครับ

fql_tutorial2

หลังจากนั้นตรงที่เป็นลิ้งค์ https://graph.facebook.com/ ให้พิมพ์เพิ่มหลังเครื่องหมาย “/” ไปว่า “fql?q=” แล้วตามด้วย query ที่เราเขียนขึ้นมา
แล้วกด submit เราก็จะได้ผลลัพธ์จากการ query แสดงผลที่ด้านล่างนั้นเอง ทั้งนี้ทั้งนั้น การที่เราจะดึงข้อมูลต่างๆจากตารางมาได้ เราจำเป็นต้องทำการขอ Permissions ต่างๆด้วย ซึ่งข้อมูลในแต่ละ Field จะมีการระบุเอาไว้อยู่แล้วว่าต้องมีการใช้ Permissions ใดบ้าง ดังนั้น ถ้าคิดว่าเขียน query ได้ถูกต้องแน่นอนแล้ว แต่ว่าผลลัพธ์ไม่ขึ้น ให้ลองตรวจสอบดูดีๆนะครับ ว่าได้ทำการขอ permissions ไปหรือเปล่า

หมดเพียงเท่านี้แล้วครับ เรื่องของ Facebook Query Language สำหรับคนที่เคยเขียน SQL มาแล้ว น่าจะฝึกฝนได้ไม่ยากนะครับ ส่วนคนที่ไม่เคยเขียน SQL มาก่อนก็ไม่ต้องน้อยใจไปครับ ของแบบนี้ต้องค่อยๆศึกษาไปเรื่อยๆ เดี๋ยวเราก็เขียนได้ครับ ^^

JSON Encode และ Decode ใน Flash Builder 4.6 by

30
Apr
0

สืบเนื่องจาก บทความนี้ ผมต้องการที่จะส่งข้อมูลจาก php มายัง flex ในรูปแบบ JSON แต่ว่าในกระทู้นี้จำเป็นต้องหาไฟล์ corelib.swc หรือ as3corelib.swc แล้ว import เข้ามาช่วยทำการ encode และ decode ข้อมูลที่ส่งมาจากไฟล์ php แต่สำหรับ Flash Builder 4.6 ที่ผมใช้อยู่นั้น ผมก็ได้ลองทำตามกระทู้นี้ทุกขั้นตอน แต่ก็ยังเกิด error message ตามนี้

1120: Access of undefined property JSON.

Can not resolve a multiname reference unambiguously. JSON (from C:\Program Files\Adobe\Adobe Flash Builder 4.6\sdks\4.6.0\frameworks\libs\player\11.1\playerglobal.swc(JSON, Walker)) and com.adobe.serialization.json:JSON (from C:\Users\shippo\Downloads\corelib.swc(com.adobe.serialization.json:JSON)) are available.

ทำให้ทราบว่า class JSON มันดันซ้ำกันระหว่างไฟล์ playerglobal.swc (ซึ่งมีมากับ Flash Builder 4.6) และ corelib.swc มันจึงรันไม่ได้ซักที ก็พยายามเสิร์ชหาใน Google จนได้ความว่าใน Flash Builder 4.6 นั้น การที่จะ Encode หรือ Decode ข้อมูลที่มาในรูปแบบ JSON สามารถทำเลยโดย

1. การ decode JSON

var aData:* = JSON.parse(e.result as String);

จากตัวอย่างข้างต้นเป็นการ decode JSON ใน Flash Builder 4.6 แทนการใช้ JSON.decode
2. การ encode JSON

var objStr:String = JSON.stringify( {name:”Todd Anderson”, company:”Infrared5″, phone:15558576309}, deflate );

จากตัวอย่างข้างต้นเป็นการ encode JSON ใน Flash Builder 4.6 แทนการใช้ JSON.encode
ซึ่งทั้ง JSON.parse และ JSON.stringify เป็นเมธอดที่มีอยู่แล้วในไฟล์ playerglobal.swc หากต้องการเพียงแค่ encode และ decode ข้อมูลรูปแบบ JSON เราไม่จำเป็นต้องใช้ corelib.swc หรือ as3corelib.swc ก็ได้