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…
9 Yorum
20 Aralık 2011 - 10:34
Harika bir yazı tebrik ederim. Böyle yazıların devamını diliyorum sizden.
20 Aralık 2011 - 15:21
Kullanıcıyı kayıt edebilmek için bir kaç bilgiye ihtiyac duyuyorum en onemlilerinden biride kullanıcının email adresi bunu alabilmek için ne yapmam gerekiyor ?
21 Aralık 2011 - 17:02
Merhaba,
Rest API’de account/verify_credentials kullanarak kullanıcının login sonrası bilgilerine ulaşabilirsin. Fakat Twitter, üyelerinin email bilgisini vermiyor. Bunu şimdilik alabilmen mümkün değil.
05 Ocak 2012 - 21:14
Dosyayı indirdikten sonra tek işlem consumer key,consumer secret ve oauth callback değerlerini değiştirmek mi acaba.Çünkü ben kendime göre değiştirdiğimde açılan tek şey Twitter connect yazısı oluyor yardımcı olursanız çok sevinirim.Teşekürler.
06 Ocak 2012 - 12:43
Merhaba Ömer,
Haklısın. Kod içerisinde Twitter Connect yazısına link vermeyi unutmuşuz. Aşama 5′de bunu düzelttim. İlgin için teşekkürler.
23 Ocak 2012 - 18:26
Arkadaşlar yeni dosyada hala hatalar mevcut, düzelltiğim hataları buraya ekliyorum bu şekli ile çalışıyor.
callback.php de 17. satır 20. satırı header(‘Location: callback.php’);
Şeklinde değiştirin..
Connect phpde 35. satırı echo ‘Twitter Connect‘; şeklinde değiştirdiğinizde sıkıntısız bir şekilde kullanabileceksiniz,
Saygılarımla, Erdem UZUN
21 Şubat 2012 - 01:37
Merhaba Erdem,
Yazı üzerinde iliştirdiğim projede herhangi bir yanlışlık olabilme ihtimaline karşın inidirip test ettim ve herhangi bir problem göremedim.
27 Ocak 2012 - 13:25
Yazının başında “Framework’lerden soyutlanmış bir örnektir” yazıyor. Fakat çalıştırdığım zaman Zend Framework’ün “Controller not found” hatasını alıyorum. Benim kaçırdığım nokta nedir acaba?
Teşekkürler..
21 Şubat 2012 - 01:42
Evet herhangi bir framework’e bağlı değil. Herhangi bir framework’e bağlamadan tek baiına bir proje olarak çalıştırıldığında bu görülebilir. Buradan indirdiğin dosyaları Framework yapısına uygun olmayan şekilde entegre etmen durumunda Framework’ün Controller yapısına uymayacaktır.