前言
老美一直在引領著技術的潮流,就拿開放這事來說吧,也是從Google玩到Facebook再到Twitter,三家公司把開放API玩得不亦樂乎。如果不是開放,估計Facebook與Twitter也不可能在如此短的時間異軍突起,讓Google與微軟毫無反擊之力。
如果用一般程序員的眼光來看,Facebook核心表不過區區45個,但看似簡單並不影響人家的強大,例如Wordpress的表也是極少的。這段時間在折騰Facebook的App開發,國內的資料本是極少,主要是因為國內無法訪問Facebook,所以做Facebook開發的人很少,資料也自然少了。
知識准備
如果你想做Facebook的App開發,首要的知識准備就是翻牆,因為Facebook是在牆外的,不要問我為什麼,你懂的。然後你還需要一些基礎的英文水平,雖然Facebook有簡單中文,但對於開發都來說,許多東西還是英文的,不過沒關系,其實很簡單,以我這麼弱智的英文都能搞定。
其實Facebook支持多種開發語言,包括C#、Python、Javascript、Java等,Javascript/PHP/Python及Android與iPhone的有官方SDK。所以說,你有上述幾種語言之一的開發經驗,就可以做App開發了,其實我個人覺得,最重要的還是創意+Html/CSS/Javascript。基於第三方平台的開發一般都不會是很強大的應用,但畢竟人家2億的用戶不是蓋的,隨便撿個零頭的用戶來都嚇死你了。
OK,最後總結一下,你需要C#/Java/Python/Javascript的開發經驗之一,官方推薦的是PHP5,實際上都不會太難。最重要的還是基礎的網頁語言,雖然簡單,但卻很實用。另外,你可能需要一些簡單的Sql語句,其實也不會太難。
申請
申請一個Facebook的帳號,如果你已經擁有一個帳號,可以忽略此步。
申請開通Developer權限,實際Developer功能也是作為一個特殊的App放在Facebook上,你可以點擊這兒,貌似我沒有找到入口,點擊同意即可。
點擊Set Up New Application按鈕,這時候Facebook會要求你用信用卡或者手機驗證,其實只是驗證一下你的身份而已,不用擔心。
填寫程序的基本信息,這個就是你App的名稱了,可以隨便填寫。然後根據提示一步一步往下走即可,在此我不再累述。小提示:程序名稱可以和別人一樣,但是Canvas Page不能沖突,其實上Facebook的程序是用http://apps.facebook.com/CanvasPage/這種方式來訪問,所以要求Canvas Page是全局唯一的,基本上你能想到的好名稱都已經被申請了,湊合整一個吧。Canvas URL是放在你服務器上的地址,因為Facebook是可以支持iFrame的方式集成的。
到這裡你就可以獲得一個Application Key/App ID/Application Secret了,其中App Key及App ID是在開發中常需要用到驗證的。更復雜的設置咱們暫時忽略吧,只是有一處,在Advanced中有一個Sandbox Mode可以選擇為Enable,因為你在開發過程中可以把程序放到沙箱中,不需要別人看到。
Demo
Facebook提供的API可以說是非常非常強大,我目前還沒有用過人人網與51的API,不知道他們的API是什麼樣的。Facebook的API可以直接寫Sql語句,當然這個Sql語句會經過安全審核的。在寫Demo之前,我簡單介紹一下FacebookAPI的構成。
Facebook的API主要是FQL/FBML/Graph API/Social plugins四大部分組成,其中Social plugins主要是提供一些工具給第三方網站,比如說OpenID登陸和Like按鈕。而FBML是xHTML的一個變種,假如你使用iFrame的方式,可以忽略他們的標記語言,直接自己寫就OK了。所以這兩種API我暫且不談,主要來談談FQL與FBML。
FQL實際上就是Facebook所提供的Sql語句,可以通過FQL查詢Facebook的45個表,基本上和一般的Sql語句沒什麼區別,但是不支持聯結查詢要,可以支持in查詢,根據我的測試大概是這樣。
需要注意的是,你所查詢的內容一定是在經過授權內的,不是說你隨便給個Sql語句就可以查到所有用戶的資料。FQL不允許使用*來查詢所有字段,一定要直接寫入字段的名稱。關於FQL的參考資料,請訪問這裡。
說到授權,我之前也為這個事找了不少的資料,在默認授權的情況下,許多的資料例如用戶的E-mail都是null。後來才發現需要經過授權申請,官方提供了一大堆的授權說明,有興趣的朋友可以訪問這裡。在Javascript中授權就是在FB.login需要加上授權的參數即可,其它開發語言也是大同小異。
而對於Graph API,我們可以理解為FQL的提煉版,因為很多時候我們可能只需要簡單的應用,不需要直接去查Sql語句,比如說獲取用戶的好友,就直接用my/friends就OK了,獲取用戶的活動,直接使用me/events就可以了。我們可以這樣來理解Graph API,Facebook讓所有內容都有一個唯一的編碼,不管是活動還是圖片、應用程序、用戶的profile等,而Graph API則可以通過這個唯一的編碼訪問到這些資料。關於Graph API的參考資料,請訪問這裡。
最後,上一道大餐,把Demo代碼給整上來吧,我是使用Javascript來做這個Demo的,你可以選擇你自己熟悉的開發語言。這裡再說一個小技巧,如果你是選擇iFrame方式而非FBML,你可以把程序部署到你本機,然後通過修改Hosts文件的方式,把你程序的DNS指向本地就OK了,好處是不用每次修改都上傳到服務器。
<html>
<head>
<metahttp-equiv="content-type"content="text/html; charset=utf-8">
<title>Hello World</title>
</head>
<body>
<scriptsrc="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">