PHP & Json ve Twitter'dan Veri Çekmek
Gürkan OLUÇ tarafından, 16 May 2008 tarihinde, 21:38 sularında yazıldı. | Makaleler
Düzenleme
---------------------------------------------------------------------------
23.07.2008 : get_elapsedtime() fonksiyonu eklendi.
---------------------------------------------------------------------------
Blogumda yaptığım yenilik çalışmalarından bir tanesi de bu aralar pek bi' sık kullanıyor olduğum twitter'a yazmış olduğum son 5 ögeyi bloguma yansıtmaktı. Bu işi yapmak için twitter'in sunmuş olduğu html ve flash tabanlı çeşitli çözümler mevcut ancak bunları modifiye etmek ve kullanmak o kadar da kullanışlı olmuyor. Bu sebeple bende Twitter Api'den, PHP'den ve onun JSON kütüphanesinden yararlanarak kendi işimi, kendim görmeye karar verdim. Açıkçası hiçte zor olmadı
PHP ile JSON işlemleri yapmak için 2 adet fonksiyonumuz bulunuyor. Bunlardan birisi json_encode diğeri ise json_decode . Bu fonksiyonlardan json_encode, kendisine array ( Dizi Değişken ) olarak verilen bir veriyi, JSON formatına dönüştürüyor. Diğeri, yani json_decode ise bunun tam tersi bir iş yaparak JSON olarak aldığı veriyi, parçalayarak bir PHP dizisi haline getiriyor.
Ben Wordpress'e bu tür bir olayı eklemek istediğimden dolayı başta eklenti yazmayı düşündüm ancak sadece kendim kullanacağım ve bu aralar zaman konusunda sıkıntılarım olduğu için biraz gereksiz geldi.
Bu sebeple bende pek sevgili functions.php dosyası ile işimi hallettim. Twitter'da yazmış olduğum son 5 mesajı çekmek için aşağıda görmüş olduğunuz fonksiyonu yazdım.
-
/**
-
* @param $user string Son Twitleri alınacak olan kullanıcının adı
-
* @param $count int Kullanıcıya Ait kaç twit'in alınacağı
-
* @return $json
-
*/
-
function getTwitterItems( $user = '', $count = 5 ) {
-
-
$json = json_decode($file);
-
return $json;
-
-
}
-
-
// Kullanımı
-
// $items = getTwitterItems("twitter_kullanici_adi",alınmak_istenen_mesaj_sayisi );
-
-
// $time should be a Unix timestamp - get it with strtotime()
-
function get_elapsedtime($time) {
-
-
-
if ($gap <5) {
-
return 'Şimdi';
-
} else if ($gap <10) {
-
return 'Çok az önce';
-
} else if ($gap <20) {
-
return 'Az Önce';
-
} else if ($gap <40) {
-
return 'Yarım dakika önce';
-
} else if ($gap <60) {
-
return 'Yaklaşık 1 Dk Önce';
-
}
-
-
if ($gap <60) {
-
return $gap.' dakika önce';
-
}
-
-
if ($gap <24) {
-
return 'yaklaşık '.$gap.' saat ago';
-
}
-
-
-
}
Bu fonksiyonu functions.php dosyama ilave ettikten sonra, sidebar.php dosyasında da bir takım düzenlemeler yapmam lazım geldi. Düzenleme dediysem o kadar da zor birşey değil. Altı üstü, bu fonksiyondan dönen verileri ekrana basacak olan bir döngü. O da aşağıda görmüş olduğunuz gibi basit bir foreach ile halloldu
-
<?php foreach( getTwitterItems("grkn",5) as $item ) : ?>
-
<div class="oge">
-
<div class="ust"></div>
-
<p><?= $item->text ?></p>
-
<div class="clear"></div>
-
</div>
-
<?php endforeach; ?>
Burada $item->text ile belirtmiş olduğumuz şey, mesaj oluyor. Tabii ki yaptığımız JSON çağrısı ile sadece bu veri dönmüyor bize. Daha dönen ( kullanıcı adı, gönderilme tarihi v.b ) bir çok veri var ancak ben sadece bana lazım olanı kullandım. Twitter Api ile ilgili daha detaylı bilgiyi buradan (resmi) yada buradan gayri resmi olarak almanız mümkün. Ancak ben 2. verdiğim linki tavsiye ederim.
Tüm bu işlemlerden sonra artık twitter'a yazmış olduğum son 5 ögeyi rahatlıkla blogumda gösterebiliyordum. Ama 1 dakika bir problem var. Sanki çok mu şekilsiz oldu ne? Evet, öyle oldu. Bu sebeple birazcıkta css ile süsleme yapmam gerek. Bunu da aşağıdaki css çalışması ile yaptım.
-
div#sidebar div#twitter { margin-top:5px; }
-
div#sidebar div#twitter div.oge { background:url(images/twitter_u.png) no-repeat left top; width:221; margin:10px 0px 10px 10px; }
-
div#sidebar div#twitter div.oge div.ust { background:url(images/twitter_u.png) top no-repeat; width:%100; height:10px; }
-
div#sidebar div#twitter div.oge p { background:url(images/twitter_a.png) no-repeat left bottom #bff5ff; font-size:11px;}
-
div#sidebar div#twitter div.oge span.tarih { color:#828282; font-size:10px; text-indent:70px; }
Böylelikle sağ alt taraftan görebileceğiniz, bana ait son 5 mesajı konuşma baloncuğu şeklinde gösteren basit uygulamamı da yazmış oldum. Sınavlarım geçtikten sonra, bu basit uygulamayı bir wordpress eklentisine çevirme planlarımda var. Daha sonra görüşmek üzere, esen kalın!
Not : Yukarıda bahsetmiş olduğum tüm olayları aslında Javascript ile istemci tarafında halletmekte mümkündü. Ancak ben nedense PHP ile yaptım, daha sonradan farkettim ki Javascript ile bu işlemleri yapmak daha kolaymış. Javascript ile olan versiyonunu da bir daha ki yazı da yazarım artık
Bu yazı Cuma, Mayıs 16th, 2008 tarihinde 21:38 sularında yazıldı. , PHP ile etiketlendi. Bu yazıya yazılan yorumları RSS 2.0 linkinden takip edebilirsiniz. Yorum bırakabilir, veya Geribildirim yapabilirsiniz.

merhabalar,
güzel bir yazı olmuş. bende twitter api ile bir şeyler yapmak istiyordum. yazından yararlanacağım
[...] Eğer sizde eklentilerle uğraşmadan twitlerınızı sitenizde göstermek istiyorsanız gürkanın yazısına bir göz atın. İstek olursa XML olarak yapılışını anlatabilirim ben de, çok bir farkı [...]
Paylasım icin tskler gayet guzel olmus
Geçenlerde Twitter API’yi kullanarak yapılan birkaç tane widget’ı incelemiştim. Sanırım çoğunlukla php & json kullanılıyor. Hazırladığın bu scripti de kullanacağım izninle…
Teşekkürler,
Tabii ne demek
Kullan, dağıt zaten paylaşımın amacı bu
Ancak JSON verilerini okumak için PHP’nin
json_decode, json_encodefonksiyonları yerine JS’i kullanmanmak daha kolay olabiliyor. Hem geliştirici açısından hemde performans açısından.Merhaba,
Bahsettiğiniz yöntemle tek boyutlu elemanlar çekebiliyorum falan 2. boyut işin içine girdiği zaman bunu nasıl yapmak gerekir?
Mesela ben bu (http://tinypaste.com/20e31) örnekteki “results” ‘ın içindeki “text” bilgisini results[0]->test şeklinde çekmeye çalıştığımda boş dönüyor.
Json çıktısını decode ettikten sonra, tüm değerlere. $degisken->results[0]->text diyerek ulaşabilirsiniz. yada $degisken->results kısmını döngü içerisinde birer birer okutturabilirsiniz. Bu şekilde olması gerekiyor. Olmaz ise tekrar yazarsanız sevinirim. Test edip, çalışan halini bulup öyle cevap yazmaya çalışırım.
Uzun bir süre çıldırdıktan sonra jQuery üzerinden çekmeye karar verdim..
Teşekkürler
Evet, JS ile JSON çıktılarını okumak daha kolay ki JSON zaten JS’in ta kendisi
Bende bu makaleyi yazdıktan bir süre sonra senin gibi PHP ile kasmanın ve sunucuyu kastırmanın yersiz olduğunu anlayıp, JS ile parse etmiştim API’dan dönen veriyi.
Aynen belki 10 satırda yaptırmak istediğimi neredeyse 5 satıra düşürdüm
..
Genede çok yararın dokundu çok sağol
.. İyi çalışmalar!