2012年11月2日 星期五

[宅] facebook開發日誌 - facebook API入門(2)

接續前一篇的acess token講解,這篇會介紹一下facebook所提供的4種API
說是這麼說,但其實這篇會比較短,因為真的要詳盡介紹每個API的話乾脆直接買本書看比較快。



"那你他O幹嘛不兩篇寫一起就好?"



因為我要寫兩篇,
感覺比較有成就感,
順便騙騙文章數。

而且我不只要騙文章數,還要騙字數


騙字數的前情提要


<!-- 複製貼上 開始 -->
facebook提供開發者四種API:

  • Login
  • Graph API
  • FQL
  • Legacy REST

<!-- 複製貼上 結束 -->



Login

顧名思義就是提供登入的方法,可能是網站也可能是APP,這邊就不詳述。


Graph API

主要是用於社群用途,只要有適當的存取代碼(access token),就可以網址加上參數的方式去query需要的data,回傳的形式可能是json或單純的網址。這裡有個很簡單的範例,只要在空格內輸入你的UID就行了(不知道自己的uid請回去上一篇看看怎麼取得自己的基本資料,資料中的"id"就是了)

http://graph.facebook.com//picture GO!


簡單的一個網址就可以取回使用者的頭像了。

"但是剛剛不是才說要取得access token嗎?怎麼這麼輕易就取得了使用者的頭像了勒?"


這是因為facebook對資料有分級,以頭像來說好了,無論你和他是不是朋友,大部分facebook使用者的頭像都是可見的,存取這類開放的資料當然不需要特別的授權。甚至很多人的興趣、學歷、感情狀態等資料都是沒有設隱私的,我們就可以在沒有access token的情況下query到這些資料,就跟上一篇講到的一樣。




FQL

FQL是在取得適當access token的情況下,以類似SQL語句的方式來query資料。能做的事情更多,但對沒碰過SQL的初學者來說就比較沒那麼容易上手,只要稍微碰過SQL的人就會發現FQL相當好用也很強大
為了達到一開始所提到的收集照片的功能,我寫了以下的一段code:
SELECT pid, src, src_big, caption FROM photo
WHERE aid IN (
  SELECT aid, owner, name, object_id 
  FROM album WHERE owner=#{me}
)
你可以把這段code貼在Graph API Explorer上,但是首先記得要切換成FQL模式,並再點一次"取得存取代碼"來增加"user_photos"這個存取權限。點選送出後,看看會發生什麼事。
(記得把#{ME}換成你的ID啊!)

Legacy REST

facebook已經宣佈不建議使用這種API,並建議使用graph api,所以當然果斷捨棄不解釋
"We are in the process of deprecating the REST API."


[宅] facebook開發日誌 - facebook API入門(1)

在開發facebook相關應用的時候一直沒有好好地做一個整理,
最近有個應用需要query使用者在timeline上發的照片,正好趁此筆記一下FQL這個東東結果一不小心就寫成API的介紹文。

前言

facebook提供開發者四種API:

  • Login
  • Graph API
  • FQL
  • Legacy REST

但在開始介紹API之前必須先提授權碼(access token)的概念,讓我們使用Graph API Explorer這個好用的facebook開發工具來一步一步了解access token的概念。
首先,登入 http://developers.facebook.com/tools/explorer/ ,你會看到以下畫面:


先在"GET"旁邊的輸入欄打"ME",然後送出。如果你從來沒有使用過這個工具的話,就會看到以下訊息:
{
  "error": {
    "message": "An active access token must be used to query information about the current user.", 
    "type": "OAuthException", 
    "code": 2500
  }
}
這代表你沒有權限存取現在的facebook使用者(你自己)的資料,但在取得這個權限之前,我們先來做另一個小試驗:在同一個地方打"zuck",相信你會看到以下訊息:
{
  "id": "4", 
  "name": "Mark Zuckerberg", 
  "first_name": "Mark", 
  "last_name": "Zuckerberg", 
  "link": "http://www.facebook.com/zuck", 
  "username": "zuck", 
  "gender": "male", 
  "locale": "en_US"
}
眼尖的你可能馬上就發現了這是facebook創辦人Mark Zuckberg的基本資料,酷吧!
但是為什麼自己的資料拿不到,卻可以拿到別人的資料勒?因為Zuckberg是特例嗎?一定是這樣子的吧哈哈哈!




其實不是特例,因為你打別人的名字也是一樣,Peter、John、Mary之類的菜市場名都可以試試,甚至你如果曾在facebook上取過英文也可以試試看....

"X!真的可以耶!這是怎麼回事!?"

這是因為"ME"是取得任何正在瀏覽這個網頁的facebook user的參數,這樣開發者就可以很靈活的寫相關應用。所以雖然基本上不用任何acess token也可以取得特定使用者的基本資料(使用特定ID),但要用ME來靈活運用使用者資料就得要取得你的授權(acess token)了。

所以前面出現的"OAuthException"就是因為Graph API Explorer還沒取得你的授權,所以不能用ME來取得你的資料的錯誤提示。現在我們就點選Graph API Explorer頁面上的"取得存取代碼"這個按鈕來讓它取得你的授權,然後就會彈出這個視窗:


上面佈滿了各種選項,代表了你要讓這個應用程式存取那些權限,點選"user_about_me"以後送出就會看到熟悉的畫面:


現在你應該知道facebook app的登入畫面是怎麼來的了

之後Graph API Explorer就可以使用你的基本資料,輸入"ME"之後也會順利的出現相關訊息,這個簡單的步驟解釋了app從登入到使用你的資料的基本流程,也是facebook應用開發者的第一步。

而Graph API Explorer可不只是facebook開發的入門工具,畢竟facebook所提供的API還不少,所以即使是有開發經驗的工程師也會時常使用這個工具來驗證自己的邏輯是否可以正確運作。

身為一個開發者,只知道這些是不夠的,請讓我們往下一篇邁進!

[宅] 宅男臥軌日記(7) - .nil? , .empty?, .blank? 的區別


.nil? 和.empty? 是ruby的方法,而.blank? 是rails的方法
這三個method都是判斷是否為空值。


.nil?

判斷對象是否存在(nil)。不存在的對像都是nil的

.empty?

對象已經存在,判斷是否為空字串。
比如一個字符串是否為空串,或者一個數組中是否有值。

.blank?

具有以上兩個method的特性,railsAPI:
An object is blank if it’s false, empty, or a whitespace string. For example, “”, “ ”, nil, [], and {} are all blank.