Facebook büyüdükçe büyüyor. Zamanla da büyüyecek gibi duruyor. Bu büyümeyi benim incelemem alanım dışında olduğu için sebeplerini araştırmayı pazarlamacılara bırakıyorum. Fakat geliştirici gözüyle Facebook’ta dikkat ettiğim en önemli olay “gerçekten güzel düşünülmüş bir altyapısı” olması. Özellikle “application” kavramı iyi düşünülmüş.
Yakında sunmayı planladığımız projemiz için ayrıca bir Facebook uygulaması da geliştirecektik. Öncesinde bir bilgi birikimim olması açısında Facebook Applications yapısına biraz göz attım.
Facebook java ve php geliştiricileri için official kütüphaneleri sunuyor. Özellikle PHP kütüphanesine ait bir çok örnek bulabilirsiniz.
Fakat, Kimyapacak.Com’u Ruby diliyle geliştirdiğim için RFacebook kütüphanesi benim ilgi alanıma giriyordu. RFacebook, “api”yi kullanan “api” olarak düşünülebilir. Alt yapısında “Hpricot” kullanıyor. RFacebook’un da en önemli kozu ruby “method_missing” fonksiyonu. Api’ye methodları bu şekilde iletiyor. Yani RDoc dökümantasyonunda Facebook fonksiyonlarının çoğunu görememiz bu yüzden, kullanamadığımızdan değil.
RFacebook’u gem paketi ile kurabiliyoruz:
sudo gem install rfacebook
Rails uygulamaları için; uygulamamızı kodlayıp en son bunu facebook’a entegre ediyoruz. Buradaki anahtar kelime “session” oluşturumu için :require_facebook_install | :require_facebook_login .
Kendime örnek bir uygulama seçerek ve “Burhan Altıntop” grubunun üye sayısını da göz önüne alarak Burhan Altıntop replikleri uygulaması geliştirdim. Bunun bir sebebi de fazla karmaşık bir uygulama olmamasıydı. Aslında böyle gibi dursa da işin en “zor” kısmından başladığımı sonradan anladım. Zira, facebook her sayfayı bellekte tutuyor. Özellikle profil sayfalarına büyük önem veriyor bu konuda. Yani “profil sayfasını” değiştirmek için facebook’a bilgi göndermek gerekiyor. Durum böyle olunca ve uygulama da sadece sözleri gösterince herhangi bir istek kullanıcılardan gelmemiş oluyor. Bunu çözmek için “Infinite session keys” kullanmak kaçınılmaz oluyor. Kullanıcı bir işlem yaptığı zaman (örn. uygulamayı kurmak) bunu veritabanına kaydetip daha sonra her kullanıcı için bu anahtarla giriş yapıp setFBML’yi kullanmak lazım oluyor.
Aslında tüm sayfalarda aynı içerik yer alacaksa bunun için FBML etiketi olan fb:ref düşünülmüş. Bu şekilde bir “handle” yahut “url” belirterek tüm heryeri güncelleyebiliyoruz fb:ref’e sahip olan. Fakat böyle olunca her profilde aynı içerik gösterilmiş oluyor.
Bir diğer değişken söz üretme tekniği ise uygulamayı yazdıktan sonra aklıma gelen bir sistem. Yine fb:random ile fb:ref’i birbirine katarak her sayfa güncellemesinde bir söz çıkartılabilir. Veritabanına yeni söz eklendiği zaman fb:ref’i güncellemek yeterli olacaktır.
Özet geçmek gerekirse, Facebook Applications, güzel bir yapıya sahip. İlk izlenimden elde edindiğim en önemli husus ve forumlarda da gördüğüm kadarıyla “profil kutuları” güncellenmesi. Güncelleme için mutlaka yazılıma istekte bulunulması lazım. Tetiklemeden güncellemek için (örneğin cron olayları için) infinite session’ları veritabanına kaydetmek lazım.
Bunun dışında normal bir uygulamayı facebook’a aktarmak inanılmaz bir yük değil. Özellikle kullanıcılara özel içerikli sistemlerde tabloda ekstradan “fb_user_id”yi tutan bir alan olursa sorgulamalarda user_id yerine fb_user_id ile çoğu kez işi götürebilirsiniz. (fb_user_id kullanıcının facebook id’si)
Bir de uygulamanız için iyi bir tasarımcı bulmayı ihmal etmeyin derim ben. Yazılımın tüm baloncuk hakları Sinan’a ait (:







bunu ne ara yazdın arkadaş? güzel olmuş :)
tüm baloncuk hakları :) iyimiş.