所以昨天我們已經知道要如何來使用Graph API,也知道有一個很棒的測試工具可以幫助你寫程式,
今天就要來試用這些api,看看取回的資料是什麼格式,是否可以如我們想像中順利。
首先要先確定用戶登入我們的app時,是否真的有開放我們要的權限。
GET /{user-id}/permissions
這邊的user-id可以使用me來替代,當然要用public_profile內的user_id應該也是可以的,只是直接用/me比較方便
為了方便,我們就直接使用PHP SDK ,PHP code是
$session = new FacebookSession($access_token);
$request = new FacebookRequest(
$session,
'GET',
'/me/permissions'
);
首先用access token創建session物件,再用session創建request物件,第二個參數若是GET就是讀取,若是POST就是寫入,有寫入就要提供資料,不管是圖片或是文字,這邊先探討讀取。第三個參數就是api,詳細的api指令可以從這邊查詢:
https://developers.facebook.com/docs/graph-api/reference/v2.1/
取得的結果code
$response = $request->execute();
$graphObject = $response->getGraphObject();
$data = $graphObject->asArray();
那$data到底是什麼,你可以var_dump看,或是別忘了,有一個非常好用的Graph API Exploer:
使用方法很簡單,先按GET ACCESS TOKEN 按鈕,會跳出一個權限的視窗,你要求什麼就要開啟相對應的權限,
然後選擇GET,POST或DELETE,再輸入node / page / field即可!
所以從結果可以看到返回的事JSON格式的資料,data是一個陣列,裡面的物件有兩個屬性permission跟status。
對比var_dump後,發現上段code 的 $data 就是那個陣列,接下來就可以視權限是什麼,有沒有granted,讓App來做適當的反應。
確認權限後,就可以來看看我們能得到什麼資料,
其中public_profile是基礎的公開資料,只要用戶同意login,就一定可以取得,而user_location跟email是要額外要求的!
GET /{user-id}/
有權限才會有email跟location囉,名字可以讓我們稱呼使用者,email用來註冊,location是我們這app的重點,所以也要取得。
friends
GET /{user-id}/friends
接下來我們想要取得朋友列表,但是由exploer測試後發現
怎麼只有幾個而已?我的朋友不止這些啊,難道我被大家unfriend了嗎?QQ
實際上自己測試更慘,取得的資料沒有半位朋友。
經過查詢之後才了解,原來現在只能取得使用者的朋友清單中同樣有在使用你的app並且有開放朋友列表這項權限的人了!
所以用exploer查詢friends,會查到你朋友中也有再用exploer 的人,這樣就非常make sense!因為我的名單出現的都是有在寫程式的朋友。
至於我自己的app當然還在開發中,沒半個人用過。
那如果還想要取得清單怎麼辦呢?可以使用taggable_friends這個參數。
GET /{user-id}/taggable_friends
就可以取得你全部的朋友清單跟大頭貼噢,問題是這個功能,是讓你可以用app發文時tag朋友的,而且僅限這個用途,
不能用這個取得的id,再來查詢那位朋友的資料!這對我們來說會造成什麼問題待會再提。
user_status
GET /{user_id}/statuses
非常猛的一項,會取得你發表過的所有內容,包含照片,影片,打卡,貼文,你去人家那邊留言,但是就是限定你發表的
有些貼文中會有place資料,有些則無。
tagged_places
GET /{user-id}/tagged_places
可以顯示出你被標注過的地點!有經緯度資訊!
user_photos
GET /{user-id}/photos
可以取得使用者被標注的相片,其中資料一樣不一定會有地點資訊
read_stream
GET /{user-id}/posts
重頭戲來囉!可以取得用戶的動態牆資訊!
回到第二項user_friends,本來我們的目標是再3D地球上顯示朋友的動態訊息,但是除非說你的朋友也有使用同一個app,
不然是取得不了他的id的。其實還是可以做成讓使用者登入後,發送邀請給他的朋友,請他使用,還是可以實作原來的idea。
但是沒關係,我已經想到了另一個點子,非常適合用在地球上,只需要FB的location資訊即可,
畢竟仔細想想,若只是看訊息,為何我不用facebook原生的app就好呢?
至於那個點子是什麼,隨著實作的進度大家自然就會理解囉。