SimplePie sınıfı ile RSS çıktılarını okumak
RSS bana göre web dünyasındaki en önemli teknolojilerden birisidir. İlk olarak Netscape tarafından geliştirilmeye başlanan bu teknoloji ile yüzlerce web sitesini gezip hangisinin içeriği yenilenmiş hangisinin yenilenmemiş tek tek kontrol etmekten kurtulmuş olduk. Özellikle blog siteleri ile kullanır olduğumuz bu önemli teknolojiyi çeşitli nedenlerden dolayı (örneğin bloglardan.com gibi bir web sitesi hazırlamak için) kendi uygulamalarımızda işlemek gerekebiliyor. İşte PHP dili ile yazılmış bir sınıf (class) olan SimplePie sınıfı bu konuda bize yardımcı oluyor.
SimplePie sınıfını tanıyalım
Öncelikle "neden SimplePie kullanacağız?" sorusuna cevap aramalıyız. RSS teknolojisi sayesinde bir web sitesinin özet bilgileri bir XML formatında sunulmaktadır. Fakat bu formatta, RSS teknolojisinin sürümlerine göre farklılıklar olabiliyor. Örneğin rss 1.0 sürümüyle, rss 2.0 sürümünde sunulan formatlar farklıdır. Bir de buna daha yeni bir format olan atom formatını ekleyebiliriz. Böyle olunca PHP kullanarak bir RSS çıktısı okuyacağımız zaman bu format farklılıkları bizi uğraştıracaktır. Oysaki SimplePie sınıfı bu farklılıkları sorun etmez ve pek çok formatı destekler.
SimplePie yalnızca RSS çıktılarını okumak amacıyla programlanmıştır. Bu sınıf ile yeni bir RSS çıktısı oluşturamazsınız, önünüze gelen her XML dosyasını okuyamazsınız. PHP 4.3.0 ve üzeri bir sürümde çalışabiliyor. Sınıf içerisindeki metodları gösteren ve iyi dökümante edilmiş yardım sayfaları vardır. Ayrıca ücretsizdir. Download sayfasından en son sürümünü indirebilirsiniz.
SimplePie sınıfını kullanalım
İlk önce download sayfasından zip'lenmiş olarak indirdiğiniz dosyayı web klasörünüzün içindeki simplepie isimli bir alt klasöre çıkartmanız gerekiyor. Yani web tarayıcınıza "http://localhost/simplepie/" adresini yazdığınızda bu klasöre ulaşabiliyor olmalısınız. Bu klasördeki simplepie.inc isimli dosyayı simplepie.php olarak isimlendirin. Sonra boş bir index.php dosyası oluşturun. Son olarak da ileride lazım olacağı için cache isimli bir alt daha klasör oluşturun. Bu işlemlerden sonra simplepie klasöründeki diğer dosyaları ve klasörleri silebilirsiniz. Son durumda klasör şöyle görünüyor olmalıdır:

Şimdi "index.php" dosyasını açalım ve adım adım kodları yazmaya başlayalım.
1. adım:
-
<?php
-
require_once 'simplepie.php';
-
-
$feed = new SimplePie();
İlk adımda SimplePie sınıfını index.php dosyamıza dahil ettik ve kullanıma hazırladık.
2. adım:
-
$feed->set_feed_url('http://www.eburhan.com');
-
$feed->init();
-
$feed->handle_content_type();
İkinci adımda rss çıktısını okuyacağımız web sitesinin adresini set_feed_url metoduna girdik. Bu metoda doğrudan rss çıktısının adresini de girebilirsiniz. init metodu ile de rss çıktısını okuma işlemini başlatmış oluyoruz. handle_content_type metodu ise rss çıktısının karakter kodlaması ve içerik türü ile ilgili bir takım ön işlemlerin yapılmasını sağlar. Bunu kullanmak zorunlu değil ama kullanmadığınızda karakter sorunu olabilir.
3. adım:
Üçüncü adımda basit bir hata kontrolü yapıyoruz. Yani ikinci adımda "init" metodu ile başlattığımız rss çıktısını okuma işleminin başarılı olup olmadığını kontrol ettiriyoruz. Eğer bir hata oluştuysa bu hatayı yine error metodu ile ekrana yazdırıyoruz.
4. adım:
-
$limit = $feed->get_item_quantity(5);
Dördüncü adımda, okuduğumuz rss çıktısına ait kaç adet yazının ekrana yazdırılacağını belirtiyoruz ve $limit isimli bir değişkene kaydediyoruz. Biz burada eburhan.com'a ait son 5 yazının ekrana yazılması gerektiğini belirtmiş olduk. Sonraysa get_title metodu ile, okuduğumuz rss çıktısının başlığını ekrana yazdırıyoruz.
5. adım:
Bu son adımda bir döngü açtık ve dördüncü adımdaki $limit değişkenini kullanarak bu döngünün kaç defa işleyeceğini belirttik. Hemen döngünün alt satırında o anki yazının bilgilerini alıyoruz ve $item değişkenine atıyoruz. Sonrasında bu değişken üzerinden o anki yazının adres, başlık, içerik ve tarih bilgilerine ulaşarak ekrana yazdırıyoruz.
Toplam 5 adımda yazmış olduğumuz kodların tamamına gözatalım:
-
<?php
-
require_once 'simplepie.php';
-
-
$feed = new SimplePie();
-
$feed->set_feed_url('http://www.eburhan.com');
-
$feed->init();
-
$feed->handle_content_type();
-
-
if($feed->error()) {
-
}
-
-
$limit = $feed->get_item_quantity(5);
-
-
for($i=0; $i<$limit; ++$i)
-
{
-
$item = $feed->get_item($i);
-
-
-
print '<hr/>';
-
}
-
?>
Bu kodları "index.php" dosyasına kaydedip çalıştırdığınızda alttaki ekran görüntüsünde olduğu gibi bir çıktı almalısınız. Tabii ki bu esnada bir problem oluşmazsa

SimplePie sınıfını ile önbellek (cache) işlemleri
Yukarıdaki örnekte, SimplePie sınıfı ile eburhan.com'un rss çıktısını okumayı öğrendik. Yaptığımız örnek uygulama her çalıştırıldığında SimplePie sınıfı eburhan.com'a bağlantı kuracaktır. Oysaki bu durum bir performans kaybına neden olabilir. Niye her seferinde eburhan.com'a bağlanalım, değil mi? Onun yerine 1 kere bağlantı kurmak, bu bağlantı sırasında alınan rss çıktısını bir dosyaya depolamak ve önümüzdeki 1 saat süresince işlemlerin bu dosya üzerinden yapılmasını sağlamak daha performanslı olacaktır.
SimplePie sınıfı ile bir rss çıktısını önbelleğe almak için şu metodları kullanmalıyız:
- enable_cache : önbellekleme işlemin aktifleştirilmesi gerektiğini belirtir
- set_cache_duration: rss çıktısının kaç saniye süresince önbellek dosyasından okunacağını belirler
- set_cache_location: önbellek dosyasının yerini belirtir
Önbellekleme işlemi için kullanılan bu medotları 2. adımdaki "init" metodundan hemen önce kullanabilirsiniz.
-
$feed->enable_cache(true);
-
$feed->set_cache_duration(600);
-
$feed->set_cache_location('./cache');
Bu örnekte rss çıktısı okuma işleminin önbelleğe alınacağını belirtiyoruz. Daha sonra 600 saniye (10 dakika) süresince bu rss çıktısının internetten değil de, bir önbellek dosyasından okunacağını belirtiyoruz. Son olarak da önbellek dosyasının "cache" isimli bir klasör içerisine kaydedilmesini belirtiyoruz. Buradaki "cache" klasörünün yazılabilir olması gerektiğini hatırlatayım.
Sonuç
PHP ile bir rss çıktısı okumak için MagpieRSS ve lastRSS gibi başka sınıflar da mevcut. Fakat SimplePie sınıfı bana göre en ayrıntılı ve en kaliteli sınıftır. Ben burada küçük bir bölümünden bahsettim. Siz mutlaka yardım sayfaları'ndaki metodlari kendiniz tek tek deneyin. Bu yazıdaki örnekleri de buradan indirebilirsiniz.
Yorum takibi
Geri izleme
Yazıyı Paylaş
11 Mart 2008, 11:33
Programlama
Bugün 4 kez, toplam 1,242 kez okundu.
php, rss, simplepie, xml

11 Mart 2008, 13:50
Valla hocam ellerine sağlık. Acemi biri olarak senin bilgilerinden faydalanmak gerekliliğini her yeni yazında daha iyi anlıyorum.
11 Mart 2008, 14:10
Her site için yeniden kod yazmak zorunda mıyız?
11 Mart 2008, 15:36
@henster
set_feed_url metodunu inceleyebilirsin. Bu metoda bir dizi (array) içerisinde birden fazla web adresi veya rss adresi girebiliyorsun. Böylece ayrı ayrı kod yazmadan birden fazla rss çıktısını okumuş oluyorsun.
$feed->set_feed_url(’http://www.eburhan.com’);
yerine
$feed->set_feed_url(array(’http://www.eburhan.com’, ‘http://www.henster.org/’));
şeklinde tanımlama yapabilirsin.
11 Mart 2008, 17:29
SimplePie’nin bir güzel özelliği de Türkçe karakterlerle sorun çıkartmıyor oluşu. Yaptığım testlerden MagpieRSS’in sorun çıkardığını görmüştüm. Makale için teşekkürler eburhan
11 Mart 2008, 19:39
Güzel bi yazı olmuş
Keşke pdf olarak arşivleyebilseydik 
11 Mart 2008, 22:20
demek bu iş için harici class’lar kullanmak gerekiyordu. Ben de php’nin kendisiyle bunu yapmak için baya uğraşmıştım ama istediğim gibi olmamıştı. bu yazı çok makbule geçti. Sağol erhan
12 Mart 2008, 10:53
Teşekkürler erhan, inceliyorum şimdi. (:
12 Mart 2008, 18:18
valla ilaç gibi geldi
15 Mart 2008, 02:04
slm yazı güzel olmuş teşekkürler. Simplepie sitesinde digg.com ile ilgili bir çalışma yapılmış ve rss’de digg.com’un resimleri de gelecek şekilde düzenlenmiş. acaba siz onu da anlatabilirmisiniz. teşekkürler.
15 Mart 2008, 12:42
@onur
Resimlerin de gelmesini istiyorsan yukarıdaki kodda
$item->get_description()
yerine
$item->get_content()
kullanmalısın. (get_content)
23 Mart 2008, 23:09
Açıkçası uzun bir zaman önce bir uygulamada rastlamıştım “simplepie” uygulamasına. Farklı terimlerle arama yapmama rağmen Türkçe bir kaynağa ulaşamamış, tam olarak ne işe ayaradığını anlayamamıştım. Geçte olsa rastladım ve gerçekten yararlı oldu. Çok teşekkürler…
24 Mart 2008, 00:33
[…] için kullanacağımız sınıflardan en kullanışlısı olan SimplePie ile Rss okumayı Eburhan burada detaylı bir şekilde anlattı. Ben de bu sınıf ile birden fazla RSS’i birleştirip […]
25 Mart 2008, 10:49
scripti yerel sunucumda denedim gayet güzel çalışıyor, güncellemeleri vs okuyor ancak nedense web sunucuma attığımda okuduğu rss kaynağındaki bilgiler güncellenince, güncel bilgiler görünmüyor, cache ye okuma yazma izni veriyorum ama yinede olmuyor… cache içindeki localhost zamanından kalan dosyaları sildiğimde script çalışmıyor hata da vermiyor…. localhost da ki cachenin içindeki eski dosyaları alıp ftp ile web sunucudaki cachenin içine tekrar yükleyince haliyle çalışıyor… umarım sorunumu anlatmışımdır sizce neden olabilir?
25 Mart 2008, 13:07
@emrah
gerçekten ilginç bir sorun (: Sorunun neden kaynaklanabileceği konusunda bir fikrim yok ama sana şu önerim olacak. SimplePie’ı indirdikten sonra içerisindeki “compatibility_test” klasörünü sunucuna at ve bu klasör içerisindeki “php” dosyasını çalıştır. Böylece sunucunun, SimplePie’ın bütün gereksinimlerini karşılayıp karşılamadığını görebilirsin.
25 Mart 2008, 17:32
dediğini yaptığımda sunucum SimplePie için oldukça konforlu gözüküyor
cache yerine mySQL ile deneyeceğim bir de…
ayrıca bahsi geçen deneme şu: http://www.fermanyum.com/rss/
3 Nisan 2008, 21:32
Ayrıca jsonme sayesinde herhangi bir feed’i kolayca bir php dizisine atmak mümkün
5 Nisan 2008, 20:02
Hocam adaşım :):)
Yine çok güzel şeyler anlatmışsınız. Eline sağlık.Sitenizden çokça faydalandım. Sizden birçok şey öğrendim.
Ohh içimde kalmadı söyledim işte :):)