Merhaba e-bergi okurları! e-bergi'deki ilk ve muhtemelen tek yazımda, Facebook PHP SDK'sından bahsetmek istiyorum. Facebook PHP SDK (yazının geri kalan kısmında SDK olarak kısaltılacak), Web ortamında Facebook'un nimetlerinden yararlanabilmemizi sağlayan, server taraflı API'dir. En basit şekliyle, ziyaretçinin ilgili Facebook uygulamasına yetki vermesi durumunda GET, POST ve DELETE işlemlerini yaptırabilmemizi sağlar. SDK'yı kullanabilmemiz için birkaç şeye sahip olmamız lazım. Bunlar:
- SDK dosyaları (indirmek için tıklayın)
- PHP'yi çalıştırabileceğimiz bir server ya da localhost
- Bir Facebook uygulaması, bu uygulamanın App ID'si ve Secret kodu
Facebook uygulamanızı developers.facebook.com/apps/ adresinden oluşturabilirsiniz. Uygulama oluşturduktan sonra Ayarlar sekmesinden İnternet Sitesi platformunu eklemeyi ve Site URL'si kısmına deneme yapacağınız site domainini ya da http://localhost yazmayı unutmayın. Sözü çok fazla uzatmadan, örnek bir projeyi anlatmaya geçelim. Aşağıda kodları ve açıklaması bulunan proje, uygulamaya yetki verilmesinden sonra, kullanıcının tüm arkadaşlarının beğendiği film kategorili sayfaları Facebook'tan alır, en çok arkadaşın beğendiğinden en aza doğru bir sıralama yapar.
<!--- PHP --->
<?php
// sdk'yı dahil et.
require 'src/facebook.php';
/** sdk'yı kullanarak $facebook adında bir obje oluştur.
* appId ve secret uygulamanızın ID'si ve gizli anahtarıdır.
* Uygulama ayarlarınızdan bu verileri alabilirsiniz.
*/
$facebook = new Facebook(array(
'appId' => '<UYGULAMA ID'SI BURAYA>',
'secret' => '<UYGULAMA SECRET'I BURAYA>',
));
// Kullanıcı zaten giriş yapmış mı, yapmamış mı?
$user = $facebook->getUser();
if ($user) {
try {
/** Kullanıcı giriş yapmış.
* giriş anahtarı (access_token), çoğu sorgunun çalıştırılması için bize gerekli olacak.
**/
$kullanici = $facebook->api('/me');
$logoutUrl = $facebook->getLogoutUrl();
$access_token = $facebook->getAccessToken();
} catch (FacebookApiException $e) {
// hata ayıklama:
echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
$user = null;
}
} else {
/** giriş yapılmamış.
* scope, uygulamanızın kullanıcıdan isteyeceği izinlerdir.
** bu örnekte kullanıcı beğenileri, arkadaşlar ve arkadaş beğenileri isteniyor
* redirect_uri ise uygulamaya yetki verildikten sonra yönlendirme yapılacak adrestir.
** bu örnek için redirect_uri'yi bu php dosyasının adresi olarak ayarlayın.
*/
$statusUrl = $facebook->getLoginStatusUrl();
$loginParams = array(
'scope' => 'user_likes,user_friends,friends_likes',
'redirect_uri' => 'http://1fincan.com/php-sdk/denemeler/test.php'
);
$loginUrl = $facebook->getLoginUrl($loginParams);
} ?>
<!DOCTYPE HTML>
<html xmlns:fb="http://www.facebook.com/2008/fbml" dir="ltr" lang="tr-TR">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Facebook PHP SDK Denemesi</title>
</head>
<body>
<?php
if ($user) :
// giriş yapılmışsa, kullanıcıya resmini göster ve bir selam ver.
?>
<img src="https://graph.facebook.com/<?=$user; ?>/picture" alt="" />
Merhaba <?=$kullanici['first_name']; ?>.
<?php
/** FQL, Facebook'un bizimle paylaştığı ölçüde kullanabileceğimiz bir veritabanı.
* aşağıdaki fql_sorgusu, kullanıcının tüm arkadaşlarının film kategorisine ait beğendiği facebook sayfalarının sayfa ID'lerini toplar.
**/
$fql_sorgusu = "SELECT page_id FROM page_fan WHERE profile_section='movies' AND uid IN (SELECT uid2 FROM friend WHERE uid1 = me())";
$girdiler = array('method' => 'fql.query', 'query' => $fql_sorgusu);
$arkfilmler = $facebook->api($girdiler);
/** verileri aldık, ancak veriler iç içe array'ler halinde. Bu yüzden
* ufak bir for döngüsüyle bu verileri tek bir array'e atıp
** tekrarlanan verilerin kaç kere tekrarlandığını $yfilm değişkeninde
* id => tekrarsayisi şeklinde toparlayalım.
**/
$yfilm = array();
for($i=0;$i<count($arkfilmler);$i++) {
$yfilm[$i] = $arkfilmler[$i]["page_id"];
}
$aflm = array_count_values($yfilm);
arsort($aflm);unset($yfilm);
$kacfilm = count($aflm);
echo '<p>Toplam '.$kacfilm.' farklı film incelendi, arkadaşlarınızın beğenisine göre sıralandı.</p>'
. '<ul id="arklar">';
// sıralama işlemi tamamlandı. bunu sayfaya yazdıralım.
$y=0;foreach($aflm as $k => $z) :
$y++;
$h = $facebook->api('/'.$k.'?locale=tr_TR');
echo '<a href="http://facebook.com/'.$k.'" title="'.$h["name"].'" target="_blank" rel="nofollow">'
. '<li>'
. '<div class="arkPic">'
. '<img src="https://graph.facebook.com/' . $k . '/picture" />'
. '<div class="arkAdi">'.kisalt($h["name"]).'</div></div>'
. '</li></a>';
// 20 filmden fazlasını gösterme.
if($y==21) break;
endforeach;
echo "</ul>";
endif;
?>
</body>
</html>
<!--- PHP --->
Birazcık da CSS ile şöyle bir görüntü elde etmeniz mümkün. Kullanıcının arkadaş sayısı ve arkadaşlarının beğendiği filmlere göre listenin değişebileceğini unutmayın. "Film Replikleri" gibi sayfalar da film kategorisinde olduğundan bu sayfaları elememizin bir yolu yok maalesef.
Daha fazla FQL tablosu, API sorgu türleri ve örnekler için developers.facebook.com/docs/ adresini ziyaret etmenizi şiddetle öneririm.
Kaynaklar: