Simplepie ile rss işlemek (okumak)

Transkript

Simplepie ile rss işlemek (okumak)
Simplepie ile rss işlemek (okumak)
6 Eylül Pazar ´09 — PHP ve Pear Dökümanları
http://mfyz.com/simplepie-ile-rss-islemek-okumak
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.
Sayfa 1 / 7
İ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.
<?php
// simple pie
require_once('simplepie.inc');
// feed to array
function readRSS($params){
if( !is_array($params) ) $url = $params;
if( !$url ) return false;
// getting feed
$feed = new SimplePie($url);
$feed->handle_content_type();
// params
if($params[expire]) $feed->set_cache_duration($params[expire]);
// feed info
Sayfa 2 / 7
$result[feed][title]
= $feed->get_title();
$result[feed][url]
= $feed->get_permalink();
$result[feed][description] = $feed->get_description();
// items
$i = 1;
foreach ($feed->get_items() as $item){
$items[] = array(
'title'
=> $item->get_title(),
'date'
=> $item->get_date('Y-m-d H:i:s'),
'url'
=> $item->get_permalink(),
'description' => $item->get_description(),
);
$i++;
if( $size and $i > $size ) break;
}
// adding items to result
$result[items] = $items;
// result
return $result;
}
?>
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
Sayfa 3 / 7
:
$feed = new SimplePie($url);
ile yeni bir nesne oluşturup feed adresini ayarlıyoruz.
$feed->handle_content_type();
ile de rss kaynağını alıp okuma işlemini yapıyoruz.
$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 :
$feed->get_title();
// feed ba?l???/ad?
$feed->get_permalink();
// feed ana içerik ba?lant?s?
$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.
Sayfa 4 / 7
Bu foreach içinde bazı methodlarla sıradaki konuya ait bilgileri alıyorum. Bu
methodlar :
$item->get_title();
// konu ba?l???
$item->get_date('Y-md H:i:s') ; // konunun tarihi, burada php'nin date
// parametreleri ile istedi?iniz
// formatta alabilirsiniz.
$item->get_permalink();
// konuya ait ba?lant?
$item->get_description();
// konu aç?klamas?
// hatta bu k?s?m genelde html ola
rak
// 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 :
print_r( readRSS('http://mfyz.tumblr.com/rss') );
Çıktısı şöyle olacaktır :
Array
(
[feed] => Array
(
[title] => mfyznin sosyal ak???
[url] => http://mfyz.tumblr.com/
[description] => Bu günlük özellikle, izledi?im filmler...
)
[items] => Array
(
[0] => Array
Sayfa 5 / 7
(
[title] => Daha yava?? varsa gelsin…
[date] => 2009-07-29 18:43:23
[url] => http://mfyz.tumblr.com/post/151632394
[description] => <img src="http://17.media.tumblr.
com/3YGTMGQuLqhrtmy6gdzjebuNo1_500.png" /><br/><br/>Daha yava?? varsa
gelsin…
)
[1] => Array
(
[title] => Photo
[date] => 2009-07-21 11:48:00
[url] => http://mfyz.tumblr.com/post/145949772
[description] => <img src="http://23.media.tumblr.
com/3YGTMGQuLq5xgnk8LjdWyEcxo1_500.jpg" />
)
[2] => Array
(
[title] => Photo
[date] => 2009-07-19 19:54:48
[url] => http://mfyz.tumblr.com/post/144797738
[description] => <img src="http://4.media.tumblr.c
om/3YGTMGQuLq3jz02mZYNk5E5Eo1_500.jpg" />
)
)
)
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
Sayfa 6 / 7
Bu yazı http://mfyz.com/simplepie-ile-rss-islemek-okumak adresinden indirilmiştir.
Sayfa 7 / 7
Powered by TCPDF (www.tcpdf.org)

Benzer belgeler