1. 程式人生 > >Facebook API使用經驗分享

Facebook API使用經驗分享

轉載:http://www.cnblogs.com/ouyangfang/archive/2012/02/21/2360946.html

本例中沒有使用Facebook API SDK,從底層展示了Facebook API的工作流程。

給出了一個這樣的例子:如何在服務端中利用Facebook API獲取到使用者的email和好友列表。

1 申請Facebook API Key。

注意:“Connect URL”(也就是Redirect URL,Facebook登入成功後跳轉到的路徑)一定要設定正確。

例如,我這裡設定為http://127.0.0.1:8080/facebookapi/。Facebook登入成功後會跳轉到這個地址,並在URL後附帶access_token。

2 Facebook登入連結。

用下面的程式段描述登入連結的構成:

APP_ID就是第一步中申請得到的Application ID。

urllib.urlencode()是進行URL編碼。

  1. def home(request):  
  2.     """Index page 
  3.     """
  4.     APP_ID = '179745182062082'
  5.     REDIRECT_URI = 'http://127.0.0.1:8080/facebookapi/'
  6.     login_link = 'https://www.facebook.com/dialog/oauth?' + urllib.urlencode({
    'client_id':APP_ID, 'redirect_uri':REDIRECT_URI, 'response_type''token''scope':'email'})  
  7.     return HttpResponse('<a href="%s">Log in Facebook</a>' % login_link)  

scope引數指定需要使用者授權的許可權(檢視完整的許可權列表),多個許可權直接用逗號分隔。在本例中我們只請求使用者授予可獲取email的許可權。

上述程式碼生成的連結為:https://www.facebook.com/dialog/oauth?scope=publish_stream&redirect_uri=http%3A%2F%2F127.0.0.1%3A8080%2F&response_type=token&client_id=179745182062082

如下圖所示:

3 使用者登入、授權。

這部分是使用者在點選(或自動跳轉到)上述連結後進行的操作。

4 獲取access_token。

使用者登入,授權完畢後,將自動跳轉到如下的地址:

http://127.0.0.1:8080/facebookapi/#access_token=AAACjeiZB6FgIBADGnPw2QGbtZA2aZBAPGlSLZACk2S49CfDTJgcSxbjmAGIZAe3Iqm8SAhmklZBratqpxialzQlEdx9LTMmNBga8EZAfnZCbZBZAMDGntgdKHe&expires_in=88953

其中access_token是存取令牌,有了該引數就可以使用Facebook API獲取各種資訊。

由於引數部分位於錨點符#之後,所以在服務端無法獲取到該引數,這裡我們需要採用一種變通的方法:

  1. def facebookapi(request):  
  2.     """Get user's email and friends list via Facebook API 
  3.     """
  4.     if request.GET.get('access_token'):  
  5.         return HttpResponse('<html><head><script>location = "?"+location.hash.slice(1);</script></head></html>')  
  6.     else:  
  7.         return HttpResponse('access_token=%s' % request.GET.get('access_token'))  

通過JS獲取錨點後的引數並跳轉到http://127.0.0.1:8080/facebookapi/?access_token=AAACjeiZB6FgIBADGnPw2QGbtZA2aZBAPGlSLZACk2S49CfDTJgcSxbjmAGIZAe3Iqm8SAhmklZBratqpxialzQlEdx9LTMmNBga8EZAfnZCbZBZAMDGntgdKHe&expires_in=88953

這樣在服務端就能獲取到access_token引數了。

5 獲取使用者email和好友列表。

下面的API將以JSON格式返回當前使用者的基本資訊。

https://graph.facebook.com/me/?access_token=AAACjeiZB6FgIBADGnPw2QGbtZA2aZBAPGlSLZACk2S49CfDTJgcSxbjmAGIZAe3Iqm8SAhmklZBratqpxialzQlEdx9LTMmNBga8EZAfnZCbZBZAMDGntgdKHe

返回資料格式:

{"id":"100002677566512","name":"Peng Qi","first_name":"Peng","last_name":"Qi","link":"http:\/\/www.facebook.com\/profile.php?id=100002677566512","gender":"male","email":"redice\u0040163.com","timezone":8,"locale":"en_US","updated_time":"2011-07-15T14:07:34+0000"}

下面的API將以JSON格式返回當前使用者的好友列表。

https://graph.facebook.com/me/friends?access_token=AAACjeiZB6FgIBADGnPw2QGbtZA2aZBAPGlSLZACk2S49CfDTJgcSxbjmAGIZAe3Iqm8SAhmklZBratqpxialzQlEdx9LTMmNBga8EZAfnZCbZBZAMDGntgdKHe

返回資料格式(當前只有一個名為Kim Kimmy的好友):

{"data":[{"name":"Kim Kimmy","id":"100000805925544"}],"paging":{"next":"https:\/\/graph.facebook.com\/me\/friends?access_token=AAACjeiZB6FgIBADGnPw2QGbtZA2aZBAPGlSLZACk2S49CfDTJgcSxbjmAGIZAe3Iqm8SAhmklZBratqpxialzQlEdx9LTMmNBga8EZAfnZCbZBZAMDGntgdKHe&limit=5000&offset=5000"}}