Facebook Graph API ve Access Token

Open Authentication 2.0 kullanan nadir sistemlerden Facebook, bir arkadaşımın da dediği gibi önceden yapması gereken birşeyi yine sonradan yaptı ve graph api üzerinde access_token anahtarını bazı nesneler üzerinde zorunlu hale getirdi.

İşte o zorunlu olan önemli nesnelerden bazıları;

  • User
  • User/feed
  • User/friends
  • User/posts
  • Photo
  • Photo/comments
  • Photo/likes
  • Photo/picture
  • Photo/tags
  • Status Message
  • Status Message/comments
  • Status Message/likes

Bir çok dil için sağlanan güncel Facebook SDK’lar access token anahtarını sağlayabiliyor.

PHP Facebook SDK’da;

require '/sdk/facebook.php';
$facebook = new Facebook(array(
'appId'  => 'hhhhhhhhhh',
'secret' => 'mmmmmmmmmmmmmmm',
));

$facebook->getAccessToken();

C# Facebook SDK’da;

FacebookApp app = new FacebookApp();
String AccessToken = app.Session.AccessToken;

Bunların dışında kendinize özgü Facebook SDK yazmışsanız access_token anahtarını almanın yolu aşağıdaki linktedir.

http://developers.facebook.com/docs/authentication/

Gelelim access_token anahtarının kullanımına. Bu anahtarı bir şekilde elde etmeyi başarırsanız aşağıdaki örneklerde olduğu gibi kullanmanız yetecektir.

Profil Bilgilerimi Getir

$me_profile = $facebook->api('/me?access_token=xxxxxxxxxx');

Arkadaşlarımı Getir

$me_profile = $facebook->api('/me/friends?access_token=xxxxxxxxxx');

Facebook değiştirdi biz düzelttik. Facebook değiştiriyor biz düzeltiyoruz ve Facebook gene değiştirecek biz gene düzelteceğiz. Selametle…

  • çok detaylara inilmese de eksikliği hissedilen bir konuydu access token. teşekkürler,

  • uygulamaya girdiğinde oto post attırabiliyorum fakat istediğim zaman kullanıcının duvarına post atmak istiyorum. gerekli izinleri aldım.
    kullandığım kod şu.
    try {
    $statusUpdate = $facebook->api(“/me/feed”, ‘post’, array(
    ‘message’ => “sezercik.net demo uygulaması”,
    ‘link’ => ‘http://sezercik.net’,
    ‘picture’ => ‘http://www.sezercik.net/template/default/img/logo2.png’,
    ‘name’ => ‘Sezercik.net’,
    ‘description’=> ‘sezercik.net demo uygulaması ile post edilmiştir.’
    ));
    } catch (FacebookApiException $e) {
    d($e);
    }
    neresinde değişiklik yapmalıyım? mailime cevap bekliyorum. teşekkürler

    • Merhaba,

      Öncelikle bir uyarıda bulunayım 🙂 Facebook otomatik post’lara biraz kızmakta. Bunun sonucu uygulamayı kapatmaya kadar gidebiliyor. Bunu kullanırken günlük post sayılarını spam olarak kalbul edebiliyor. Bu yüzden günlük gönderim sayılarını iyi ölçeklemen gerek.

      Asıl meseleye gelince öncelikle kullanıcıdan publish_stream (duvarına yazabilme) izni almış olman gerekiyor. Bunu zaten yapmışsın sanırım. Senin istediğin şey anladığım kadarıyla kullanıcı login olmadan ve haberi olmadan bunu sistemin bir olay sonucu veya otomatik yapmasını istemen. Bunun için “/me/feed” yazan birinci parametredeki “me” yerine göndereceğin kullanıcının Facebook ID’sini vermen yeterli olacaktır.

      • Ersin

        Selamlar aynı şekilde aynı sorunu yaşıyorum.Kullanıcı logout olduğunda duvarına yazı yazamıyorum.Sizin dediğiniz gibi “me” yerine kullanıcının id sini çeksem de olmuyorYardımcı olurmusunuz

        • Merhaba Ersin,

          Bunun için login sırasında extended permission‘lardan offline_access iznini almış olmanız gerekmektedir.

          Normalde kullanıcı için oluşturulan access_token‘ın belli bir sonlanma zamanı vardır. Sizler offline_access iznini aldıktan ve login ettikten sonra kullanıcının access_token sonlanma zamanı 0 oluyor yani hiç sonlanmıyor. Taki kullanıcı ismini, e-posta adresini veya şifre gibi temel bilgileri güncelleyene kadar. Bu anahtarı DB veya benzeri bir yerde sakladıktan sonra kullanıcı ID’si ve access_token‘ıyla işlem gerçekleştirebilirsiniz.

          Örnek Javascript;

          <script>
          FB.api("/"+kullanici_id+"?access_token="+soldaki_idye_sahip_kullanicinin_access_tokeni, function(response){
            console.log(response); // firebug gibi eklentilerin consol bölümünden gorebilmek icin
          });
          </script>
  • siverekli

    Önder Yüceur s.a sorun şu ki idraslerini nasıl alacam ve çoklu gönderi nasıl olacak onu bilmiyorum idleri nasıl alacagimi yaza bilirmisin bana

  • Ali Çiğdem

    Bunun illaki mvc mi olması gerek? Kullandığımız klasik projeler için bir örnek varmı?

    • Merhaba Ali,

      Yukaridaki anlatim herhangi bir MVC’ye bagli anlatım değildir. İçerikte tamamen projenize import edilesi kütüphanelerin kullanımını örneklendiren script’ler vardır.

  • Berk

    Merhaba,öncelikle açıklayıcı anlatımınız için teşekkürler.
    Ben likes kullanarak bir durumun beğenilerine erişebiliyorum fakat bunu uygulamadaki diğer kişilere nasıl beğendirebilirim bunun için ne tarz bir kod gerekli ve postlama işlemini curl ile mi yapacağız ? hangi name’lerle hangi bilgileri postlayacağız?
    Bilgilendirirseniz sevinirim.İyi günler.

    • Merhaba Berk,

      Bir şeyi beğendirebilmen için Facebook’un sunduğu Social Plugin’lerden Like Button’u kullanman gerekli. Like Button Eklentisi linkine tıklayarak buradaki formu doldurup sana vereceği kodu sitene veya uygulamana ekleyebilirsin. Fakat bu plugin ile sadece herhangi bir web adresini beğendirebiliyorsun. Bu web sitesi de olabilir senin Facebook sayfanda olabilir. Api’de benim henüz bildiğim bir durum veya herhangi birşeyi post veya get metodlarıyla beğendirebilme servisi yok.

  • Serkan Ünal

    Çok teşekkürler accesstoken için çıldırma noktasına gelmiştim. O kadar uzman site dolaşmışken web in altını üstüne getirmişken sorunu mu yine bir türk blog da çözdüm 🙂

    Tekrar teşekkürler..

  • nevzat

    offline_access iznini nasıl alabilirim sayfayı buldum ama izin isteği gelmiyor.. bir türlü

    • Merhaba,

      access_token iznini izin isteme şekline göre scope parametresi içine offline_access ekleyerek alabilirsin. Bunun için aşağıdaki link işine yarayacaktır. Ayrıca hemen altına Facebook JavaScript SDK‘yı kullanarak bu izni nasıl alacağını gösteren ufak bir de script yazıyorum.

      http://developers.facebook.com/docs/authentication/

      Facebook JavaScript SDK ile bağlantı ve scope

      <script>
      FB.login(function(response) {
         if (response.authResponse) {
           // kullanici izinleri kabul etti ve baglandi
         } else {
           // kullanici vazgecti
         }
       }, {scope: 'email,offline_access'});
      </script>
      
  • Emre

    Önder Bay Merhaba,
    Access Token’ler hakkında kısa ama öz olan bilgilendirmeniz için teşekkür ederim. Bildiğiniz gibi 1 Mayıstan itibaren offline access izni facebooktan kalkmış olacak. Yeni durumda nasıl bir değişiklik yapmamız gerekecek kodlarda bilginiz var mıdır?

    • Merhaba,

      offline_access ile alinan access_token bilindigi uzere kullanici parolasini veya onemli bir profil bilgisini degistirmedigi surece gecerli oluyor. Artik access_token gecerlilik suresini asagida paylasmis oldugum linkdeki yontem ile 60 gune kadar uzatabilirsin. Bu linkte senaryo 3 ve senaryo 4’u inceleyebilirsin. Ben de detayina biraz bakinicam. Fazladan birseyler bulursam buraya yazarim.

      Offline Access Removel

  • Arif

    Merhaba arkadaşım benm access Tokens kodu almam gerek ama hatalar veriyor ne yapmam gerekli nasıl alabilirim bunu ayrıntılı bir şekilde anlatırsan sevinirim … şimdiden çoksağol

    • access token’i alman icin ilk yol facebook-php-sdk Facebook PHP SDK uzerinden;

      <?php
      $access_token = $facebook->getAccessToken();
      ?>

      Eger buradan da olmuyorsa access token bir sekilde zaman asimina ugramis olabilir. Boyle olunca da;

      <?php
      $loginUrl = $facebook->getLoginUrl($params);
      echo "";
      ?>
  • Cem

    Access token’i nasıl alacağımı bilmiyordum. Çok teşekkür ederim 🙂

  • Mustafa

    Merhaba facebookda sanırım değişiklikler olmuş. Bende istediğim zaman kullanıcıların duvarına birşeyler yazmak istiyorum bunu nasıl yapabilirim? asp yada php ile yapmak istiyorum yardımcı olursanız sevinirim.