Tagtoo開發日記

關於部落格
  • 89157

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

Facebook API 備忘(二)



 這次來談談Facebook今年推出的Graph API



從開發者的角度來說 Facebook Graph API 提供一個一致性的邏輯 來簡化對Facebook讀寫資料的方式 在Graph API的概念中 舉凡 人 圖片 活動 粉絲頁 應用程式 狀態訊息 影片等 都是open graph中的一個物件 擁有獨一無二的編號 例如我FB帳號對應的編號是100000703046844   可口可樂粉絲專頁的編號是40796308305

所以連到 https://graph.facebook.com/100000703046844  就會回傳我的基本資料
{
   "id": "100000703046844",
   "name": "Ber Zou",
   "first_name": "Ber",
   "last_name": "Zou",
   "link": "http://www.facebook.com/people/Ber-Zou/100000703046844",
   "gender": "u7537u6027",
   "locale": "zh_TW"
}


連到https://graph.facebook.com/40796308305  就會回傳可口可樂粉絲專頁的基本資料
{
   "id": "40796308305",
   "name": "Coca-Cola",
   "picture": "http://profile.ak.fbcdn.net/profile-ak-snc1/object3/1853/100/s40796308305_2334.jpg",
   "link": "http://www.facebook.com/coca-cola",
   "category": "Consumer_products",
   "username": "coca-cola",
   "products": "Coca-Cola is the most popular and biggest-selling soft drink in history, as well as the best-known product in the world.nnCreated in Atlanta, Georgia, by Dr. John S. Pemberton, Coca-Cola was first offered as a fountain beverage

by mixing Coca-Cola syrup with carbonated water. Coca-Cola was introduced in 1886, patented in 1887, registered as a trademark in 1893 and by 1895 it was being sold in every state and territory in the United States. In 1899, The Coca-Cola

Company began franchised bottling operations in the United States.nnCoca-Cola might owe its origins to the United States, but its popularity has made it truly universal. Today, you can find Coca-Cola in virtually every part of the world.",
   "fan_count": 11529368
}


為求簡單明瞭  以上的講法有點簡略
事實上連過去的網址有時會帶一個access_token參數
控制了每個facebook app所能請求的物件資料範圍
這個access token會在使用者做facebook login 成功後從server 端傳來
有機會再說了


在javascript SDK中  利用FB.api這個method
我們就可以直接在瀏覽器端對FB server發出請求來讀取物件的一些資料
其實和上一段例子背後的原理完全相同  就是對某個url發出請求罷了
差別只有上一段我們是用瀏覽器去看回傳的東西  現在則是用程式來接收它們
FB API 幫我們處理掉一些麻煩事(cross domain request + Ajax)  不然要達成一樣的效果至少需要數十行js code
而現在只要優雅的數行

例如:
我想取得自己在Facebook帳號的name欄位
FB.api('/me', function(response) {
  alert(response.name);  // or anything you want to do with server side response
});


想取得我最近新增的三個好友的name
FB.api('/me/friends', { limit: 3 }, function(response) {
  for (var i=0, l=response.length; i<l; i++) {
    var friend = response[i];
    alert(friend.name);
  }
});


注意這邊的'/me' 是個簡寫  實際上就是 "https://graph.facebook.com/me"
同理  "https://graph.facebook.com/40796308305" 亦可簡寫成 '/40796308305'
值得一提的是你的app必須先取得用戶的同意  才能取得他的一些進階資料
例如email


要寫入也是相似的道理  只有稍稍複雜一點
除了要傳入欲寫入的物件之外  還要指定動作種類以及寫入內容
例如想發佈自己的塗鴉牆(feed)

var body = 'Hello, world!';
FB.api('/me/feed', 'post', { body: body }, function(response) {
  if (!response || response.error) {
    alert('Error occured');
  } else {
    alert('Post ID: ' + response);
  }
});


第一個參數指明是想對 '/me/feed' 執行某動作
第二個參數指定了我想執行'post' 動作(其他尚有 get  以及delete 這些動作, 預設動作是get)
第三個參數是我想post的資料
第四個參數是指定此動作執行完畢要做什麼(callback function)

別忘了要發佈到塗鴉牆上必須要有該user的publish_stream 權限


物件之間的關係亦可使用此API獲取
url格式是 https://graph.facebook.com/ID/CONNECTION_TYPE
其中ID為帳戶編號(人)  CONNECTION_TYPE為關係種類
例如: 我參加了 Jamie's Startup Mixer活動  所以我和Startup Mixer之間有events(活動)關係
又例如我加了Teddy Yang這個帳號為朋友  所以我和Teddy Yang之間有friends(朋友)關係
所以你會發現 由 https://graph.facebook.com/me/events 這個url回傳的資料中 會出現這樣的一項
{
    "name": "Jamie's Startup Mixer u5275u696du4ebau540cu6a02u6703",
    "start_time": "2010-07-16T01:30:00+0000",
    "end_time": "2010-07-16T04:30:00+0000",
    "location": "Champagne Lounge (I)",
    "id": "109484055769957",
    "rsvp_status": "attending"
},

代表這個活動的確和我在events這個型態上有連結
用口語來說就是我參加了這個活動

而在 https://graph.facebook.com/me/friends這個url回傳的資料中
會出現這個項目
{
       "name": "Teddy Yang",
       "id": "1038129189"
},

代表我和這個人在friends這個型態上有連結
用口語來說就是我和他是朋友
以此類推  從https://graph.facebook.com/me/likes這個url的回傳中可以得知我曾經對哪些東西按過讚
https://graph.facebook.com/me/books 可以得知我喜歡哪些書籍  等等
像我們在本文一開始提到的例子 https://graph.facebook.com/me/feed  它會回傳你塗鴉牆的所有訊息
也是遵循這種格式   注意這邊的例子都要有access token才能存取  否則會看到以下訊息:
{
"error": {
"type": "OAuthException",
"message": "An active access token must be used to query information about the current user."
}
}
 


以上雖然是技術上的描述  不過我們不難推想出
隨著facebook的用戶越來越龐大  以及social plugin廣泛的被嵌入在大量的第三方網站
或許將來有一天  網路上各式各樣的東西  如文章  圖片  影片  活動  網頁 等等
都會成為facebook的"物件"  被編上了編號  而人也是facebook的物件
只要用facebook帳號登入  你對各種東西的喜好就會儲存在facebook上
只要你允許  網站開發者就可以利用facebook API 來存取這些資訊
可怕嗎?  見仁見智  我是覺得還好(我鮮少有喜好真的不想讓別人知道的)

這邊有一些相關文章在討論這件事
http://mrjamie.cc/2010/04/27/should-you-fear-facebook/
http://mmdays.com/2010/04/23/facebook_deal_with_devil/
http://mmdays.com/2010/04/24/when_facebook_rules_the_world/

這邊是如何設定隱私權
http://share.youthwant.com.tw/reader/article.php?idx=001340432

這邊是相關技術文章
http://blog.yam.com/tagtoo/article/30973586
http://blog.yam.com/tagtoo/article/31108577

我的創業手記
http://www.startuplive.cc/author/zouber/

zouber

相簿設定
標籤設定
相簿狀態