Twitter API v1.1 ile Son Tweet'leri Çekme

Eğer dikkat ettiyseniz sitenin sağ alt tarafında attığım son tweet'ler gösterilmektedir. İşte bu makalede bunun nasıl yapıldığını anlatacağım. Bilindiği gibi api'nin 1.0 sürümünde yetkilendirme olmaksızın tweet'ler çekilebiliyordu. Bu durumda sadece jQuery ile rahatlıkla bu işlem gerçekleştiriliyordu. Ancak Twitter'ın api'yi 1.1 sürümüne yükseltmesiyle birlikte artık Oauth yetkilendirme olmaksızın tweet'leri çekemiyoruz. Yani artık mutlaka server-side kod yazmamız gerekli. Ben de PHP ile bu işlemlerin nasıl yapılacağını anlatmaya çalışacağım. Bunun için ilk önce bir twitter uygulaması oluşturmanız gerekiyor.

dev.twitter.com/apps adresine gittikten sonra Create a new application diyoruz. Uygulamamızın ismi, açıklaması, web sitemiz gibi bilgileri giriyoruz. Dilersek uygulamamıza ait bir ikon da yükleyebiliriz. Daha sonra Details sekmesindeki altta bulunan Create my access token butonuna tıklayarak twitter hesabımıza erişim izni veren access token verimizi oluşturuyoruz. Artık API Keys sekmesinden gerekli yetkilendirme bilgilerimizi öğrenebiliriz. Bu işlemleri gerçekleştirdikten sonra sıra geldi kodlarımızı yazmaya.

github.com/dg/twitter-php/releases/latest adresinden uygulamamızı indiriyoruz. Zip dosyasının içinde src klasöründeki OAuth.php ve twitter.class.php dosyalarını sunucumuza upload ediyoruz. Tweet'lerin gösterileceği php dosyamızı açıp aşağıdaki gibi kodlarımızı yazıyoruz.

<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/twitter/twitter.class.php'; //Upload ettiğimiz dosyanın yolu.
Twitter::$cacheDir = '/home/username/tmp/'; //Tweet'lerin önbelleğe alınacağı yazma iznimizin olduğu dizin.
$twitter = new Twitter($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret); //Burada twitter uygulamamızın api bilgilerini giriyoruz. 
$statuses = $twitter->load(Twitter::ME); //ME diyerek kendi tweet'lerimizi çekiyoruz.
//ME yerine ME_AND_FRIENDS dersek takip ettiğimiz kişilerin tweet'leri de listelenir.
//ME yerine REPLIES dersek tweet'lerimize yazılan cevaplar listelenir.
?>

Tweet'lerimizi çektik. Şimdi bunları sayfamızda yazdıralım.

<ul>
<?php foreach ($statuses as $status): ?>
    <li><?php echo Twitter::clickable($status); ?>
        <a href="//twitter.com/username/status/<?php echo $status->id ?>" target="_blank" class="timeago" title="<?php echo date("m-d-Y H:i:s", strtotime($status->created_at)) ?>">
            <?php echo strftime("%d %B %Y %A, %H:%M", strtotime($status->created_at)); ?>
        </a>
    </li>
<?php endforeach ?>
</ul>

Ben tarihin Türkçe yazılması için biraz uzattım kodları. Siz isteğinize göre özelleştirebilirsiniz. Ve son olarak yapacağımız işlem tweet tarihlerini twitter safyasındaki gibi 3 dakika önce, 5 dakika önce şeklinde yazdırmak. Bunun için timeago.yarp.com/jquery.timeago.js adresinden timeago eklentisini indiriyoruz. Eğer eklentiyi Türkçeleştirmek isterseniz benim gibi kendiniz jQuery dosyasını düzenleyebilirsiniz ya da github.com/rmm5t/jquery-timeago/blob/master/locales/jquery.timeago.tr.js adresinden Türkçe eklentiyi indirip kullanabilirsiniz. Tweet'lerin çekildiği sayfada aşağıdaki javascript kodlarını yazıyoruz.

<script src="jquery.timeago.js"></script>
<script type="text/javascript">
jQuery(document).ready(function() {
  jQuery("a.timeago").timeago();
});
</script>

Hepsi bu kadar. Sorularınız olursa memnuniyetle cevaplayabilirim.

YORUMLAR (8)
  1. yusuf karpak
    yusuf karpak - Cevapla
    merhabalar ben bunu asp.net de yapmak istiyorum ama bi türlü cevap bulamadım yardımcı olurmusunuz.
  2. Ahmet
    Ahmet - Cevapla
    Hocam bende twitleri çekmek istiyorum ama php bilgim fazla yeterli olmadıgı için beceremedim. rica etsem bir dosya haline getirsenizde index.php de twitleri yazdıracagınız bir dosya paylasmanız mümkünmü
    • Mehmet YAYLACI
      Mehmet YAYLACI - Cevapla
      Yukarıdaki kodları index.php dosyasına sırasıyla eklerseniz (açıklamalara dikkat ederek gerekli yerleri değiştiriniz) isteğinizi yapabilirsiniz. Sorunla karşılaşırsanız cevaplayabilirim. Kolay gelsin.
  3. Ünal ULUBAY
    Ünal ULUBAY - Cevapla
    Hocam Merhaba, ben, attığım twitleri değilde (veri havuzu oluşturmak için belirli sayıda) atılan tüm twitleri çekmek istiyorum Bunu nasıl yapabilirim. Bilgi verirmisiniz?
    • Mehmet YAYLACI
      Mehmet YAYLACI - Cevapla

      Makalede açıklamasını yapmıştım ama tekrar edeyim. Kod satırında ME yerine ME_AND_FRIENDS dersek takip ettiğimiz kişilerin tweet'leri de listelenir. Aşağıdaki gibi:

      $statuses = $twitter->load(Twitter::ME_AND_FRIENDS);
  4. halit kara
    halit kara - Cevapla
    merhaba hocam, sosyal medya hesaplarından (youtube, instagram,twitter,facebook ) login olmadan istediğim kişilerin kaç gönderisi, takipçisi,takip ettiği bilgileri çekebilir miyim ? bunları apiler ile çekmek mümkün mü ?
    • Mehmet YAYLACI
      Mehmet YAYLACI - Cevapla
      Merhaba. Youtube ve Instagram hakkında bilgim yok. Ancak Facebook ve Twitter'da login olmadan hiçbir işlem yapamazsınız. Birer adet uygulama olşturup bu uygulamaların kimlik bilgileriyle giriş yaparak verileri çekebilirsiniz.
YORUM FORMU