Kendi uygulamalarımızda Facebook verilerini kullanmak üzere Access Token alma adımlarını anlatacağım. Uygulamamızda kullanacağımız Facebook verilerini almadan önce authentication yani kimlik doğrulama yapmamız gerekir. Bu doğrulama esnasında bir access token üretilir ve bu key yardımıyla kimliğimiz doğrulanmış olur. Eğer uzun süreli işlemler yapacak isek (Facebook hesabımıza otomatik post girmek gibi) işe o zaman Long Lived Access Token (Never Expire Token) ‘a ihtiyacımız olacaktır. Bu yazımızda ilk önce access token nasıl alınır ondan bahsedeceğim daha sonrasında Uzun süreli access tokene değineceğim.
- Öncelikle Github’dan Facebook Api için gerekli kütüphaneleri buraya tıklayarak indirelim. İndirdiğimiz dosya içerisindeki facebook klasörünü localhostun içerisinde uygulamammız için oluşturduğumuz klasörün içerisine atalım.
- Şimdi geliştiriciler için Facebook sayfasına buradan giriş yapalım ve yeni bir Uygulama oluşturalım.
- Uygulama ismini girelim.
- Sol taraftaki menuden basic’ e tıklayalım.
- Bizi bu şekilde bir pencere karışılıyor. Bu sayfayı ilk açtığımızda App Secret gizli olarak geliyor bunu show diyerek gösterelim.
- Yukarıdaki resimde App id ve App Secret bilgilerini uygulamamızda kullanacağız ama önce yönlendirme linkini girelin. Yönlendirme linki İnstagram ve Google Api lerinde olduğu gibi OAuth da yapılan yönlendirmedir.
- Yine sol menuden Products altındaki > Facebook Login > Settings menusune tıklayalım.
Bu sayfada istemci OAuth ayarları yer almakta biz buradan Valid OAuth Redirect URIs kısımına yönlendirecek urlimizi yazıyoruz. Burada dikkat etmemiz gereken kısım https şeklinde yazmamız. Bu linki neye göre yazıyoruz? Konunun en başında php sunucumuzda uygulamamız için oluşturduğumuz klasörün içerisine 2 tane dosya oluşturacağız bir tanesi login.php diğeri ise fb-callback.php dosyaları olacak aynı dizin içerisinde de Facebook adındaki Api kütüphanesi bulunacak. Bu dizinde oluşturduğumuz fb-callback.php dosyasının linkini buraya yazıyoruz. Yani Facebook dan yetkilendire izini için kod geldiğinde bu sayfamıza yönlenerek gelen kodu bu sayfa içerisinde kullanacağız.
Buraya kadar her şey tamam ise artık App ID ve App Secret bilgilerimizi kullanmaya geldi.
login.php dosyasının içersine
<?php require_once 'facebook/autoload.php'; $fb = new Facebook\Facebook([ 'app_id' => 'BURAYA APP İD GELECEK', 'app_secret' => 'BURAYA APP SECRET GELECEK', 'default_graph_version' => 'v2.2', ]); $helper = $fb->getRedirectLoginHelper(); $permissions = ['email,publish_actions,rsvp_event']; $loginUrl = $helper->getLoginUrl('BURAYA Valid OAuth Redirect URI GELECEK', $permissions); echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>'; ?>
$permissions = ['email,publish_actions,rsvp_event'];
bu kod parçasında kullanıcıdan gerekli izinleri alıyoruz. Biz mail okuma ve yazma izinlerini aldık. Yazma izinlerini ileride post fotoğraf paylaşma ve video yükleme gibi makalelerde kullanmak adına aldığımız izindir. Sadece access tokeni almak test etmek adına email izini yeterli olacaktır.
fb-callback.php dosyasının içerisine
<?php require_once 'facebook/autoload.php'; $fb = new Facebook\Facebook([ 'app_id' => 'BURAYA APP İD GELECEK', 'app_secret' => 'BURAYA APP SECRET GELECEK', 'default_graph_version' => 'v2.2', ]); $helper = $fb->getRedirectLoginHelper(); if (isset($_GET['state'])) { $helper->getPersistentDataHandler()->set('state',$_GET['state']); } try { $accessToken = $helper->getAccessToken(); } catch(Facebook\Exceptions\FacebookResponseException $e) { // When Graph returns an error echo 'Graph returned an error: ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { // When validation fails or other local issues echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit; } if (! isset($accessToken)) { if ($helper->getError()) { header('HTTP/1.0 401 Unauthorized'); echo "Error: " . $helper->getError() . "\n"; echo "Error Code: " . $helper->getErrorCode() . "\n"; echo "Error Reason: " . $helper->getErrorReason() . "\n"; echo "Error Description: " . $helper->getErrorDescription() . "\n"; } else { header('HTTP/1.0 400 Bad Request'); echo 'Bad request'; } exit; } // Logged in echo '<h3>Access Token</h3>'; var_dump($accessToken->getValue()); // The OAuth 2.0 client handler helps us manage access tokens $oAuth2Client = $fb->getOAuth2Client(); // Get the access token metadata from /debug_token $tokenMetadata = $oAuth2Client->debugToken($accessToken); echo '<h3>Metadata</h3>'; echo "<pre>"; //var_dump($tokenMetadata); print_r($tokenMetadata); // Validation (these will throw FacebookSDKException's when they fail) $tokenMetadata->validateAppId('BURAYA APP İD GELECEK'); // Replace {app-id} with your app id // If you know the user ID this access token belongs to, you can validate it here //$tokenMetadata->validateUserId('123'); $tokenMetadata->validateExpiration(); if (! $accessToken->isLongLived()) { // Exchanges a short-lived access token for a long-lived one try { $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); } catch (Facebook\Exceptions\FacebookSDKException $e) { echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n"; exit; } echo '<h3>Long-lived</h3>'; var_dump($accessToken->getValue()); } $_SESSION['fb_access_token'] = (string) $accessToken; ?>
dizinimiz şu şekilde oldu
- htdocs
- uygulama klasörü
- facebook api kütüphane klasörü
- login.php
- fb-callback.php
- uygulama klasörü
Login.php ye girerek yetkilendirme için izin verdikten sonra Access Tokenimiz ve Meradata bilgilerimiz oluştu
Hocam Merhaba.
Facebook sayfamızla ya da instagram sayfamızla etkileşime girenlerin e-posta adresini öğrenmemize imkan var mı?
Merhaba Hüdai Bey,
Instagram Apisinin bize verdiği bilgiler çok kısıtlı tutulmuş,
Eğer sayfanızı takip eden takipçinin bio dediğimiz hesap açıklaması kısmında eposta yazıyorsa veya İşletme hesabı olupta iletişim adresini eposta olarak ayarlamış ise Sayfamızı takip eden kullanıcıların epostasını alabiliriz fakat bunların dışında almak pek mümkün görünmüyor.
Facebook Apisinin bize verdiği bilgiler Instagram apisine göre biraz daha geniş diyebiliriz.
Api ile alamadığımız fakat web site kısmında paylaşılan bildileri Instagram Scraper, Facebook Scraper dediğimiz kazı yöntemi ile de almak mümkün. İyi çalışmalar
Hocam merhaba,
Yeni bir facebook uygulaması oluşturdum 3.2v ama login olmak istediğimde şu hatayı veriyor bunu nasıl aşabilirim ?
Invalid Scopes: publish_actions, rsvp_event. This message is only shown to developers. Users of your app will ignore these permissions if present. Please read the documentation for valid permissions at: https://developers.facebook.com/docs/facebook-login/permissions
Merhabalar Faruk Bey,
Developer hesabı ile giriş yaptığınızda aynı hatayı alıyormuusunuz? Farklı hesaplarla girdiğinizde mi bu hata ile karşılaşıyorsunuz?
Developer hesabından görüyorum