Mehmet Fatih YILDIZ (mfyz.com)

Menü



Simplepie ile rss işlemek (okumak)

Kategori : PHP ve Pear Dökümanları
Eklenme Tarihi :
6 Eylül Pazar ´09
rss, parse, simplepie, simple pie, xml




Dikkat : Dökümanın yazılma tarihi üzerinden en az 60 gün (2 ay) geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir, uygulamada ufak sorunlar oluşabilir. Yorumları ve güncellemeleri göz önünde bulundurarak dökümanı takip ediniz.


Nerede kullanacağız?


Rss şu anda nerdeyse veri kaynağı oluşturma/kullanma konusunda standartlaşmaya başladı. Artık her sitede, başka sitelerden alınana içerikleri görebiliyorsunuz. Bunun en büyük nedeni, her sitenin (aslında hazır bloglardaki rss kaynakları sayesinde) bir rss kaynağı var ve verilen bilgileri bu kanallarla belirli standartlarda internette yayıyoruz. Bu kaynakları alıp/derleyip çeşitli alanlarda kullanabilirsiniz. Bu konuda hayal gücünüze ne geliyorsa uygulamak mümkün.

Bu dökümanda kısaca bir rss kaynağını php ile yazılmış simple pie kütüphanesi ile basitçe nasıl diziye çevirebileceğimizi, geçici olarak belleğe alabileceğinizi (cache) göstereceğim.

Bu konu ile ilgili Türkçe kaynak var aslında, bu yazıyı yazarak aynı şeylerden bahsetmek pek içimden gelmiyor fakat mfyz.com'daki diğer dökümanlarda sık sık rss işleme ile ilgili konulardan bahsedeceğim için bu dökümanı iç bir kaynak olarak özet de olsa yazmak zorundayım. Olabildiğince farklı bir açıdan ele almaya çalışacağım.


Simple Pie Nedir?


Php ile yazılmış bir xml parser sınıfıdır. Spesifik olarak da RSS tipi xml dosyalarını okumak için tasarlanmış, cache gibi güzellikleri bulunan bir sınıftır. Bu sınıfı kullanarak bir rss dosyasını nasıl parse edeceğimizi basitçe göstereceğim.

Öncelikle sitesinden simplepie kütüphanesini indirin.
http://simplepie.org/ adresinden download bölümünde son sürüme ait indirme bağlantısı bulabilirsiniz.

İndirdiğiniz paket içerisinde demo bir uygulama, dökümantasyon ve api test dosyaları bulacaksınız. Bizim burada kullanacağımız aslında tek dosya simplepie.inc dosyasıdır.
Bu dosyanın uzantısını .php olarak kullanmanızı tavsiye ederim (simplepie.inc.php).

Simplepie otomatik olarak okuduğu feedleri 1 saatlik belleklemektedir. Bunu kaldırabilirsiniz fakat 1 saatlik belleğe almak oldukça iyi bir performans kazandıracaktır. Bu noktada uygulama dizininizde "cache" adında bir dizin oluşturup yazma haklarını ayarlamanız gerekmektedir (755 veya 777).


Basitçe kullanımı


Bir örnek uygulama ile anlatacağım. İnidirdiğiniz simplepie paketi içindeki simplepie.inc dosyasını uygulamanızın içine koyun. index.php içerisinde include ederek kullanacağız. Cache dizinini de oluşturup izinlerini ayarlayın.

Örnek olarak bir uygulama yapsak da ben burada yardımcı bir fonksiyon kullanacağım. Bu fonksiyon ile basitçe url'sini verdiğimiz feed'i geniş bir dizi olarak döndürecek.

  1. <?php
  2.  
  3. // simple pie
  4. require_once('simplepie.inc');
  5.  
  6. // feed to array
  7. function readRSS($params){
  8.         if( !is_array($params) ) $url = $params;
  9.         if( !$url ) return false;
  10.  
  11.         // getting feed
  12.         $feed = new SimplePie($url);
  13.         $feed->handle_content_type();
  14.  
  15.         // params
  16.         if($params[expire]) $feed->set_cache_duration($params[expire]);
  17.  
  18.         // feed info
  19.         $result[feed][title]       = $feed->get_title();
  20.         $result[feed][url]         = $feed->get_permalink();
  21.         $result[feed][description] = $feed->get_description();
  22.  
  23.         // items
  24.         $i = 1;
  25.         foreach ($feed->get_items() as $item){
  26.                 $items[] = array(
  27.                         'title'       => $item->get_title(),
  28.                         'date'        => $item->get_date('Y-m-d H:i:s'),
  29.                         'url'         => $item->get_permalink(),
  30.                         'description' => $item->get_description(),
  31.                 );
  32.                 $i++;
  33.                 if( $size and $i > $size ) break;
  34.         }
  35.  
  36.         // adding items to result
  37.         $result[items] = $items;
  38.  
  39.         // result
  40.         return $result;
  41. }
  42.  
  43. ?>

Koddan simplepie kullanımını özetleyeceğim.

readRSS fonksiyonunun parametreleri :
- url
- expire

Bu parametreleri dizi olarak vermelisiniz. Ya da doğrudan tek parametre ile string verirseniz sadece url parametresi ayarlanacaktır.

expire, bellekte ne kadar sürede çürüyeceğini ifade eder. Oraya 300 saniye olarak belirtirseniz kullanıcılar sürekli sayfanızı derlese bile 5 dakikada (300sn) bir rss kaynağı okunacaktır. Bu süreyi belirtmezseniz 1 saat olarak ayarlanacaktır.

Neyse, şimdi sırayla simplepie kullanarak bir rss feed'i nasıl parse ettiğimi anlatayım :

  1. $feed = new SimplePie($url);

ile yeni bir nesne oluşturup feed adresini ayarlıyoruz.

  1. $feed->handle_content_type();

ile de rss kaynağını alıp okuma işlemini yapıyoruz.

  1. $feed->set_cache_duration(3600); // 1 saat = 3600 saniye

ile de method adından anlayacağınız gibi bellek süresini belirtebiliyoruz. Belirtmezsek 1 saat olarak ayarlanacaktır.
Bu sayede bu rss kaynağı sürekli okunmak yerine internetten saate 1 kere alınıp işlenip belleklenecektir.

Ben her fonksiyonda genel olarak sonuç dizisi oluşturur ve onu dönerim. Burada bir feed için :
- feed'e ait meta data
- feed içindeki konulara ait bir multiarray
söz konusudur.

Bunun için sonuç dizimi "feed" ve "items" olarak 2 alt diziye ayırıyorum ve "feed" dizisine o rss kaynağı için xml içinde belirtilen feed adı, adresi, açıklamasını kaydediyorum. Bunu da sırayla :

  1. $feed->get_title();       // feed başlığı/adı
  2. $feed->get_permalink();   // feed ana içerik bağlantısı
  3. $feed->get_description(); // kaynak açıklaması

methodları ile alabiliyoruz. Bu konuda daha derin açıklama yazmaya gerek yok.

feed içindeki konuları da $feed->get_items() methodu ile aslında dizi olarak alabiliyoruz.
Ben de bu diziyi foreach ile dönerek içindeki nesnelerin alt methodlarını kullanarak her konu için gerekli bilgileri alıp sonuç dizisine "items" alt dizisi içine ekliyorum.
Bu foreach içinde bazı methodlarla sıradaki konuya ait bilgileri alıyorum. Bu methodlar :

  1. $item->get_title();              // konu başlığı
  2.  
  3. $item->get_date('Y-m-d H:i:s') ; // konunun tarihi, burada php'nin date
  4.                                     // parametreleri ile istediğiniz
  5.                                     // formatta alabilirsiniz.
  6.  
  7. $item->get_permalink();          // konuya ait bağlantı
  8.  
  9. $item->get_description();        // konu açıklaması
  10.                                     // hatta bu kısım genelde html olarak
  11.                                     // konu içeriğini ifade eder.

Bu methodlarla konu içeriklerini alıp sonuç dizisine yazıyorum.

Fonksiyon sonunda da sonuç dizisini dönüyorum.

Bu fonksiyonun kullanımı için bir örnek vermek gerekirse :

  1. print_r( readRSS('http://mfyz.tumblr.com/rss') );

Çıktısı şöyle olacaktır :

  1. (
  2.     [feed] => Array
  3.         (
  4.             [title] => mfyznin sosyal akışı
  5.             [url] => http://mfyz.tumblr.com/
  6.             [description] => Bu günlük özellikle, izlediğim filmler...
  7.         )
  8.  
  9.     [items] => Array
  10.         (
  11.             [0] => Array
  12.                 (
  13.                     [title] => Daha yavaşı varsa gelsin…
  14.                     [date] => 2009-07-29 18:43:23
  15.                     [url] => http://mfyz.tumblr.com/post/151632394
  16.                     [description] => <img src="http://17.media.tumblr.com/3YGTMGQuLqhrtmy6gdzjebuNo1_500.png" /><br/><br/>Daha yavaşı varsa gelsin…
  17.                 )
  18.  
  19.             [1] => Array
  20.                 (
  21.                     [title] => Photo
  22.                     [date] => 2009-07-21 11:48:00
  23.                     [url] => http://mfyz.tumblr.com/post/145949772
  24.                     [description] => <img src="http://23.media.tumblr.com/3YGTMGQuLq5xgnk8LjdWyEcxo1_500.jpg" />
  25.                 )
  26.  
  27.             [2] => Array
  28.                 (
  29.                     [title] => Photo
  30.                     [date] => 2009-07-19 19:54:48
  31.                     [url] => http://mfyz.tumblr.com/post/144797738
  32.                     [description] => <img src="http://4.media.tumblr.com/3YGTMGQuLq3jz02mZYNk5E5Eo1_500.jpg" />
  33.                 )
  34.         )
  35. )

Bu noktadan sonra bu diziyi ekrana basma konusunda gerisi sizin hayal gücünüze kalmış.
Bununla ilgili örnek uygulama için benim sosyal medya akışımı (lifestream) inceleyebilirsiniz : http://mfyz.org

İşin görsel kısmını da başka bir dökümanda özetleyeceğim.

Hazırlayan : Mehmet Fatih YILDIZ


Yorumlar (1 yorum/ping var)



Üye Resmi Ziyaretçi : mehmet kose
15 Mart Pazartesi ´10 14:26 tarihinde yazmış
merhaba twitter ın rss bölümünde kendine has etiketler var bunları da cekebilirmiyiz bu kütüphane ile
 


Yeni Yorum

Önce Okuyun Yorumlarınızda sosyal, dini ve politik taraflı mesajlar, başkalarına saldırı sayılabilecek laflardan kaçının. Argo kelimeler, küfürler otomatik olarak silinecektir. Bu kural ihlalleri ip, üyelik, isiminizin banlanmasına yol açabilir.

Lütfen yardıma yönelik, konuyu uzatacak sorularınızı/yorumlarınızı forumda yazınız. Burası konu dahilindeki kısa soluklu öneri/yorumlar içindir. Aksi halde yorumunuzu göremeyebilir, uyarı alabilirsiniz.

Hatırlatmak amacıyla : html kodlarının, link yapmak, vb amacıyla gireceğiniz ekstra bilimum şeylerin çalışmayacağını belirteyim. Yorumlayıcı zaten linklerinizi otomatik çevirecek, gülücüklerinizi dönüştürecektir. Zengin metin özellikleri için araç çubuğundaki butonları kullanın.


İletişim Bilgileri


E-Posta adresiniz gösterilmeyecektir.

(unut)

Üye iseniz, giriş yapıp bu bilgileri girmeden hızlıca yorum yapabilirsiniz. Yorumunuzda resminiz/ikonunuz ve profil bağlantınız görüntülenecek, aynı zamanda güvenlik kodu girmek zorunda da kalmayacaksınız.
Üye olmak için buraya tıklayın.

Güvenlik Kodu
Güvenlik kodunu göremiyorsanız sayfayı yenileyin!


Yukarıdaki güvenlik kodunu bu kutuya yazın.

Yorum   
- +

Ad soyad, eposta ve yorum alanları
(⊗ işaretli alanlar) zorunludur.





mfyz.com'da şu an 12 ziyaretçi geziniyor. Toplam 114 makale, 208 yazı, 2999 gönderi var



  • RSS mfyz.com'u RSS beslemeleri ile takip edebilirsiniz
  • ServerTR Hosting Sponsoru ServerTR.com'a çok teşekkür ederiz
  • CC 2.5 Sitedeki materyalleri Creative Commons 2.5 Lisansı çerçevesinde kullanabilirsiniz. Lisans hakkında bilgi almak için tıklayın
  • İstatistikler Site ziyaret istatistikleri, konu, eğilim gibi ilginç istatistikler hakkında
  • Site Hakkında Site altyapısı, hazırlanışı, kurallar ve felsefesi hakkında
  • İletişim İletişim formu, iletişim bilgileri

mfyz.com Türk Programcılığının Gelişmesine Adanmıştır
HTML Standartlarına Uygundur

CSS Standartlarına Uygundur