顯示具有 FBAPI 標籤的文章。 顯示所有文章
顯示具有 FBAPI 標籤的文章。 顯示所有文章

2013年3月2日 星期六

FBplus Facebook library

最近發現,Facebook API久沒用,往往會忘了差不多。
每次都要花上一點時間,復習一下。
這次索性把他包成library.方便日後使用。

Github : https://github.com/TerrenceTang/FBplus


FBplus

FBplus is a light javascript library for handling facebook data.
FBplus is used url to insert or query data, so developer doesn't need to load heavy library.
FBplus is build on jquery, so user needs to load jquery library before using FBplus

Setting

In first, developer needs to set you app information
    FBplus.prototype.config = {
        TOKEN:'access token',
        CLIENT_ID:"your app id ",
        SECRET_ID:"your secret id",
        CODE:"user's code",
        REDIRECT_URI:"after login, where will be redirect to "
    };

  • TOKEN :
  • CLIENT_ID:
  • SECRET_ID:
  • CODE:
  • REDIRECT_URI:

Start

FBplus is implemented by sandbox methodology. So developer needs to choose which module does he needs.
    new FBplus(['checkin', 'friends', 'config', 'auth', 'wall'], function(plus){
        // dosomethings
    });

    or

    new FBplus("*", function(plus){
        // dosomethings
    });

Auth

The module of Auth is using to help developer to create login url or deal token
    new FBplus(['auth'], function(plus){
        // the scope is about permession which will developer access
        var scope = "read_stream,publish_checkins,publish_stream,user_status,user_checks,user_birthday,friends_status";

        // get login link
        plus.auth.getLoginUrl(scope);

        // get logout link
        plus.auth.getLogoutUrl()

        //get long live token, this is danger to use in client, because it needs the secret id.
        //add this feature is because the defuault timeout in facebook is 2 hours.
        //In develop step, developer needs always re-load access token, it is very annoying.
        plus.auth.ltoken().done(success_callback_function).fail(fail_callback_function);

    });
more information to see facebook permession

Wall

The wall is about some activity of user or friend.
    new FBplus(['wall'], function(plus){
        // to get the home wall which include activitys of user and friends
        plus.wall.home().done(success_callback_function).fail(fail_callback_function);

        // to get the feed wall which base on friend's id
        plus.wall.feed("fid").done(success_callback_function).fail(fail_callback_function);

        // to get freined's shares
        plus.wall.shares("start_time", "limit").done(success_callback_function).fail(fail_callback_function);

        // get comments by id
        plus.wall.comments("id").done(success_callback_function).fail(fail_callback_function);

        // get comments by id
        plus.wall.likes("id").done(success_callback_function).fail(fail_callback_function);

        // get share links by id
        plus.wall.links("id").done(success_callback_function).fail(fail_callback_function);

        // insert message into wall
        plus.wall.insert({message:"content"}).done(success_callback_function).fail(fail_callback_function);
        // insert conment
        plus.wall.insertComment(id, {message:"content"}).done(success_callback_function).fail(fail_callback_function);
        // insert like
        plus.wall.insertLike(id).done(success_callback_function).fail(fail_callback_function);

    });

Friends

The module of friends shows friend list and information
    new FBplus(['friends'], function(plus){
        // show all friend
        plus.friends.list().done(success_callback_function).fail(fail_callback_function);

        // show information of friend
        plus.friends.nfo("fid").done(success_callback_function).fail(fail_callback_function);
        or
        plus.friends.info("me").done(success_callback_function).fail(fail_callback_function);
    });

Checkin

The module of checkin shows the checkin from user or friend
    new FBplus(['checkin'], function(plus){
        // show checkin from friend
        plus.checkin.friend("fid").done(success_callback_function).fail(fail_callback_function);

        // show checkin from me
        plus.checkin.me().done(success_callback_function).fail(fail_callback_function);

        // make checkin
        plus.checkin.insert(
            {
               coordinates:
               {
                  latitude:"25.07698687147",
                  longitude:"121.23201566872"
               },
               message:"test",
               place:"142800992448822"
            }
        success_callback_function, fail_callback_function);
    });

Groups

The module of groups shows the groups from user's id
    new FBplus(['groups'], function(plus){
        // show all groups by user's id
        plus.group.list("fid").done(success_callback_function).fail(fail_callback_function);

        // query informantion of group by groupd id
        plus.groups.info(gid).done(success_callback_function).fail(fail_callback_function);

        // query the members of group
        plus.groups.members(gid).done(success_callback_function).fail(fail_callback_function);

        // query the feed  by group's id
        plus.groups.feed(gid).done(success_callback_function).fail(fail_callback_function);
    });

Query Parameter

When querying data, there are several useful parameters that enable you to filter and page through connection data:
  • limit
  • offset
  • until
  • since
   new FBplus(['checkin'], function(plus){
       // get 3 numbers data
       plus.checkin.me({limit:3});
       // get checkin which create until yesterday
       plus.checkin,me({until:"yesterday"});
       // get checkin which was created  since yesterday
       plus.checkin,me({since:"yesterday"});
    });

2011年9月9日 星期五

常用FBAPI 資料取得方式-取得user info & friend list & friends

在這記錄一些常的FB資料取得方式。

首先先宣告告queryFQL Function 簡介呼叫程序
  function queryFQL(sql , callBack){
    FB.api({method:'fql.query',query:sql}, callBack);
  }


取得所有群組名稱
queryFQL('select flid , name from friendlist where owner=me()' ,
  function(response){
    console.log(response);
  });

取得好友與所在群組資料
queryFQL('SELECT uid, flid FROM friendlist_member WHERE flid IN (SELECT flid FROM friendlist WHERE owner=me())' ,
  function(response){
    console.log(response);
  });

取得好友的詳細資料
queryFQL('SELECT name,pic_square, uid from user where uid in (SELECT uid2 FROM friend WHERE uid1 = me())', 
  function(response){                                                 
    console.log('user-data',response);                                
})


如果要確知道要取得那些資料,可以使用multiquery。減少request的發送次數
先宣告multiQueryFQL Function
var multiQueryFQL = function(sql , callBack){
  FB.api({method:'fql.multiquery',queries:sql} , callBack);
}


同時取得好友與分類名稱
multiQueryFQL([
  'select flid , name from friendlist where owner=me()', 
  'SELECT uid, flid FROM friendlist_member WHERE flid IN (SELECT flid FROM friendlist WHERE owner=me())',
  'SELECT name,pic_square, uid from user where uid in (SELECT uid2 FROM friend WHERE uid1 = me())'],
  function(response){};

第一個參數型態為Array,存放所有FQL Query指令。
回傳資料也為Array。對應各個FQL結果

至於取得的User詳細資料。可轉換為User['名稱'] = UID ; 的儲存陣例,方便查詢
以上面使用multiQueryFQL查詢為例,第三個FQL查詢回傳Use的詳細資料
var users      = response[2].fql_result_set ;
var userInfo   = {} ;
for(var uid in users){
  userInfo[users[uid].uid.toString()] =  users[uid].name ;  
}

取得使用者圖片,可以以透過下列網址取得
http://graph.facebook.com/[user id]/picture

如果要將每個friend加入相對應的群組,方便資料查詣。則可以做個簡單的資料轉換。
var groupInfo  = response[0].fql_result_set ;
var friendList = response[1].fql_result_set ;
if(!groupInfo && !friendList && !users) return  ;
  for (var gid in groupInfo){
    if(!groupInfo[gid].user) groupInfo[gid].user = [] ;
      for(var fid in  friendList){
         if(groupInfo[gid].flid === friendList[fid].flid){
           groupInfo[gid].user.push(users[uid].uid);                          
           delete friendList[fid]; 
       }
    }
}

//最後groupInfo的資料格式為
[{flid:'0001',name:'title-name',user:['0001','0002']},{flid:'0002',name:'title-name',user:[xxx,xxx,]}]