God is not home today

首頁 | 網路廣播電台 | 網誌聯播 | 商品推薦

Facebook基礎範例-FQL(Facebook Query Language)

前幾天有個在facebook上認識的開發同好問起我FQL的用法,老實說我還真被問傻了眼,因為我從來沒用過…。一直以來我只使用簡單的MYSQL,先透過libraries取得USER ID後再用fb:name這類工具去叫出USER的名字或照片等等基本資料,其實個人覺得兩種方式都可以,只是看你的需求以及你對你的應用程式在使用上的一些考量而定;也就趁著這幾天閒閒沒事,趁機研究一下FQL的基本用法,以下簡單的區隔MYSQL以及FQL的使用方式:

FQL簡單的說明,就是facebook為了允許開發人員在facebook可控制的範圍內可以自由的向facebook資料庫請求用戶資料,所提出的Query Language,他的寫法與一般的MYSQL Query並無不同,差別只在於你所能執行的功能、所能取得的資料、欄位的定義及規則,都由facebook所規範,也就是說你一樣可以使用select xxx from xxx where xxx=xxx這樣的標準Query,但是你並不能用 $xxx=mysql_fetch_array($result); 這類的函式將select出來的資料塞進陣列,因為facebook並沒有在他的FQL內定義mysql_fetch_array這個函式。

這邊要先說明的是,在你決定你的應用程式要怎麼提取使用者的資料前,你最好先想清楚你的應用程式所需的功能、網路讀取的效能、QUERY的優化……等等問題;例如,如果你僅需要使用者的名稱和大頭貼,那麼我想你跟我一樣根本不需要用到FQL,因為你只需要透過libraries取得user_id後即可透過取得name,或是透過取得圖像;如果這時候你用FQL跑去facebook的資料庫撈資料,那麼你會發現,你的應用程式會如同開心農場般的龜速,因為你的request不是送到你自己的主機,而是送到facebook的資料庫去要求資料,所以網路速度就不是你自己所能掌握的了,這也是為什麼除非必要(如果你的應用程式想取得更多的user data,例如你想知道他是不是application的用戶,他加入的群組有哪些,他的所在地在哪裡……等等)我都不太願意去使用FQL的原因。

首先我們可以先寫個簡單的select語法:

PGNvZGU+DQokcXVlcnk9J1NFTEVDVCB1aWQsIGZpcnN0X25hbWUsIGxhc3RfbmFtZSwgbmFtZSBGUk9NIHVzZXIgV0hFUkUgdWlkPTEyMzQ1Njc4OSc7DQokcmVzdWx0PSRmYWNlYm9vay0mZ3Q7YXBpX2NsaWVudC0mZ3Q7ZnFsX3F1ZXJ5KCRxdWVyeSk7DQo8L2NvZGU+

然後我們echo出結果:

PGNvZGU+DQplY2hvICdVSUQ9Jy4kcmVzdWx0WyJ1aWQiXTsNCmVjaG8gJ0ZpcnN0X05hbWU9Jy4kcmVzdWx0WyJmaXJzdF9uYW1lOw0KZWNobyAnTGFzdF9OYW1lPScuJHJlc3VsdFsibGFzdF9uYW1lOw0KZWNobyAnTmFtZT0nLiRyZXN1bHRbIm5hbWUiXTsNCjwvY29kZT4=

這樣就取得了user的4個欄值,而select內的uid如同前面說的,你可以指定為你從library取得user_id的變數名稱,即可動態取得每個進到應用程式的使用者的這4個欄位值。

如果要取得更多的資料,那麼你就必需使用uid去串其他的資料表,例如:

PGNvZGU+DQokcXVlcnk9J1NFTEVDVCBuYW1lLCBldmVudF9zdWJ0eXBlLCBkZXNjcmlwdGlvbiBGUk9NIGV2ZW50IFdIRVJFIGVpZCBJTiAoU0VMRUNUIGVpZCBGUk9NIGV2ZW50X21lbWJlciBXSEVSRSB1aWQgSU4oU0VMRUNUIHVpZDIgRlJPTSBmcmllbmQgV0hFUkUgdWlkMT0iJy4kZmJfdXNlcmlkLiciKSknOw0KJHJlc3VsdD0kZmFjZWJvb2stJmd0O2FwaV9jbGllbnQtJmd0O2ZxbF9xdWVyeSgkcXVlcnkpOw0KDQpmb3IgKCRpPTA7JGkmbHQ7MzskaSsrKXsNCiAgICBlY2hvICdFdmVudE5hbWU9Jy4kcmVzdWx0WyRpXVsibmFtZSJdOw0KICAgIGVjaG8gJ0V2ZW50X3N1YnR5cGU9Jy4kcmVzdWx0WyRpXVsiZXZlbnRfc3VidHlwZSJdOw0KICAgIGVjaG8gJ0Rlc2NyaXB0aW9uPScuJHJlc3VsdFskaV1bImRlc2NyaXB0aW9uIl07DQp9DQo8L2NvZGU+

在for迴圈裡

PGNvZGU+JGkmbHQ7MzwvY29kZT4=
PGNvZGU+55qE6Kit5a6a5piv5Zug54K66LOH5paZ6YeP5aSq5aSn77yM5Zyo56+E5L6L5LiK5Y+q6K6T5a6D6LeR5Ye6M+ethuizh+aWmeWwseWlvTwvY29kZT4=

這些範簡單的範例在Wiki內都可以找到,只是Wiki裡的範例我實際照用後發現好像都有點問題,所以把我自己測試過確定可以跑的出結果的例子放在這裡供大家參考。
最後很重要的一點,在FQL裡並不允許你使用select * (就是select 全部)這樣的語法,你必需一個一個的指定你想要取得的欄位名稱。

FQL所有Table列表:
FQL Tables

參考資料:
1.Table – User (Wiki)

2.FQL

Tags: , , , , , , , , ,

發佈日期: 2009年11月30日 星期一 | 文章分類:FaceBook | 訂閱這篇文章:RSS 2.0
Both comments and pings are currently closed.

Comments are closed.