PHP ile RSS Beslemesinden JSON Aracılığı ile Veri Çekmek

Bu yazıda, dün gece boyunca PHP'deki file_get_contents() fonksiyonunun neden XenForo RSS beslemelerinden veri çekemediğini araştırdım, fakat hem XenForo'nun bir geliştirici codexinin olmaması hem de tabiki açık kaynak kodlu bir yazılım olmaması nedenlerinden dolayı pek bir yol alamadım.

Bir sonraki adımım, RSS beslemesini Json'a çeviren bir api bulup (rss2json.com) bu api yardımı ile linkleri almak oldu. Aslına bakarsanız bu çok daha modüler bir çözümdü, çünkü PHP ile RSS sayfasını okumak için gönderdiğim her istekte sayfayı yeniden yükleyecekti. Rss2json.com, sitesinde .json çıktıları için cache uyguladığından ve dosyaların benim HTTP isteklerimden bağımsız düzenli olarak güncellendiğinden, sayfa yüklemesine ek bir yük oluşturmayacak.

Yazdığım küçük PHP kodu şöyle;

<?php
$rssLink = "SITE_ADRESI";
$PostLimit = 8;

$RSSArr = json_decode(file_get_contents("http://rss2json.com/api.json?rss_url=".urlencode($rssLink)));
//Using rss2json.com API

$i = 0;
foreach($RSSArr->items as $rssFeedObj){
    if($i < $PostLimit){
        echo "<a href='".$rssFeedObj->link."' target='_blank'><li>".$rssFeedObj->title."</li></a>";
    }else{
        break;
    }
    $i++;
}
?>

(Ayrıca bu kodu gist olarak görmek için tıklayın.)

Bu kod üzerinde rss2json api'ının encode edilmiş bir url değişkenini get olarak aldığını görebilirsiniz.

Bir Dakika, JSON? Javascript??

Evet, artık elimizdeki kod JSON, peki neden rss2json çıktısını Javascript üzerinde yorumlamıyoruz? Tercih edilebilecek bir şey;

var getJSON = function(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open("get", url, true);
    xhr.responseType = "json";
    xhr.onload = function() {
      var status = xhr.status;
      if (status == 200) {
        callback(null, xhr.response);
      } else {
        callback(status);
      }
    };
    xhr.send();
};

var rssUrl = "RSSADRESI";

getJSON("http://rss2json.com/api.json?rss_url="+encodeURI(rssUrl), function(n, resp){
 console.log(resp);
});

console.log()

Örnekte gördüğünüz gibi her zaman kullandığım getJSON() callback'li fonksiyonu ile rss2json'a encodelanmış bir url değişkeni vererek konsola response verisini bastırdık.

Sen neden Javascript yerine bir backend teknolojisi ile datayı çektin sorusuna ise şöyle bir cevap verebilirim; benim bu datayı kullanacağım site, %70+ oranında mobil hit almakta, bu yüzden client tarafını fazla yormak istemiyorum. Her sayfa yüklenmesinde Javascriptin dolayısı ile telefonun response beklemesi ideal bir durum değil, özellikte orta ve düşük seviye akıllı telefonlar için.

Siz de bu tür bir seçim yaparken, uygulamanızın veya internet sitenizin kullanıcılarının içeriğe erişim sistemini göz önüne almalısınız. Benim seçeneğim sunucuya ekstra yük verecek olmasına rağmen, çoğu kullanıcının siteyi dolaşmasını daha rahat hale getirecektir.

Yorumları Göster veya Yeni Yorum Yaz