在開始使用Facebook Graph API之前,要先懂下列幾件事情與工具:
首先,為什麼會叫做Graph API是有意義的,請參閱這篇「Graph API是什麼東東」及這篇「Facebook Graph API & Demo Example」。
Facebook官網的Graph API Explorer是個很基本的測試工具,想要測試看看API中的語法所能得到的結果,利用這個工具很方便就能做觀察。
- 進入Graph API Explorer是需要登入自己的FB帳號
- 在Graph API Exploer可做的測試都是查詢某個ID的某種CONNECTION_TYPE之回傳資訊(JSON格式),基本觀念還是看這篇「Graph API是什麼東東」。
- 但是,大部分資訊被要求有Access Token才能讓Facebook有所控管下進行查詢(參閱這篇「[宅] facebook開發日誌」)。所以,你可以看到Graph API Explorer頁面最上方有個 "Get Access Token" 的按鈕,先按下這個(勾選全部權限)產生Token再進行測試囉。(如果要正式使用就要申請長期的Access Token)
- 首先,執行Get不輸入任何內容(內定為 "me?fields=id,name" ),按下submit按鈕,應該就能看到兩項資訊以JSON形式顯示。 (沒有指定fields就會顯示完整的)。
- 如果要查詢別人的FB資訊,譬如查中興大學FB的公開個資就要在Get輸入 "NCHU.tw" ,按下submit按鈕。
- 除了公開個資,接下來試試看怎樣得到FB大頭貼的圖檔網址吧,在Get輸入 "NCHU.tw/photos?fields=source",按下submit按鈕就可以可以看到。(這photos語法是Facebook官網「Using the Graph API文件」所介紹的最基本應用)
- 依前述邏輯推敲,如果在Get輸入 "某個相簿ID/photos?fields=source" ,應該可以查出來該相簿的照片吧?試試看,中興大學FB裡面有一個相簿是2014-10-16管院企業家講座,從網址上猜測其ID應是10152418935306569,那就試試在Get輸入 "10152418935306569/photos?fields=source" ,就有圖檔URL資訊呈現。但又觀察到該相簿最後幾張照片資料並未列出,而是還要再往下追下一頁的資料,這樣有點麻煩,但如果在Get輸入 "10152418935306569/photos?fields=source&limit=999" ,就可以把該相簿全部照片資料都列出。
- 但是,要怎麼才能得知所有相簿ID呢?在Get輸入 "NCHU.tw/albums" ,初步觀察,相簿名稱都是以 "name" 表示,而另外在操作時查知相簿封面圖片URL包含在 "picture" 裡面、相簿的文字介紹則在 "description",也就是在Get輸入 "NCHU.tw/albums?fields=name,picture,description&limit=999",按下submit按鈕,就可見相簿相關資訊呈現。而其中也有每個相簿的id,所以從這裡就可以如同前述步驟查每個相簿的照片資料。
- 另外,就單一相簿來看 (譬如前述的 "10152418936631569" ),在操作時查知相簿封面圖片URL包含在 "picture" 裡面,也就是在Get輸入 "10152418936631569?fields=images" ,就可以查到該封面圖片的所有尺寸網址。這個步驟實驗完成後,可以著手寫程式做到這樣的功能:列出所有相簿封面,點選封面就再將該相簿所有圖片列出。
- 而如果想取得中興大學FB的動態時報貼文,則是在Get輸入 "NCHU.tw/posts",按下submit按鈕就可以可以看到貼文相關內容,若只要貼文本身的圖文就好(不要有回應者內容),那就輸入 "NCHU.tw/posts?fields=message,picture&limit=100",參考這個程式範例(sfiddle)(jsbin)。如此取得的資訊,進一步寫出程式就可能像台大學生夯姊好夯作品那樣囉。
- 更多feed語法可參考Graph API Reference :
* Friends: https://graph.facebook.com/me/friends?access_token=...
* News feed (this is an outdated view, does not reflect the News Feed on facebook.com):https://graph.facebook.com/me/home?access_token=...
* Profile feed (Wall): https://graph.facebook.com/me/feed?access_token=...
* Likes: https://graph.facebook.com/me/likes?access_token=...
* Movies: https://graph.facebook.com/me/movies?access_token=...
* Music: https://graph.facebook.com/me/music?access_token=...
* Books: https://graph.facebook.com/me/books?access_token=...
* Notes: https://graph.facebook.com/me/notes?access_token=...
* Permissions: https://graph.facebook.com/me/permissions?access_token=...
* Photo Tags: https://graph.facebook.com/me/photos?access_token=...
* Photo Albums: https://graph.facebook.com/me/albums?access_token=...
* Video Tags: https://graph.facebook.com/me/videos?access_token=...
* Video Uploads: https://graph.facebook.com/me/videos/uploaded?access_token=...
* Events: https://graph.facebook.com/me/events?access_token=...
* Groups: https://graph.facebook.com/me/groups?access_token=...
* Checkins: https://graph.facebook.com/me/checkins?access_token=...
* Objects with Location: https://graph.facebook.com/me/locations?access_token=...* Posts: https://graph.facebook.com/me/posts?access_token=...
以上能在Graph API Explorer測試得出的資訊,進一步只要以正式的Access Token來撰寫程式並將JSON資料解析後做安排呈現,原則上就能寫出基於Facebook的應用。至於Facebook上的公開資料究竟能否放心引用呢?沒問題的,最近才有一個新聞:北檢不起訴正妹策展網站「小海嚴選」,根據 Facebook 的使用者條款,使用者將 po 文的隱私權狀態設為「公開」之後,等於允許「所有人(包括 Facebook 以外的人士)」使用。
依前述概念,以Facebook Graph API得到的JSON資料,撰寫程式將其另做安排呈現,基本上會用到的指令基礎如下:
- JavaScript的JSON Http Request 語法上較為複雜,達成前述擷取相簿圖片的邏輯就是要多寫幾行程式(sfiddle)(jsbin)。
- jQuery的getJSON() 語法上精簡多了,同一個擷取FB相簿的程式(sfiddle)(jsbin),熟悉之後就會喜歡用jQuery語法來寫。
前述抓取FB相簿是不需要Access Token,所以可以直接寫出程式給大家參考。- 抓取FB貼文必須有Access Token,測試時先用Graph API Explorer產生的Access Token來撰寫程式,只要在getJSON()網址參數改成"https://"以及加上"&access_token=................................."。