Monday, February 16, 2009

Javascript, FQL ve Facebook Connect

Bir onceki yazidaki videoyu seyrettiyseniz, FB baglantisi yapmak icin sadece Javascript cagrilari yapmanin yeterli oldugunu gormussunuzdur. Aslinda tum Facebook API cagrilarini pur Javascript bazli, yani client/browser/tarayici temelli olarak yapabilirsiniz. Servis tarafi kodlamasina gerek yok.
Ama veriler servis tarafina gerekiyorse, o zaman bir cozum, FB cagrilarini hala JS ile yapmaya devam etmek, ve veriler elde edilince bu verileri Ajax ile (yani Javascript'ten EJB'ye cagri yaparak) servise aktarmak uygun bir yontem olabilir. Bizim uygulamamiz icin sectigimiz yon bu olacaktir. Diger alternatifler "servis tarafinin da" Facebook API cagrilari yapabilmesidir, ki zaten ilk FB Connect yazisinda tarif edilen bu tur bir arayuzdur. Beni burada tek rahatsiz eden durum, Facebook sirketinin servis tarafi Java API'yi desteklemeyi birakmis olmasi; Bu yuzden Google Code uzerindeki kod bazinin bakimi FB sirketi disindaki insanlar ustlenmis. Bu onemli olmayabilir, fakat akilda tutulmasi gereken bir faktordur.
Bu yazinin hedefine gelelim; Burada gorecegimiz ornek bir sayfadan FB'ye baglanmak ve arkadaslarimizin listesini, onlarin bilgilerinden bazi ogeleri alip ekrana basmak. Arkadaslarinizin bilgilerine erismek icin guzel bir yontem FQL adli SQL'i temel almis bir sorgulama dili kullanmak. Evet: FB Javascript API kullanarak, resmen SQL isletebiliyorsunuz. Facebook ortami uygulamaniz icin adeta bir database'e donusuyor. Bu hakikaten guclu bir ozellik.
Arkadas bilgilerini almak icin gereken script soyle;
<script type="text/javascript">
FB_RequireFeatures(["XFBML"], function()
{
FB.Facebook.init("[YOUR APP KEY HERE]", "xd_receiver.htm");
FB.Facebook.get_sessionState().waitUntilReady(function()
{
  window.alert("Session is ready");

  var uid = FB.Facebook.apiClient.get_session().uid ;
  var sql = "SELECT name, birthday FROM user " +
            "WHERE uid IN (SELECT uid2 FROM friend " +
            "WHERE uid1 = "+uid+")";
  FB.Facebook.apiClient.fql_query(sql, function(result, ex) {
      var userName= result[0]['name'];
      alert(userName);
      var bday = result[0]['birthday'];
      alert(bday);
      var bday = result[1]['birthday'];
      alert(bday);
      var bday = result[2]['birthday'];
      alert(bday);

  });
});
});
</script>
Bu sayfa, size ozel FB sifreniz girilmemis ise, onu girmeniz icin sayfa aciyor, sonra gereken bilgileri aliyor. Dikkat: ustte [YOUR APP KEY HERE] diyen yere kendi uygulama kodunuzu girin. Bunun nasil yapilacagini bu yazida gormustuk.
FB'de kullanici bilgileri USER tablosunda tutuluyor, kullanici kimlikleri uzerinden iki kullanici arasinda "arkadaslik" ise FRIEND tablosun uzerinde tutuluyor. USER tablosunun semasi surada.
Ustteki kodda sadece listedeki birkac kullaniciyi gezdik. Istenirse for ile hepsi gezilebilir. Ayrica bilgiler message box ile veriliyor, bu bilgi Ajax ile servis tarafina aktarilabilir.
Ornek kod

xd_receiver.htm


   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


    cross domain receiver page

   



friends.htm

  FQL Friend Demo
    
 

    FQL Friend Demo
 
  Login flow example, with simple API call example
  Login Button:

 
 
 
 
 
  
 



No comments: