Twitter yakın zamanda basic authentication sisteminden open authentication sistemine geçmişti. Bu yazıda Twitter’ın REST Api’sindeki kaynaklara erişim için gerekli olan authentication sistemini görelim.

Öncelikle bunun için Twitter’ın PHP için önerdiği kütüphanelere Twitter Libraries adresinden erişebilirsiniz. Ben yazımda TwitterOAuth kütüphanesini kullanacağım. İlk olarak bunu indirmenizi isteyeyim.

Önemli Not 1: Aşağıdaki örnek Framework’lerden soyutlanmış bir örnektir. Sizin bir Framework’ünüz varsa kullanımınızı oraya göre düzenlemeniz kolay olacaktır.

Önemli Not 2: Bu anlatımda sizin Twitter hesabındanızdan bir adet uygulama açıp gerekli erişim anahtarlarına sahip olduğunuzu düşünüyorum. Uygulama oluşturmak için Twitter Apps sayfasına gidebilirsiniz.

Aşama 1 – Twitter kütüphanemizi indirelim

TwitterOAuth adresindeki kütüphayi indirelim

Aşama 2 – Proje dosyalarını oluşturalım

Aşağıdaki dosyaları projenize ekleyin. Buradaki Twitter dizini içine github’dan indirdiğiniz TwitterOAuth kütüphanesi içindeki tüm dosyaları kopyalayın.

|– project
|     |– Twitter (TwitterOAuth Kütüphenesi)
|     `index.php (yeni dosya)
|     `connect.php (yeni dosya)
|     `callback.php (yeni dosya)

Aşama 3 – index.php dosyamıza aşağıdakileri ekleyelim

Her bir satırın üzerindeki açıklamalar aşamaları anlatmaktadır.

<?php

session_start();

// Twitter kütüphanesinden gerekli iki dosyayı(oauth class ve config) 
// require_once ile script'e dahil ediyoruz.
require_once('Twitter/twitteroauth/twitteroauth.php');
require_once('Twitter/config.php');

// callback.php'de oluşacak olan access_token SESSION değerini 
// farklı bir değişkene aktarıyoruz.
$sesAccessToken = $_SESSION['access_token'];

// Twitter oturumunun açık olup olmadığı bilgisini tutan 
// session değerlerinin varolup olnadığının kontrolünü yapıyoruz. 
// Eğer yoksa connect.php'ye yonlendiriyoruz 
if (empty($sesAccessToken) || empty($sesAccessToken['oauth_token']) || empty($sesAccessToken['oauth_token_secret'])) {
  header('Location: /connect.php');
}

// TwitterOAuth sınıfını gerekli başlangıç değerlerini vererek connection 
// nesnesi oluşturuyoruz. Buradaki CONSUMER_KEY ve CONSUMER_SECRET sabit 
// değerlerini Twitter/config.php dosyasından ayarlıyoruz. 
// Bu değerleri dev.twitter.com adresindeki uygulamalar bölümünde ya uygulama 
// açarak ya da mevcut uygulamaların detay bilgileri arasından alabilirsiniz.
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $sesAccessToken['oauth_token'], $sesAccessToken['oauth_token_secret']);

// Ve yaratılan $connection nesnesinin get metodunu Twitter REST Api'ye 
// ulaşmak için kullanıyoruz. Burada login olan kullanıcının profil bilgileri 
// çekilmektedir.
$content = $connection->get('account/verify_credentials');

?>

<!DOCTYPE html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Coders' Grave | Twitter Authentication Demo</title>
</head>
<body>
Twitter bağlantısı başarıyla sağlandı.<br><br>
Merhaba <strong><?php echo $content->name ?></strong>
</body>
</html>

Aşama 4 – callback.php dosyamıza aşağıdakileri ekleyelim

Yine her bir satırın üzerindeki açıklamalar aşamaları anlatmaktadır.

<?php

session_start();

// Twitter kütüphanesinden gerekli iki dosyayı(oauth class ve config) 
// require_once ile script'e dahil ediyoruz.
require_once('Twitter/twitteroauth/twitteroauth.php');
require_once('Twitter/config.php');

// Tw uygulama izin ekranından izin ver butonuna tıklandıktan sonra 
// önceden bildirdiğimiz callback sayfasına oauth_verifier ve oauth_token 
// parametreleriyle birlikte döner. Yani callback.php?oauth_token=xxx&oauth_verifier=yyy
// bu parametrelerden oauth_token anhatarının olup olmadığı ve yine bu anahtarla
// SESSION globalinizdeki oauth_token anahtarının eşit olup olmadığını
// kontrol eder. Eğer koşul sağlanmıyorsa ise login.php'ye yönlendirir.
if (isset($_GET['oauth_token']) && $_SESSION['oauth_token'] !== $_GET['oauth_token']) {
  header('Location: login.php');
}

// TwitterOAuth sınıfını gerekli başlangıç değerlerini vererek connection 
// nesnesi oluşturuyoruz. Buradaki CONSUMER_KEY ve CONSUMER_SECRET sabit 
// değerlerini Twitter/config.php dosyasından ayarlıyoruz. 
// Bu değerleri dev.twitter.com adresindeki uygulamalar bölümünde ya uygulama 
// açarak ya da mevcut uygulamaların detay bilgileri arasından alabilirsiniz.
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

// sayfamıza twitter tarafından parametre geçilen oauth_verifier anahtarını
// $access_token isimli bir değişkene aktarıyoruz. Bu bizim twitter 
// tarafından şahsımıza verilen tekil bir doğrulama anahtarıdır. 
$access_token = $connection->getAccessToken($_GET['oauth_verifier']);

// Bu anahtarı SESSION globaline yazıyoruz. Sebebi ise uygulamaya bağlı olup
// olmadığımızı ve REST Api kullanımında gerekli yerlerde bu anahtarı twitter'ın
// bizden istiyor oluşudur.
$_SESSION['access_token'] = $access_token;


// Bir üst satırda artık elimizde bize ait bir SESSION oluştuğuna göre
// aşağıdakilere ihtiyacımız kalmadı ve bunları temizleyelim.
unset($_SESSION['oauth_token']);
unset($_SESSION['oauth_token_secret']);

// $connection nesnesinden HTTP RESPONSE eğer 200 dönüyorsa herşey
// yolunda demektir. Artık istediğimiz sayfaya yönlendirebiliriz.
if ($connection->http_code == 200)
  header('Location: index.php');
// Eğer yolunda değilse uygulamanın size verdiği anahtarlarda bir yanlışlık
// olabilir veya izin sonrası dönen oauth_token anahtarının tekrar kullanılmak
// istenmesinden olabilir. oauth_token anahtarı bu arada tek kullanımlıktır.
else
  header('Location: login.php');

?>

Aşama 5 – connect.php dosyamıza da aşağıdakileri ekleyelim

Ve yine her bir satırın üzerindeki açıklamalar aşamaları anlatmaktadır.

<?php
session_start();

// Twitter kütüphanesinden gerekli iki dosyayı(oauth class ve config) 
// require_once ile script'e dahil ediyoruz.
require_once('Twitter/twitteroauth/twitteroauth.php');
require_once('Twitter/config.php');

// Burada farkındaysanız 3. ve 4. parametreler verilmemiş.
// Çünkü henüz o parametrelere atananacak olan anahtarlara
// sahip değiliz. Onlara sahip olmak için Twitter'a login
// isteğinde bulunmamız gerek. Yine burda $connection nesnesi
// oluşturuyoruz.
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);

// Burada twitter'a login isteğinde bulunmamız için şart
// koşulan request token değerlerini üretiyoruz. 
// Parametrede verilen OAUTH_CALLBACK config.pgp dosyamızdan
// ayarlanmalıdır.
$request_token = $connection->getRequestToken(OAUTH_CALLBACK);

// Oluşan anahtarları tekrar kullanabilmek için oturuma yazıyoruz.
$_SESSION['oauth_token'] = $token = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];

// Eğer connection response kodu 200 ise herşey yolunda ve connect
// işlemini sağlayacak olan url'i isteyebiliriz.
if ( $connection->http_code == 200 ){
  // Giriş için link, buton veya herhangi bir şekilde twitter'a login
  // edeceğimiz bir sayfa gerekecek. Hemen alttaki getAuthorizeURL
  // metodu bizim için twitter uygulamamıza bağlantı arayüzü sunan bir
  // url üretecek ve siz bunu istediğiniz gibi kullanabileceksiniz.
  $url = $connection->getAuthorizeURL($token);
  echo '<a href="' . $url . '">Twitter Connect</a>';
}
else{
  echo "Uygulama ayarlarınızı kontrol edin";
}
?>

Oluşturduğumuz projeyi indirmek için tıklayınız.

– Bu dosyaların hepsi projemde hazır, bitti
– Kendime göre daha düzenli hale getirdim
– Ben framework kullanıyorum ona göre düzenledim diyenlerden herhangi biriyseniz. index.php’yi browserdan tetikleyelim ve çalıştıralım bakalım neler oluyor.

Yazını başında da dediğim gibi öncelikle Twtitter hesabınıza bağlı bir uygulama olmalı. Bu bağlantıyı sadece bir uygulama üzerinden gerçekleştirebilirsiniz.

Selamlar…